|
|
|
Организация справочника с доп.параметрами
|
|||
|---|---|---|---|
|
#18+
Доброго Вам дня! Есть справочник товаров. Код: plaintext 1. 2. 3. 4. Вижу несколько вариантов реализации: 1. Для каждого доп.параметра создавать поле 2. Исподьзовать таблицу доп.параметров Код: plaintext Код: plaintext 1. Код: plaintext 1. 2. 3. Какая организация справочника будет лучше по производительности БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2008, 11:23 |
|
||
|
Организация справочника с доп.параметрами
|
|||
|---|---|---|---|
|
#18+
Для ЕдИзм однозначно нужна отдельная таблица, причем один ко многим, т.к. у товара может быть много ЕИ. В таблице указать: * Признак базовой ЕИ * Коэф пересчета в базовую ЕИ * Допустимая кратность деления на части (штука не делится, Вес делится до 0,001 и т.д.) * Штрихкод (по необходимости) * Возможна ссылка на тару * Объем, габариты, вес конкретной ЕИ. Для прочих параметров можно сделать одну или несколько таблиц. Зависит от ТЗ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2008, 11:49 |
|
||
|
Организация справочника с доп.параметрами
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ. LSVДля прочих параметров можно сделать одну или несколько таблиц. Зависит от ТЗ. Надо сделать универсальный механизм, чтобы не зависеть от ТЗ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2008, 13:09 |
|
||
|
Организация справочника с доп.параметрами
|
|||
|---|---|---|---|
|
#18+
TarabtsevНадо сделать универсальный механизм, чтобы не зависеть от ТЗ. Без дополнительных условий это практически невозможно. Ну или сложность использования/внедрения Вашего продукта рискует стать недопустимой. Справочник товаров для большинства систем очень сильно зависит от предметной области и от того, каким образом используются эти данные. Простые примеры и вопросы, которые должны Вам помочь: 1. Какого типа VALUE в таблице PARAMVALUES? Число (int? float? numeric?), дата, строка, суррогатный ключ к другой таблице? Любой из этих обладает определёнными ограничениями 2. Как быть если для части товаров применимо свойство "срок хранения", для другой части применимо "гарантийный срок эксплуатации", для третьей "вес брутто", для четвёртой "вес нетто" и все эти части пересекаются? Насколько усложнятся запросы, если все эти свойства разнести по разным таблицам? 3. Как быть с цветоразмерным рядом для одежды и обуви? Для каждой модели есть (определённые производителем) допустимые наборы размеров и цветов. Причем черные ботинки размера 40 могут отсутствовать, хотя черные размера 39 и 41 - могут быть. Причем аналитика в отчетах нужна отдельно по цвету, отдельно по размеру. Причем для одного производителя цвет и размер учтены в штрихкоде, для второго не учтены, а у третьего отдельный ШК на каждую партию. 4. Сыр у небольшого оптовика. Он меряется килограммами. Производитель прислал N килограмм. На складе его взвесили. Но фактически сыр лежит круглыми головками и минимальный заказ вашего покупателя 1 головка. Ну вам и заказывают 3 головки. Масса головки 4,5+-0,4 кг. Сколько взять с покупателя предоплаты? Как организовать на складе учет одновременно в головках и килограммах? 5. Предыдущая задача применима и к оптовикам ГСМ. Покупаем тонны, отпускаем литры, списываем тонны. Как организовать пересчет? 6. Если всё хранить в отдельных таблицах, то какие блокировки и как часто будут возникать при эксплуатации системы? Как организовать ввод справочников, чтобы всё время (даже в процессе исправления) были непротиворечивы. В общем, задача эта с одной стороны - изобретение велосипеда (для многих отраслей задача уже решена и решена избыточно), с другой стороны - сильно зависит от предметной области. Решение которое подойдёт для производителя турбин для ГЭС не подойдёт молокозаводу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2008, 13:40 |
|
||
|
Организация справочника с доп.параметрами
|
|||
|---|---|---|---|
|
#18+
Нектотам Большое спасибо за столь детальный ответ. Нектотам 1. Какого типа VALUE в таблице PARAMVALUES? Число (int? float? numeric?), дата, строка, суррогатный ключ к другой таблице? Любой из этих обладает определёнными ограничениями а) Код: plaintext Код: plaintext 1. 2. 3. 4. Нектотам 2. Как быть если для части товаров применимо свойство "срок хранения", для другой части применимо "гарантийный срок эксплуатации", для третьей "вес брутто", для четвёртой "вес нетто" и все эти части пересекаются? Насколько усложнятся запросы, если все эти свойства разнести по разным таблицам? Что характерно для товара, показывает тип товара. Запросы не сильно усложняются, поскольку к "специфическим" параметрам обращаемся не везде, а только там где нужен этот "спецефический" параметр. Нектотам 3. Как быть с цветоразмерным рядом для одежды и обуви? Это проблема не справочника, а проблема учета. Только нужно каждую единицу "цветоразмера" хранить как отдельный товар. Нектотам 4. Сыр у небольшого оптовика. 5. Предыдущая задача применима и к оптовикам ГСМ Это проблема не справочника, а проблема учета. Всегда будут дебалансы :) Нектотам 6. Если всё хранить в отдельных таблицах, то какие блокировки и как часто будут возникать при эксплуатации системы? Как организовать ввод справочников, чтобы всё время (даже в процессе исправления) были непротиворечивы. Ведение "специфических" параметров нужно не везде, а только в "спецефических" местах. Соответсвенно, для каждого типа параметров понадобится своя "специфическая" форма. С непротиворечивостью вообще не вижу проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2008, 14:19 |
|
||
|
Организация справочника с доп.параметрами
|
|||
|---|---|---|---|
|
#18+
Tarabtsevа) Код: plaintext Код: plaintext 1. 2. 3. 4. Если varchar, то как правильно сортировать даты/числа? Если несколько полей, то сразу вырастет сложность обработки, понизится быстродействие, сложнее будет заставить СУБД правильно использовать индексы. Пример. Построить запрос который для каждой группы товара и вида свойства выведет минимальное значение свойства (под значением свойства подразумевается кортеж <TYPEVALUE, VALUENUMBER, VALUECHAR...>). TarabtsevЧто характерно для товара, показывает тип товара. Запросы не сильно усложняются, поскольку к "специфическим" параметрам обращаемся не везде, а только там где нужен этот "спецефический" параметр. Угу. Приведите пример запроса, который выбирает те товары, которые имеют срок хранения 2 недели или более, при этом вес брутто 1 кг или менее или не задан, вес нетто более 0,5 кг. При этом поясните, как система будет обрабатывать товары для которых разрешено определёное свойство, но нет записи в таблице PARAMVALUES. При этом сравните планы выполнения запросов с тем, когда все значения в одной таблице (особенно при наличии нужного индекса) TarabtsevЭто проблема не справочника, а проблема учета. Только нужно каждую единицу "цветоразмера" хранить как отдельный товар. Это не всегда верно. TarabtsevЭто проблема не справочника, а проблема учета. Всегда будут дебалансы :) А разве структура системы хранения нормативно-справочной информации не является частью учета? Простейший пример. Некая фирма в своей учетной бухгалтерской программе сделала признак в таблице номенклатуры "Собственный товар"/"Товар на комиссии", т.е. для каждого товара, который был на складе собственный и на комиссии было 2 записи. Стоит описывать к какому бардаку в складском учете это приводило? За счет того что этот признак активно использовался, эту проблему решили только через 10 лет... (Это я об 1С:Бухгалтерии, где эта ошибка прошла из глубины веков до 1С:Бухгалтерии 8) Проблема справочника в том, чтобы заложить в него систему разрешения этих ситуаций. TarabtsevВедение "специфических" параметров нужно не везде, а только в "спецефических" местах. Соответсвенно, для каждого типа параметров понадобится своя "специфическая" форма. С непротиворечивостью вообще не вижу проблем. Просто посмотрите на план выполнения запроса. Посмотрите, как используются индексы. Посмотрите, какие возникают блокировки. Опишите для себя алгоритм ввода нового свойства товара, удаления свойства. Почитайте, как устроено хранение номенклатурной информации в той же 1С:УПП. Возможно, что эта система окажется значительно сложнее, чем Вам нужно, но я встречал случаи, когда она оказывалась слишком примитивной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2008, 15:42 |
|
||
|
Организация справочника с доп.параметрами
|
|||
|---|---|---|---|
|
#18+
Блоьшое спасибо за Ваши советы и предложения! Нектотам...Просто посмотрите на план выполнения запроса. Посмотрите, как используются индексы... Это то и пугает. Но, с этим можно бороться: материализованные представления, темповские таблицы и тп. Для часто используемых зарпосов можно "вылизать" план, а остальные - не беда, если будет медленно. Из опыта знаю, что в большинстве отчетов нужно, только наименование справочной единицы - это раз, во вторых очень многие справочники имеют одинаковую структуру. Это наводит на мысль, что наименования можно поместить в один справочник: проще будет разработка(один источник,а не куча), да и БД суммарно быстрей работает с одной таблицей, чем с кучей маленьких. А как быть со справочниками типа ед.изм, который Вы привели, еще не знаю - всеже ID и NAME такие-же и их лучше хрнаить в общем справочнике наименований. Вижу 4 варианта 1. В справочнике, где хранятся наименования, хранить и доп. параметры - хоть, это, скорее всего, быстрее всего работать будет, но возникают сложности с транзакциями (DDL это не DML), с переносом данных (структура то разная будет), и тп 2. Доп параметры хранить в доп таблице построчно - преимущество, то что можно помещать любую информацию в любых объемах, недостаток сложные и медленно работающие запросы 3. Nested Table, в принципе, Тоже, что и 2 - о преимуществах и не достатках н емогу судить - нет опыта 4. Для каждого доп параметра создавать таблицу - построение запросов попроще будет, но вот по суммарной(!) скорости их работы и не знаю - тяжело смоделировать какие запрсы и в каком процентном соотношении будут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2008, 16:28 |
|
||
|
Организация справочника с доп.параметрами
|
|||
|---|---|---|---|
|
#18+
Такую вещь формализую: Связи в справочнике типа одна ко многим или многие ко многим, однозначно выносить в отдельную таблицу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2008, 16:33 |
|
||
|
Организация справочника с доп.параметрами
|
|||
|---|---|---|---|
|
#18+
Приведу конкретный пример 1. Имеется следующий товар, для него нужно хранить параметры Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Все это товар. Но параметры везде разные. Запихнуть все параметры в одну таблицы считаю неверным, поскольку есть ограничения на кол-во полей - со времененм можно выйти за это ограничение. Создавать для каждого типа товаров свою таблицу, как минимум сложно. Вот и остается, что хранить параметры надо в строчку в доп. таблице. Если есть другие мысли буду рад их услышать. И еще остался вопрос: использовать отдельную таблицу или NESTED TABLE? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2008, 14:02 |
|
||
|
Организация справочника с доп.параметрами
|
|||
|---|---|---|---|
|
#18+
TarabtsevВсе это товар. Но параметры везде разные. Все храним в EAV + классификатор типов. В зависимости от типа показываем разные экранные формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2008, 14:11 |
|
||
|
Организация справочника с доп.параметрами
|
|||
|---|---|---|---|
|
#18+
_мод TarabtsevВсе это товар. Но параметры везде разные. Все храним в EAV + классификатор типов. В зависимости от типа показываем разные экранные формы. Благодарю А можете пояснить или дать ссылку на что такое EAV? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2008, 14:51 |
|
||
|
Организация справочника с доп.параметрами
|
|||
|---|---|---|---|
|
#18+
TarabtsevА можете пояснить или дать ссылку на что такое EAV? Это такой очень специфический принцип построения БД - на этом форуме тем было много, найдете легко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2008, 15:29 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35372272&tid=1543797]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
170ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 218ms |
| total: | 491ms |

| 0 / 0 |
