powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Организация справочника с доп.параметрами
13 сообщений из 13, страница 1 из 1
Организация справочника с доп.параметрами
    #35372076
Tarabtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго Вам дня!

Есть справочник товаров.
Код: plaintext
1.
2.
3.
4.
  
  TYPES (ID, NAME)  - тип товара. 
  SPR(ID, 
        TYPE,  -- ссылка на TYPES.ID
        NAME) 
Для каждого типа товаров надо хранить ряд доп.параметров, например: срок годности, тара, ед. изм, и т.д.

Вижу несколько вариантов реализации:
1. Для каждого доп.параметра создавать поле
2. Исподьзовать таблицу доп.параметров
Код: plaintext
   PARAMS(ID, NAME)
набор необходимых параметров для типа
Код: plaintext
1.
   TYPEPRAMS (TYPE,    -- ссылка на TYPES.ID
                  PARAM)  -- ссылка на PPARAMS.ID
и значения хранить таблице
Код: plaintext
1.
2.
3.
   PARAMVALUES
   (SPR,     -- ссылка на SPR.ID
    PARAM  -- ссылка на PARAMS.ID
    VALUE)
3. тоже, что и 2 только с использованием NESTED TABLE

Какая организация справочника будет лучше по производительности БД?
...
Рейтинг: 0 / 0
Организация справочника с доп.параметрами
    #35372108
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для ЕдИзм однозначно нужна отдельная таблица, причем один ко многим, т.к. у товара может быть много ЕИ.
В таблице указать:
* Признак базовой ЕИ
* Коэф пересчета в базовую ЕИ
* Допустимая кратность деления на части (штука не делится, Вес делится до 0,001 и т.д.)
* Штрихкод (по необходимости)
* Возможна ссылка на тару
* Объем, габариты, вес конкретной ЕИ.

Для прочих параметров можно сделать одну или несколько таблиц. Зависит от ТЗ.
...
Рейтинг: 0 / 0
Организация справочника с доп.параметрами
    #35372238
Tarabtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ.

LSVДля прочих параметров можно сделать одну или несколько таблиц. Зависит от ТЗ.
Надо сделать универсальный механизм, чтобы не зависеть от ТЗ.
...
Рейтинг: 0 / 0
Организация справочника с доп.параметрами
    #35372272
Нектотам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TarabtsevНадо сделать универсальный механизм, чтобы не зависеть от ТЗ.
Без дополнительных условий это практически невозможно. Ну или сложность использования/внедрения Вашего продукта рискует стать недопустимой.

Справочник товаров для большинства систем очень сильно зависит от предметной области и от того, каким образом используются эти данные.

Простые примеры и вопросы, которые должны Вам помочь:
1. Какого типа VALUE в таблице PARAMVALUES? Число (int? float? numeric?), дата, строка, суррогатный ключ к другой таблице? Любой из этих обладает определёнными ограничениями
2. Как быть если для части товаров применимо свойство "срок хранения", для другой части применимо "гарантийный срок эксплуатации", для третьей "вес брутто", для четвёртой "вес нетто" и все эти части пересекаются? Насколько усложнятся запросы, если все эти свойства разнести по разным таблицам?
3. Как быть с цветоразмерным рядом для одежды и обуви? Для каждой модели есть (определённые производителем) допустимые наборы размеров и цветов. Причем черные ботинки размера 40 могут отсутствовать, хотя черные размера 39 и 41 - могут быть. Причем аналитика в отчетах нужна отдельно по цвету, отдельно по размеру. Причем для одного производителя цвет и размер учтены в штрихкоде, для второго не учтены, а у третьего отдельный ШК на каждую партию.
4. Сыр у небольшого оптовика. Он меряется килограммами. Производитель прислал N килограмм. На складе его взвесили. Но фактически сыр лежит круглыми головками и минимальный заказ вашего покупателя 1 головка. Ну вам и заказывают 3 головки. Масса головки 4,5+-0,4 кг. Сколько взять с покупателя предоплаты? Как организовать на складе учет одновременно в головках и килограммах?
5. Предыдущая задача применима и к оптовикам ГСМ. Покупаем тонны, отпускаем литры, списываем тонны. Как организовать пересчет?
6. Если всё хранить в отдельных таблицах, то какие блокировки и как часто будут возникать при эксплуатации системы? Как организовать ввод справочников, чтобы всё время (даже в процессе исправления) были непротиворечивы.

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

Нектотам
1. Какого типа VALUE в таблице PARAMVALUES? Число (int? float? numeric?), дата, строка, суррогатный ключ к другой таблице? Любой из этих обладает определёнными ограничениями

а)
Код: plaintext
Varchar
б) использовать несколько полей
Код: plaintext
1.
2.
3.
4.
  TYPEVALUE char( 1 ),
  VALUENUMBER  number,
  VALUECHAR   varchar2( 255 )
  и тд

Нектотам
2. Как быть если для части товаров применимо свойство "срок хранения", для другой части применимо "гарантийный срок эксплуатации", для третьей "вес брутто", для четвёртой "вес нетто" и все эти части пересекаются? Насколько усложнятся запросы, если все эти свойства разнести по разным таблицам?
Что характерно для товара, показывает тип товара. Запросы не сильно усложняются, поскольку к "специфическим" параметрам обращаемся не везде, а только там где нужен этот "спецефический" параметр.

Нектотам
3. Как быть с цветоразмерным рядом для одежды и обуви?
Это проблема не справочника, а проблема учета. Только нужно каждую единицу "цветоразмера" хранить как отдельный товар.

Нектотам
4. Сыр у небольшого оптовика.
5. Предыдущая задача применима и к оптовикам ГСМ
Это проблема не справочника, а проблема учета. Всегда будут дебалансы :)

Нектотам
6. Если всё хранить в отдельных таблицах, то какие блокировки и как часто будут возникать при эксплуатации системы? Как организовать ввод справочников, чтобы всё время (даже в процессе исправления) были непротиворечивы.
Ведение "специфических" параметров нужно не везде, а только в "спецефических" местах. Соответсвенно, для каждого типа параметров понадобится своя "специфическая" форма. С непротиворечивостью вообще не вижу проблем.
...
Рейтинг: 0 / 0
Организация справочника с доп.параметрами
    #35372405
Нектотам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tarabtsevа)
Код: plaintext
Varchar
б) использовать несколько полей
Код: plaintext
1.
2.
3.
4.
  TYPEVALUE char( 1 ),
  VALUENUMBER  number,
  VALUECHAR   varchar2( 255 )
  и тд

Если varchar, то как правильно сортировать даты/числа? Если несколько полей, то сразу вырастет сложность обработки, понизится быстродействие, сложнее будет заставить СУБД правильно использовать индексы.
Пример. Построить запрос который для каждой группы товара и вида свойства выведет минимальное значение свойства (под значением свойства подразумевается кортеж <TYPEVALUE, VALUENUMBER, VALUECHAR...>).
TarabtsevЧто характерно для товара, показывает тип товара. Запросы не сильно усложняются, поскольку к "специфическим" параметрам обращаемся не везде, а только там где нужен этот "спецефический" параметр.
Угу. Приведите пример запроса, который выбирает те товары, которые имеют срок хранения 2 недели или более, при этом вес брутто 1 кг или менее или не задан, вес нетто более 0,5 кг.
При этом поясните, как система будет обрабатывать товары для которых разрешено определёное свойство, но нет записи в таблице PARAMVALUES. При этом сравните планы выполнения запросов с тем, когда все значения в одной таблице (особенно при наличии нужного индекса)
TarabtsevЭто проблема не справочника, а проблема учета. Только нужно каждую единицу "цветоразмера" хранить как отдельный товар.
Это не всегда верно.
TarabtsevЭто проблема не справочника, а проблема учета. Всегда будут дебалансы :)
А разве структура системы хранения нормативно-справочной информации не является частью учета? Простейший пример. Некая фирма в своей учетной бухгалтерской программе сделала признак в таблице номенклатуры "Собственный товар"/"Товар на комиссии", т.е. для каждого товара, который был на складе собственный и на комиссии было 2 записи. Стоит описывать к какому бардаку в складском учете это приводило? За счет того что этот признак активно использовался, эту проблему решили только через 10 лет... (Это я об 1С:Бухгалтерии, где эта ошибка прошла из глубины веков до 1С:Бухгалтерии 8)

Проблема справочника в том, чтобы заложить в него систему разрешения этих ситуаций.

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

Почитайте, как устроено хранение номенклатурной информации в той же 1С:УПП. Возможно, что эта система окажется значительно сложнее, чем Вам нужно, но я встречал случаи, когда она оказывалась слишком примитивной.
...
Рейтинг: 0 / 0
Организация справочника с доп.параметрами
    #35372478
Tarabtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блоьшое спасибо за Ваши советы и предложения!

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


Из опыта знаю, что в большинстве отчетов нужно, только наименование справочной единицы - это раз, во вторых очень многие справочники имеют одинаковую структуру. Это наводит на мысль, что наименования можно поместить в один справочник: проще будет разработка(один источник,а не куча), да и БД суммарно быстрей работает с одной таблицей, чем с кучей маленьких.
А как быть со справочниками типа ед.изм, который Вы привели, еще не знаю - всеже ID и NAME такие-же и их лучше хрнаить в общем справочнике наименований.
Вижу 4 варианта
1. В справочнике, где хранятся наименования, хранить и доп. параметры - хоть, это, скорее всего, быстрее всего работать будет, но возникают сложности с транзакциями (DDL это не DML), с переносом данных (структура то разная будет), и тп
2. Доп параметры хранить в доп таблице построчно - преимущество, то что можно помещать любую информацию в любых объемах, недостаток сложные и медленно работающие запросы
3. Nested Table, в принципе, Тоже, что и 2 - о преимуществах и не достатках н емогу судить - нет опыта
4. Для каждого доп параметра создавать таблицу - построение запросов попроще будет, но вот по суммарной(!) скорости их работы и не знаю - тяжело смоделировать какие запрсы и в каком процентном соотношении будут.
...
Рейтинг: 0 / 0
Организация справочника с доп.параметрами
    #35372483
Tarabtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такую вещь формализую:
Связи в справочнике типа одна ко многим или многие ко многим, однозначно выносить в отдельную таблицу
...
Рейтинг: 0 / 0
Организация справочника с доп.параметрами
    #35398809
Tarabtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведу конкретный пример
1. Имеется следующий товар, для него нужно хранить параметры
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
- Барабан:
   - Диаметр внутрений;
   - Диаметр внешний;
   - Вес
 - Кабель (тип1):
   - металл (медь, аллюминий);
   - длина кабеля в стандартной бухте;
   - вес стандартной бухты;
   - сечение кабеля;
   - тип изоляции
- Кабель (тип2)
   - диаметр внешней оплетки кабеля;
   - тип внешней изоляции;
   - ссылка на информацию о жилах (Жила1 - металл;изоляция;...ЖилаN - металл;изоляция;)
   - Плотность (киллограм на метр)
   - угол изгиба

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

Вот и остается, что хранить параметры надо в строчку в доп. таблице.
Если есть другие мысли буду рад их услышать.

И еще остался вопрос: использовать отдельную таблицу или NESTED TABLE?
...
Рейтинг: 0 / 0
Организация справочника с доп.параметрами
    #35398844
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TarabtsevВсе это товар. Но параметры везде разные.
Все храним в EAV + классификатор типов. В зависимости от типа показываем разные экранные формы.
...
Рейтинг: 0 / 0
Организация справочника с доп.параметрами
    #35398956
Tarabtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_мод TarabtsevВсе это товар. Но параметры везде разные.
Все храним в EAV + классификатор типов. В зависимости от типа показываем разные экранные формы.
Благодарю
А можете пояснить или дать ссылку на что такое EAV?
...
Рейтинг: 0 / 0
Организация справочника с доп.параметрами
    #35399077
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TarabtsevА можете пояснить или дать ссылку на что такое EAV?
Это такой очень специфический принцип построения БД - на этом форуме тем было много, найдете легко.
...
Рейтинг: 0 / 0
Организация справочника с доп.параметрами
    #35399112
Tarabtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_мод TarabtsevА можете пояснить или дать ссылку на что такое EAV?
Это такой очень специфический принцип построения БД - на этом форуме тем было много, найдете легко.
Благодарю!
Уже нашел
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Организация справочника с доп.параметрами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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