Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Схема справочника товаров и атрибутов. / 25 сообщений из 28, страница 1 из 2
11.07.2012, 13:50
    #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
11.07.2012, 14:19
    #37874922
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Схема справочника товаров и атрибутов.
Мне кажется, самое важное решить, как увязывать аналоги с товарами. Если бы для каждой группы аналогов был бы один "образцовый" товар, то таблица аналогов не нужна, достаточно иметь в таблице товаров ссылку на образец, аналогом которого он является. Свойства товара тоже относились бы к одной таблице товаров.

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

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

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

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

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


Может быть вы и правы. Но в первом посте я написал, что в имеющейся работающей системе Аналог - это товар без указания производителя. К сожалению, а может и к счастью сделано именно так, т.е. общий аналог для всех российских аспиринов № 10 является Аспирин№10_Россия. Может быть тому виной специфика товаров относящихся к фармацевтике и люди которые с этим работают посчитали что им так будет удобнее и правильнее. Но вопрос то мой касается не аналогов, а атрибутов. Т.е. имеет ли право на жизнь приведенная мной схема, или её сразу нужно в помойку? Простите за назойливость
...
Рейтинг: 0 / 0
11.07.2012, 14:58
    #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
11.07.2012, 14:59
    #37875023
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Схема справочника товаров и атрибутов.
Это у кого ж такая БД, rodrigez? Фармацевты - состоятельные ребята, что, у них нет денег на то, чтобы нанять нормального архитектора?

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

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

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

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


Димитрий, ты советуешь оставить так как есть и ничего не менять?
...
Рейтинг: 0 / 0
11.07.2012, 15:53
    #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
11.07.2012, 15:57
    #37875142
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Схема справочника товаров и атрибутов.
rodrigezНо, по моему, как бы то ни было, 2 млн. записей - не хорошо, особенно если учесть, что
большая часть параметров дублируется для каждого товара, т.е. часть этих атрибутов можно
привязать к Видам_товара, тогда никакого дублирования не будет.

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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