powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите сформировать отношения у табличек.
25 сообщений из 26, страница 1 из 2
Помогите сформировать отношения у табличек.
    #36271459
palladin600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разрабатываю пару таблиц.
Одна - группа товара.
Вторая - сам товар.
Третья - связь на значения атрибутов товара.
Четвёртая - связь на значения атрибутов группы

Итак, у товара, допустим, есть 2 атрибута: мощность и вес. В поиске отобрать записи по такому условию, отобрать не составляет труда. Однако, группа этого товара также имеет общие атрибуты для товара, например, цвет.
В результате товар имеет 3 атрибута:
Мощность
Вес
Цвет

Мне по условию надо найти "белый" товар, который весит "5кг".
Но я незнаю, в какой таблице хранятся каждый из атрибутов. Т.е. это по условию.

Вопрос такой, посоветуйте пожалуйста схему для таблиц, чтобы можно было хранить и атрибуты групп и атрибуты товара, и при этом получать выборку товара с учётом атрибутов группы.
Уже ломаю голову неделю, ничего на ум не приходит. Перебрал кучу вариантов и совсем запутался. Разве что хранить для каждого товара ещё и атрибут группы, т.е. в данном случае и цвет. Но это крайне не хочется делать, на то есть свои веские причины.
В группе товара элемент может иметь свой набор атрибутов.

Буду рад любому размышлению и совету.

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36271614
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица групп и товаров единая: "ТМЦ". Группы при необходимости помечаются признаком. Товары имеют ссылки на эту же таблицу - что обеспечивает хранение о вхождении товара в группы.
Значения атрибутов хранить в одной таблице, в которой есть ссылка на ТМЦ.

Выборка получается простая: выбрать все товары, атрибуты которых ссылаются на Ид товара или ИдГруппы, в которую входят эти товары.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36272136
palladin600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о, неплохое начало.
с большего трудностей не видно.
сейчас попробую сэмулировать обстановку.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36273080
palladin600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
astonВыборка получается простая: выбрать все товары, атрибуты которых ссылаются на Ид товара или ИдГруппы, в которую входят эти товары.

в общем, не совсем получается сделать такую выборку.
я говорил, о том, что есть условие, что я незнаю кому принадлежит атрибут, группе или продукту.
так вот как отобрать белый товар с весом в 5 кг.
вот таблицы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
declare @products table(id int, id_parent int, name varchar( 20 ))
insert into @products(id, id_parent, name)
select  1 , NULL, 'Группа товара 1' union all
select  2 , NULL, 'Группа товара 2' union all
select  3 ,  1 , 'Товар группы1' union all
select  4 ,  1 , 'Товар группы1' union all
select  5 ,  1 , 'Товар группы1' union all
select  6 ,  2 , 'Товар группы2' 

declare @products_values table(id_products int, id_values int)
insert into @products_values(id_products, id_values)
select  1 ,  1  union all
select  2 ,  2  union all
select  3 ,  3  union all
select  3 ,  4  union all
select  6 ,  3  union all
select  6 ,  6  union all
select  5 ,  4  union all
select  5 ,  5 

declare @values table(id_values int, id_properties int, value varchar( 10 ))
insert into @values(id_values, id_properties, value)
select  1 ,  3 , 'Белый' union all
select  2 ,  3 , 'Чёрный' union all
select  3 ,  1 , '100Вт' union all
select  4 ,  1 , '200Вт' union all
select  5 ,  2 , '5кг' union all
select  6 ,  2 , '12кг' 

declare @properties table(id int, name varchar( 20 ))
insert into @properties(id, name)
select  1 , 'Мощность' union all
select  2 , 'Вес' union all
select  3 , 'Цвет'

можно ли както получить такой товар именно по атрибуту, без указания кому атрибут принадлежит: группе или продукту.

т.е. результатом должа стать запись с id=5 из таблицы @products
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36273338
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Под рукой только Oracle 7.3, поэтому наименование таблицы values изменил, т.к. "values" в Oracle - reserved. На выбор:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT   p.*
  FROM   products p, products_values pv
 WHERE       (p.id = pv.id_products)
         AND pv.id_values IN ( 1 ,  5 )
         AND p.id_parent IS NOT NULL
INTERSECT
SELECT   p.*
  FROM   products p, products_values pv
 WHERE   (p.id_parent = pv.id_products) AND pv.id_values IN ( 1 ,  5 )

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT   p1.id, p1.id_parent, p1.name
  FROM   (SELECT   p.*
            FROM   products p, products_values pv
           WHERE       (p.id = pv.id_products)
                   AND pv.id_values IN ( 1 ,  5 )
                   AND p.id_parent IS NOT NULL) p1,
         (SELECT   p.*
            FROM   products p, products_values pv
           WHERE   (p.id_parent = pv.id_products) 
                   AND pv.id_values IN ( 1 ,  5 ))
         p2
 WHERE   p1.id = p2.id

Переделайте под MSSQL с использованием его нативных конструкций. Например, EXISTS.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36273358
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и учтите, что приведенная вами структура таблиц позволит выполнять поиск только по точному соответствию значений, но не по диапазону (например, все товары с мощностью до 300 Вт).

Поэтому я бы вообще выкинул таблицу values и переопределил бы таблицу products_values как
Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE product_property_values
(
   id_product       NUMBER,
   id_property      NUMBER,
   property_value   VARCHAR2 ( 255 )
)

Соответственно, и запросы чуть подкорректировать придется.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36273620
palladin600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aston, большое спасибо за помощь.
да, безусловно, товар понадобится отбирать и с применением диапазона в атрибутах.
тогда получается, что выкинув таблицу values и приведению таблицы products_values в вид, как вы рекомендуете:
Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE product_property_values
(
   id_product       NUMBER,
   id_property      NUMBER,
   property_value   VARCHAR2 ( 255 )
)
вынудит вбивать для каждого продукта свои собственные атрибуты.
таблица values, подрузамевала хранение именно эталонных значений.
т.е. чтоб не вбивать для каждого товара что он весит 5кг, а просто указывать ссылку на таблицу values, где это значение в 5кг будет в единственном виде.

исходя из вышесказанного, может есть смысл хранить в values просто ещё и атрибут группы но для продукта? а для группы вообще ничего не указывать.
т.е. просто вбивать для каждого товара ещё и то, какой он белый или чёрный. и всё, может так?
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36273804
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, не вынудит. product_property_values ссылается на product, в которой хранятся как группы, так и товары.
Смотря какой смысл вы вкладываете в "группы". Что это такое в вашей предметной области?

Про эталонные значения подумайте - нужны ли они вам. С атрибутами "Мощность" и, тем более, "Вес", их применение имхо не уместно.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36273996
palladin600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, группы мне необходимы для группирования определённого типа товара. и чтобы не вбивать для каждого товара повторяющийся атрибут , я думал хранить его общим для всей группы.
например,
группа товара: масло, общий атрибут группы: подсолнечное, в эту группу входят товары: масло рафинированное 100мл. и масло нерафинированное 200мл.,
эти товары сгруппированы по атрибуту подсолнечное. и этот атрибут автоматически принадлежит каждому товару группы, т.е. реально выходит, что масло:
Код: plaintext
1.
2.
а) подсолнечное	а) подсолнечное
б) рафинированное	б) нерафинированное
в) 100мл.		в) 200мл.

ещё одна группа товара: масло, общий атрибут группы: моторное, в эту группу входят товары: масло синтетическое 1л. и масло минеральное 2л., эта другая группа, и общий атрибут для неё: моторное, и получается, что каждый товар этой группы инкапсулирует в себя ещё и общий для группы атрибут:
Код: plaintext
1.
2.
а) моторное	а) моторное
б) синтетическое	б) минеральное
в) 1л.		в) 2л.

вот. это я вкладывал в понятие групп.
я специально и зател этот вопрос, чтобы выяснить, насколько реально жизнеспособна такая схема. но если это слабая конструкция, то я лучше откажусь от неё и выслушаю другое решение.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36274366
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несколько озадачен.
Я понимаю, номализация, все дела.
Но мне кажется, вы пытаетесь нормализовать русский язык и арифметику впридачу.

Между "маслом подсолнечным" и "маслом моторным" общего только слово "масло" и больше ничего.
Такая же пропасть между "белым крокодилом" и "белым самолетом".
Надо различать функциональные и качественые характеристики предметов.
"Подсолнечное" и "моторное" - это функциональные характеристики условного предмета "масло", которые употребялются только вместе с самим предметом и никак не поотдельности.

Постройте семантическую модель вашего каталога товаров и вы поймете, какие вам нужны сущности и связи.
Например, классика:
- ТМЦ делятся на виды сообразно своему функциональному предназначению
- каждый вид ТМЦ имеет свой набор атрибутов, характерных исключительно и только для данного конкретного вида
- каждая ТМЦ в своем описании содержит значения атрибутов, характерных для того вида ТМЦ, к которому она относится

Ну и так далее.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36274554
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Например, классика:

Это классическая чушь. Я упоминал в одном из сообщений наличие принципиальной разницы между логикой Галилея и Аристотеля. Логика Аристотеля не работает для проектирования баз данных. Это нужно просто запомнить.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36274900
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для проектирования баз данных очень подходят бизнес-требования, являющиеся основой для построения семантической модели.
Бизнес крайне далек от науки в части любви к искусству. Примеры приводить, когда системы на ужасно (с точки зрения теории) спроектированных БД являются лидерами рынка?
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36275386
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Примеры приводить

Не нужно. Примеры иллюстрируют закон Парето, который в данном случае формулируется как "80% населения Земли - бараны". И это ни разу не является поводом для тиражирования ошибок.

Вы должны понимать, что классификация по функциональным признакам условна. "Бизнес-требования" - это вообще бессмысленный набор букв. И с семантической моделью этот набор букв никак не связан.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36275738
palladin600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гхм, простите,
а что мне делать?
Всё-таки, складывать все атрибуты для каждого товара? Так лучше делать?
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36275995
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> а что мне делать?

Это хороший вопрос. Для начала определитесь, что вы вообще собираетесь описывать. Казалось бы, простая характеристика - цвет, а идентифицировать его можно по разному. Для пре-пресс это может быть идентификатор калибра, спектр или измеренная величина, для потребительской характеристики - приближенное значение или значение, вообще с цветом ничего общего не имеющее (типа цвета кузова автомобиля "хамелеон"), а для, например, реставрационного стоматологического материала - идентификатор палитры вендора, причем, у каждого вендора палитра уникальна.

Построить исчерпывающе полную модель сложно, недостаточно задействовать только семантическую модель.

На вашем месте я бы выделил две большие группы признаков - технические (в т. ч. технологические) и потребительские. Среди технических признаков я бы выделил относительно хорошо стандартизованные (электропитание, упаковка, физическая форма и размеры и пр.) и создал бы для них отдельную структуру данных. А вот с оставшимися техническими и потребительскими характеристиками можно поступать по-разному, в зависимости от того, для чего будет использоваться база данных. Вообще нормальный процесс в данном случае - постоянное уточнение модели. Скажем, смогли выделить некий функциональный конструктив у некоторой группы товаров - построили его модель, завели новую ревизию структуры данных и значений.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36276050
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кошмар.

p.s. "Цвет" потребительский, "Цвет" в стоматологии, "Цвет" автомобильный, "Цвет" нации - это разные виды атрибутов, имеющих одно общее слово "цвет".
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36276063
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palladin600Гхм, простите,
а что мне делать?
Всё-таки, складывать все атрибуты для каждого товара? Так лучше делать?

Да. Потому что ваши "группы" - это не группы товаров, а группы атрибутов товаров.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36276364
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> p.s. "Цвет" потребительский, "Цвет" в стоматологии, "Цвет" автомобильный, "Цвет" нации - это разные виды атрибутов

Цвет нации - это бессмысленное определение. Все остальное - характеристика восприятия глазом света, сформулированная в разных контекстах.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36276443
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
astonТовары имеют ссылки на эту же таблицу
Запомнил.

astonВыборка получается простая: выбрать все товары, атрибуты которых ссылаются на Ид товара или ИдГруппы, в которую входят эти товары.
Вспомнил первое и задумался, как быть с "прародителями".

Всячески поддерживаю позицию guest-а в части атрибутов номенклатуры (уточнение модели). По собственному опыту - все прочие велосипеды работают плохо и недолго, либо не работают вообще.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36276531
Мне кажется, прежде, чем принимать какое-то решение, стоит подробнее изучить, как организованы группы товаров в существующих ИС. В поисковике просто набрать 'справочник товарных групп' - будет море примеров.
По поводу дерева тоже нужно подумать, прежде чем реализовывать эту схему. Удобно, конечно, но вроде бы не рекомендуется хранить группы и товары в одной таблице, поскольку это разные сущности. На форуме встречались обсуждения на эту тему. Может быть, для Вас это и несущественно, но ознакомиться стоит.
И еще - атрибуты будут иметь только строковые значения? Числовые, например, не предполагаете использовать?
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36276576
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Всячески поддерживаю позицию guest-а в части атрибутов номенклатуры (уточнение модели)

Я уже с утра почувствовал, что что-то не так. ;) Сначала вспышки на Солнце, теперь вы.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36276762
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> p.s. "Цвет" потребительский, "Цвет" в стоматологии, "Цвет" автомобильный, "Цвет" нации - это разные виды атрибутов

Цвет нации - это бессмысленное определение. Все остальное - характеристика восприятия глазом света, сформулированная в разных контекстах.

"Цвет" нации с остальными "цветами" имеет точно точно такую же связь, как "масло моторное" и "масло подсолнечное". Т.е. никакой.

Разные контексты и приводят к тому, что атрибуты становятся разными. "Цвет автомобильный" со значением 1U2 - это и не цвет вовсе, это код цвета по цветовой палитре вендора (в даном случае - Subaru).
Таким образом, при описании автомобиля, нам может понадобиться 2 разных атрибута, описываемых для двух разных контекстов использования: "цвет потребительский" (обобщенно для покупана - "коричневый металлик") и "код цвета" (точный состав краски - для маляра). Что в каталогах EPC, например, и делается.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36276840
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Т.е. никакой.

Это заблуждение. "Масло" в данном случае идентифицирует часть свойств продукта, связанных с вязкостью. "Моторное" - область применения, а "подсолнечное" - технологический процесс. Никто не обещал, что подсолнечное масло нельзя использовать в качестве моторного. Возможно, есть технологический процесс, позволяющий получить продукт с нужными свойствами.

Ваша ошибка в том, что вы принимаете ключевые слова за основу для классификации. А приниматься за основу должны однородные определения. Т. е. подсолнечное масло должно, во-первых, быть идентифицировано как пищевой продукт, во-вторых, иметь суррогатное название с общими для всех масел принципами идентификации.

> Разные контексты и приводят к тому, что атрибуты становятся разными.

И это заблуждение. Атрибуты остаются теми же самыми. Меняется только способ их идентификации и описания.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36277363
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понимаю вашу логику, но не могу ее использовать просто потому, что не считаю фонетические основы русского языка корректными, чтобы классифицировать объекты.
Любая жидкость обладает вязкостью, но не любая жидкость является маслом (вода, водка, смола, сироп и т. д.).
"Масло" - это не часть свойств (точнее, слово может быть употреблено для идентификации объектов, обладающих повышеной вязкостью, но кваждый себе представит разное масло). Но, в общем случае, оно вообще само по себе без уточения контекста бессмысленное и неидентифицируемое. Это просто такое слово в языке. В русском, причем. Сравните с английским. Моторное, подсолнечое и сливочное. В русском языке это все "масло". В то время как сливочное, в английском - это не oil, a butter.
И из-за того, что на разных языках объекты именуются по разному, способы их классификации не могут измениться.
...
Рейтинг: 0 / 0
Помогите сформировать отношения у табличек.
    #36277394
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
astonИ из-за того, что на разных языках объекты именуются по разному, способы их классификации не могут измениться.

Точнее было бы: "Из-за того, что в одном языке это одинаковые слова, те, кто думают на этом языке, не должны заблуждаться".
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите сформировать отношения у табличек.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]