powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Схема справочника товаров и атрибутов.
25 сообщений из 28, страница 1 из 2
Схема справочника товаров и атрибутов.
    #37874859
rodrigez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БД содержит в основном однотипный справочник товаров (лекарства, изделия медицинского назначения и т.д.). Выделю, важные сейчас для меня три таблицы относящиеся к справочнику товаров:
Вид_товара (id, name), Аналоги (Id, Name), Товары (id, name, id_вид_товара, id_аналога, id_производителя и т.д.), Аналоги - это те же товары, только без уточнения производителя - это было введено для удобства аналитики.А так же две таблицы с атрибутами, всё немного в упрощенной форме, суть от этого не меняется: Атрибуты(id, name, id_тип_атрибута и т.д.), Значения_Атрибутов(id_товара, id_атрибута, значение).
В базе порядка 100 тыщ товаров, порядка 20 атрибутов у каждого товара, и все атрибуты привязаны к товару. Соответственно в таблице Значения_Атрибутов ~2 млн записей, со всеми вытекающими отсюда последствиями, включая то, что если нужно вытащить все атрибуты для товара, приходиться делать 20 join к одной таблице. Я хочу всё это дело как-то по возможности оптимизировать, а именно, первое что пришло в голову - это разделить атрибуты по видам. То есть будет 3 вида атрибутов: 1 - наиболее общий, относиться к таблице Вид_товара, 2 - менее общий, относиться к уровню Аналоги, и наконец 3 - наиболее частный вид атрибутов относится к конкретным товарам. Ещё раз повторюсь наборы атрибутов однотипные, т.е. нет такого , что например, в группе Вид_товара будут разный набор атрибутов для разных видов товара, набор будет один для всех видов товара, то же самое для аналогов и для товаров. Далее, как мне кажется нужно вводить разные типы данных для хранения атрибутов, т.е. целое, строка, дата и т.д. Набросал в erwin схему. Уважаемые эксперты,пожалуйста, взгляните и укажите где и какие недостатки.
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37874922
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, самое важное решить, как увязывать аналоги с товарами. Если бы для каждой группы аналогов был бы один "образцовый" товар, то таблица аналогов не нужна, достаточно иметь в таблице товаров ссылку на образец, аналогом которого он является. Свойства товара тоже относились бы к одной таблице товаров.

Может ли товар быть аналогом двух разнотипных товаров ? Т.е. товар АБ аналог товара А (соответсвенно А - аналог АБ) и одновременно АБ аналог товара Б (соответсвенно Б - аналог АБ), но при этом А аналогом Б не является.
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37874953
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rodrigezесли нужно вытащить все атрибуты для товара, приходиться делать 20 join к одной таблице

Чья пустая голова породила такой идиотский бред? Все атрибуты одного товара вытаскиваются
одним запросом, вообще без джоинов, с полной оптимизацией индексами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37874960
rodrigez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист-ЛюбительМне кажется, самое важное решить, как увязывать аналоги с товарами. Если бы для каждой группы аналогов был бы один "образцовый" товар, то таблица аналогов не нужна, достаточно иметь в таблице товаров ссылку на образец, аналогом которого он является. Свойства товара тоже относились бы к одной таблице товаров.

Может ли товар быть аналогом двух разнотипных товаров ? Т.е. товар АБ аналог товара А (соответсвенно А - аналог АБ) и одновременно АБ аналог товара Б (соответсвенно Б - аналог АБ), но при этом А аналогом Б не является.

У "Товар" и "Аналог" связь один ко многим. Т.е. Например есть аналог Аспирин №10_Россия , к нему относятся товары Аспирин №10_Акрихин(г.Москва), Аспирин №10_БытХимПром(г.Перьм) и т.д. Далее есть аналог Аспирин №10_Импорт, к нему относятся товары Аспирин №10_БерлинХеми(г.Мюнхен), Аспирин №10_Упса(г.Париж) и т.д. К сожалению понятие Аналог выкинуть из схемы очень нежелательно, т.к. очень много аналитических отчетов готовых на нём завязано.
Меня больше сейчас волнует, правильную ли я выбрал схему соединяющую таблицу Параметры и Значения (это Параметр_String, Параметр_Int ит.д.). Может нужно что-то более нормализовать и т.д. ?
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37874981
rodrigez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovrodrigezесли нужно вытащить все атрибуты для товара, приходиться делать 20 join к одной таблице

Чья пустая голова породила такой идиотский бред? Все атрибуты одного товара вытаскиваются
одним запросом, вообще без джоинов, с полной оптимизацией индексами.


может быть в первом посте не совсем ясно выразился. Привожу структуру таблиц

Код: sql
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.
CREATE TABLE VPROPERTIES_TYPES (
    VPROPERTIES_TYPES_ID        DID /* DID = INTEGER NOT NULL */,
    VPROPERTIES_TYPES_NAME      VARCHAR(64),
    VPROPERTIES_TYPES_NAME_ALT  VARCHAR(64),
    VPROPERTIES_TYPES_MASK      VARCHAR(128),
    VPROPERTIES_TYPES_COMMENT   VARCHAR(128),
    VPROPERTIES_TYPES_ERROR     VARCHAR(128),
    USERNAME                    VARCHAR(64),
    DATE_MODIFY                 TIMESTAMP
);



 CREATE TABLE VMED_PROPERTIES (
    VMED_PROPERTIES_ID             DID NOT NULL /* DID = INTEGER NOT NULL */,
    VMED_PROPERTIES_NAME           DNAMESLONG /* DNAMESLONG = VARCHAR(128) */,
    VMED_PROPERTIES_NAME_ALT       DNAMESLONG /* DNAMESLONG = VARCHAR(128) */,
    VMED_PROPERTIES_CLASSES_ID     DID /* DID = INTEGER NOT NULL */,
    VPROPERTIES_TYPES_ID           FID /* FID = INTEGER */,
    VMED_PROPERTIES_DEFAULT_VALUE  DNAMESLONG COLLATE PXW_CYRL /* DNAMESLONG = VARCHAR(128) */,
    USERNAME                       DNAMESSMALL /* DNAMESSMALL = VARCHAR(64) */,
    DATE_MODIFY                    TIMESTAMP
);


CREATE TABLE MED_PROPERTIES (
    VMEDICAMENTS_ID       DID /* DID = INTEGER NOT NULL */, Это код товара
    VMED_PROPERTIES_ID    DID /* DID = INTEGER NOT NULL */,
    MED_PROPERTIES_VALUE  DNAMESSMALL /* DNAMESSMALL = VARCHAR(64) */,
    USERNAME              DNAMESSMALL /* DNAMESSMALL = VARCHAR(64) */,
    DATE_MODIFY           TIMESTAMP
);




и если например мне необходимо вытащить хотябы 3 атрибута, мне придется делать:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
...
       left join vmed_properties vp3 on vp3.vmed_properties_name = 'Валюта'
       left join med_properties mp3 on mp3.vmed_properties_id = vp3.vmed_properties_id and
                                    mp3.vmedicaments_id = so.outvmedicaments_id
       left join vmed_properties vp4 on vp4.vmed_properties_name = 'НДС'
       left join med_properties mp4 on mp4.vmed_properties_id = vp4.vmed_properties_id and
                                    mp4.vmedicaments_id = so.outvmedicaments_id
       left join vmed_properties vp5 on vp5.vmed_properties_name = 'Рег. цена'
       left join med_properties mp5 on mp5.vmed_properties_id = vp5.vmed_properties_id and
                                    mp5.vmedicaments_id = so.outvmedicaments_id
...
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37874999
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rodrigezНапример есть аналог Аспирин №10_Россия , к нему относятся товары Аспирин
№10_Акрихин(г.Москва), Аспирин №10_БытХимПром(г.Перьм) и т.д.
У вас в схеме перепутаны местами понятия "товар" и "аналог". "Аспирин номер 10" это как
раз товар, а остальное - его аналоги от различных производителей, в том числе - заграничных.

И вообще это всё по уму-то укладывается в одно дерево классификации:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Аспирин
+- Аспирин 10
|  +- Аспирин Россия
|  |  +- Аспирин московский
|  |  +- Аспирин пермский
|  +- Аспирин заграничный
|     +- Аспирин У ПСА
|     +- Аспирин байеровский
+- Аспирин растворимый

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875014
rodrigez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovrodrigezНапример есть аналог Аспирин №10_Россия , к нему относятся товары Аспирин
№10_Акрихин(г.Москва), Аспирин №10_БытХимПром(г.Перьм) и т.д.
У вас в схеме перепутаны местами понятия "товар" и "аналог". "Аспирин номер 10" это как
раз товар, а остальное - его аналоги от различных производителей, в том числе - заграничных.

И вообще это всё по уму-то укладывается в одно дерево классификации:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Аспирин
+- Аспирин 10
|  +- Аспирин Россия
|  |  +- Аспирин московский
|  |  +- Аспирин пермский
|  +- Аспирин заграничный
|     +- Аспирин У ПСА
|     +- Аспирин байеровский
+- Аспирин растворимый


Может быть вы и правы. Но в первом посте я написал, что в имеющейся работающей системе Аналог - это товар без указания производителя. К сожалению, а может и к счастью сделано именно так, т.е. общий аналог для всех российских аспиринов № 10 является Аспирин№10_Россия. Может быть тому виной специфика товаров относящихся к фармацевтике и люди которые с этим работают посчитали что им так будет удобнее и правильнее. Но вопрос то мой касается не аналогов, а атрибутов. Т.е. имеет ли право на жизнь приведенная мной схема, или её сразу нужно в помойку? Простите за назойливость
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875017
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rodrigezесли например мне необходимо вытащить хотябы 3 атрибута, мне придется
делать:
И именно это я назвал идиотским бредом. Атрибуты в любом количестве вытаскиваются так:
Код: sql
1.
2.
3.
4.
... from vmed_properties vp3 join med_properties mp3
   on mp3.vmed_properties_id = vp3.vmed_properties_id
where mp3.vmedicaments_id = so.outvmedicaments_id
   and vp3.vmed_properties_name in ('Валюта','НДС','Рег. цена')


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875023
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это у кого ж такая БД, rodrigez? Фармацевты - состоятельные ребята, что, у них нет денег на то, чтобы нанять нормального архитектора?

Здесь оптимизировать нечего, нужно выбрасывать все целиком. Не читайте тенцеров. Особенно на ночь.
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875056
Изгоев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rodrigez, а речь идёт об аналогах, синонимах ( дженериках ) или о том и о другом вместе?
Если об аналогах, то должны указываться, как мне представляется, болезни, для которых эти лекарства аналоги.
При чём, для одной болезни - аналоги, а для другой - не аналоги.
Если синонимы - тогда проще.
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875083
rodrigez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621Это у кого ж такая БД, rodrigez? Фармацевты - состоятельные ребята, что, у них нет денег на то, чтобы нанять нормального архитектора?

Здесь оптимизировать нечего, нужно выбрасывать все целиком. Не читайте тенцеров. Особенно на ночь.

Т.е. , на сколько я понял вы против EAV. Тогда помогите дельным советом, или хотя бы намекните в какую сторону копать?
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875092
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rodrigezТогда помогите дельным советом, или хотя бы намекните в какую сторону
копать?
Ты всерьёз хочешь слушать советов серых личностей, неспособных даже зарегистрироваться на
форуме?.. В морг.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875093
rodrigez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изгоевrodrigez, а речь идёт об аналогах, синонимах ( дженериках ) или о том и о другом вместе?
Если об аналогах, то должны указываться, как мне представляется, болезни, для которых эти лекарства аналоги.
При чём, для одной болезни - аналоги, а для другой - не аналоги.
Если синонимы - тогда проще.

В данной системе понятие аналог было введено и названо искуственно. Это больше можно назвать синомимом. Здесь аналог - это товар без указания производителя, кому то так показалось правильно.
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875100
rodrigez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovrodrigezТогда помогите дельным советом, или хотя бы намекните в какую сторону
копать?
Ты всерьёз хочешь слушать советов серых личностей, неспособных даже зарегистрироваться на
форуме?.. В морг.


Димитрий, ты советуешь оставить так как есть и ничего не менять?
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875126
rodrigez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovrodrigezесли например мне необходимо вытащить хотябы 3 атрибута, мне придется
делать:
И именно это я назвал идиотским бредом. Атрибуты в любом количестве вытаскиваются так:
Код: sql
1.
2.
3.
4.
... from vmed_properties vp3 join med_properties mp3
   on mp3.vmed_properties_id = vp3.vmed_properties_id
where mp3.vmedicaments_id = so.outvmedicaments_id
   and vp3.vmed_properties_name in ('Валюта','НДС','Рег. цена')




..что интересно, сейчас в коде посмотрел, в некоторых местах у меня так и сделано, а в некоторых с джоинами, просто я не думал что вы так на 20 джинах внимание заострите. Но, по моему, как бы то ни было, 2 млн. записей - не хорошо, особенно если учесть, что большая часть параметров дублируется для каждого товара, т.е. часть этих атрибутов можно привязать к Видам_товара, тогда никакого дублирования не будет. И вопрос мой, собственно говоря именно с этим и связан, а ещё вопрос про представленную схему, что в ней не так по вашему мнению.
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875142
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rodrigezНо, по моему, как бы то ни было, 2 млн. записей - не хорошо, особенно если учесть, что
большая часть параметров дублируется для каждого товара, т.е. часть этих атрибутов можно
привязать к Видам_товара, тогда никакого дублирования не будет.

Два миллиона записей - мелочь, которой не озадачить ни одну приличную СУБД. Хотите
привязывать атрибуты к видам товара - привязывайте, дело благое, но учтите, что операторы,
которые будут вносить эти атрибуты, вашу работу будут саботировать, плодя всё те же дубли
для каждого товара по отдельности. Потому что им так проще.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875156
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> вы против EAV

В такой форме - категорически да.

> Тогда помогите дельным советом

Тема истоптана вдоль и поперек, наверное, четверть сообщений форума об этом. Главное, что вы должны понимать, - зачем вам такая структура и как она должна эволюционировать. Роль такой структуры - накопление данных для набора значений характеристик. Как только вы получили такой набор, характеристика описывается традиционным образом. Ни о каких миллионах значений речь идти не может по определению.

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

Два миллиона записей - мелочь, которой не озадачить ни одну приличную СУБД. Хотите
привязывать атрибуты к видам товара - привязывайте, дело благое, но учтите, что операторы,
которые будут вносить эти атрибуты, вашу работу будут саботировать, плодя всё те же дубли
для каждого товара по отдельности. Потому что им так проще.


Это означает что приведенную выше схему вы "одобрям" или всё таки "не одобрям"?

Вы правы. Но есть в конце концов административные рычаги. Операторы эти параметры вводить не будут, будет вводить один манагер-провизор, который будет контролироваться администратором БД и будет обосновывать необходимость введения того или иного параметра, если что не так, будет получать по репе (в переносном смысле).
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875162
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> В морг

Дружище, мнение дегенератов - зарегистрированных где угодно какое угодно количество раз - меня не интересует. Хотите, чтобы к вам относились серьезно, научитесь хорошо делать свою работу. Регистрироваться и трепать языком умеет любая блондинка.
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875178
rodrigez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621> вы против EAV

В такой форме - категорически да.

> Тогда помогите дельным советом

Тема истоптана вдоль и поперек, наверное, четверть сообщений форума об этом. Главное, что вы должны понимать, - зачем вам такая структура и как она должна эволюционировать. Роль такой структуры - накопление данных для набора значений характеристик. Как только вы получили такой набор, характеристика описывается традиционным образом. Ни о каких миллионах значений речь идти не может по определению.

Но в данном случае это не основная проблема вашей базы данных. У вас не решена основная задача: идентификация продукта, нет системы альтернативного именования и не описаны критерии сравнения (просто аналогов не бывает, как вы понимаете, есть близость по некоторому критерию или их набору).

Это всё понятно, но справочник уже создан, и работает лет 5, заново его делать никто не будет. Я , просто, хочу получить дельный совет относительно атрибутов , а именно оставить всё как есть или , всё таки, поменять структуру. Можно вообще абстрагироваться от аналогов, принять что их нет. Есть только группы товара, товар, атрибуты, значения разных типов. А ещё есть предложенная схема, на картинке в первом посте. Желательно получить ответ, что в ней не так.
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875189
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rodrigez, забавная позиция, ничего менять не будем, но скажите что не так )))) зачем?
Уже вроде объяснили, что тут надо нормальные человеческие атрибуты сделать, а не EAV.
И что с аналогами никуда не годно. Что ещё указать-то надо?
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875205
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Это всё понятно

Вот как? Ну, тогда вам должно быть понятно и то, что вы задали глупый вопрос: способ идентификации и способ описания - это связанные задачи и решаются последовательно. Сначала - идентификация.
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875214
rodrigez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Васкецовrodrigez, забавная позиция, ничего менять не будем, но скажите что не так )))) зачем?
Уже вроде объяснили, что тут надо нормальные человеческие атрибуты сделать, а не EAV.
И что с аналогами никуда не годно. Что ещё указать-то надо?
А что есть в вашем понимании "НЕ EAV нормальные человеческие атрибуты", объясните пожалуйста.
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875226
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rodrigezЭто означает что приведенную выше схему вы "одобрям" или всё таки "не
одобрям"?
Это значит, что приведённую выше схему не смотрел и мне пох. Используйте мозг вместо
форума и будет вам счастье. Практика - критерий истины.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Схема справочника товаров и атрибутов.
    #37875237
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rodrigezобъясните пожалуйста
Зачем?
1. Это есть в ЛЮБОЙ книжке по проектированию структуры БД.
2. Это уже тут объяснялось.
3. Потому что "справочник уже создан, и работает лет 5, заново его делать никто не будет".
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Схема справочника товаров и атрибутов.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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