Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
нормализация продукт-параметр-значение
|
|||
|---|---|---|---|
|
#18+
вопрос теоретический: Склад товаров, каждой группе продукции сопоставлены параметры. У каждой номенклатурной единицы указаны все параметры её группы. группы: сапоги бугорчатая тара для яиц параметры: у группы сапоги: размер (перечисление) инвентарный номер (строка) у группы бугорчатая тара для яиц упаковка (перечисление) масса единицы (целое число) склад: сапоги р-р 45, ИН12345 сапоги р-р 43, ИН54321 бугорчатая тара для яиц 1 палета, 100 кг. на уровне таблиц бд, склад описывается двумя таблицами: table Product(idProduct, idGroup, ...) table ProductParam(idProduct,idParam,Num_Val,String_Val,Bool_Val...) -- значение параметра пишется в поле, соответвующее типу параметра -- строковый в String_Val, целочисленный в Num_Val ВОПРОС:если завести сущность "значение парамета" и в ProductParam прописывать ссылку на это значене - приблизит ли это структуру бд к какой-нибудь нормальной форме? т.е. table Product(idProduct, idGroup, ...) table ProductParam(idProduct,idValue) table ParamValue(idValue,idGroup,idParam,Num_Val,String_Val,Bool_Val..) является ли более нормализованной структурой по сравнению с предыдущей? является ли менее нормализованной структурой по сравнению с предыдущей? Определённо, такое схлопывание данных приведёт к уменьшению размера бд, т.к. количество перечислимых параметров с малым числом возможных значений превышает число строковых параметров, которые придётся хранить каждую под своим idValue. В полтора раза примерно. Впрочем, в теории нормальных форм понятие "объём данных" вообще отсутствует, сколько я помню. IMHO, RTFM href=, "а вот у нас был случай" - с благодарностью принимаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2005, 09:19 |
|
||
|
нормализация продукт-параметр-значение
|
|||
|---|---|---|---|
|
#18+
Давайте сначала уточним логику. Фактически вы используете шаблон со словарем параметров. Собственно словарь, минимально : Код: plaintext 1. 2. Данные, базовый вариант : Код: plaintext 1. Код: plaintext 1. Код: plaintext 1. 2. 3. С точки зрения РМД вы по-моему вы правы - по уровню нормализации все три варианта одинаковы и соответствуют одинаковому набору критериев нормализации. С практической конечно все зависит от задачи. Не совсем понял, для чего в вашем примере в table ParamValue(idValue,idGroup,idParam,Num_Val,String_Val,Bool_Val..) служат idGroup,idParam. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2005, 13:51 |
|
||
|
нормализация продукт-параметр-значение
|
|||
|---|---|---|---|
|
#18+
2 ModelR : - вариант 1. Всмысле, то, что параметр может быть разного типа - поддерживается всё равно одной таблицей. Разные типы параметров по разным таблицам растаскивать в голову не приходило. Давайте считать это отдельным вопросом, как ещё-более-продвинутое-уплотнение данных, которое можно применять уже после того как решится - хранить данные в ЗначениеПараметраПрод или отдельным справочником. - (ParamValue.idGroup,ParamValue.idParam) - внешний ключ на таблицу Param. В которой эта пара полей является первичным ключом. (idParam уникален только внутри группы, параметры разных групп никак между собой не связаны) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2005, 18:23 |
|
||
|
нормализация продукт-параметр-значение
|
|||
|---|---|---|---|
|
#18+
баззззлайтер2 ModelR : - (ParamValue.idGroup,ParamValue.idParam) - внешний ключ на таблицу Param. В которой эта пара полей является первичным ключом. (idParam уникален только внутри группы, параметры разных групп никак между собой не связаны) Ясно. По опыту если idParam - суррогатный ключ (не несущий бизнес смысла), то для программной реализации удобнее иметь его глобально уникальным по базе а не возиться с отдельной нумерацией в пределах каждой группы. Не забудьте еще такой момент, не могут ли у вас некоторые параметры быть ссылками на объекты базы данных, например параметр "Страна происхождения" - ссылка на справочник стран. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2005, 10:18 |
|
||
|
нормализация продукт-параметр-значение
|
|||
|---|---|---|---|
|
#18+
Ну если порыть и глубже, то можно вспомнить и про значения по умолчанию, которые и могут быть этими объектами, а потом Вам еще и захочется сделать наследование, чтобы не описывать каждую позицию по 10 раз (например, шуруп->Шуруп оцинкованный для бетона->и далее по ветви наследования) Кстати, это классическая "велосипедная" тема: настраиваемый справочник номенклатурных позиций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2005, 10:40 |
|
||
|
нормализация продукт-параметр-значение
|
|||
|---|---|---|---|
|
#18+
Кстати,как сделаете ссылки, начнется пляска с бубнами по поводу ссылочной целостности и пойдет тема "база данных в базе данных" -0); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2005, 10:44 |
|
||
|
нормализация продукт-параметр-значение
|
|||
|---|---|---|---|
|
#18+
Спасибо ответившим! - включать ли внешний ключ в первичный ключ, делать ли первичный ключ из одного поля или составным - тоже очень интересующий меня вопрос, но задавал я не его. - типы данных, которые могут хранить параметры - да, это головняк, но опять же, к теме обсуждения отношения он не имеет. Позволю повториться: выбор между схемами: Таблица(id_продукт, id_параметр, значение_параметра) и Таблица(id_продукт, id_значения_параметра) ТаблицаЗначений(id_значения_параметра,id_параметр,значение_параметра) в обоих случаях "значение_параметра" это некий набор полей. ? регламентируется ли теорией нормальных форм или ещё какой теорией? ? чреват ли граблями (с перекосом планов запроса хп, например)? простите, а что такое классическая "велосипедная" тема ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2005, 18:25 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=154&tid=1545895]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 363ms |

| 0 / 0 |
