Я работаю над базой данных продуктов питания, каждый продукт имеет список свойств (жиры, энергия, витамины и т. Д.)
Эти реквизиты состоят из 50 различных столбцов белков, жиров, углеводов, витаминов, элементов и т.д .. (их много)
число столбцов может увеличиться в будущем, но не слишком, 80 для крайнего случая
В каждом столбце требуется отдельная ссылка на одну библиографию всего списка из другой таблицы (необходимо проверить, является ли значение достоверным или нет).
Рассмотрим идентификаторы, которые должны содержать число, значение NULL или 0 для одной конкретной ссылки на исключение (будет указывать на другую таблицу)
У меня есть хоть какое-то решение, но они очень разные, и я новичок с db, поэтому я не имею понятия о лучшем решении.
рассматривают значение_1 как белки, значение_2 как углеводы и т. Д.
Лучшие (я надеюсь) 2 альтернативы, которые я подумал:
(1) создать один столбец varchar (255?) Со всеми 50 идентификаторами, примерно так:
column energy (7.00)
column carbohydrates (89.95)
column fats (63.12)
column value_bil_ids (165862,14861,816486) ## as a varchar
etc...
В этом случае я могу разделить его с помощью "," на массив и проверить идентификаторы, но я все еще беспокоюсь о правильности кодирования ... это может сохранить слишком много столбцов, но я не знаю, сколько может быть практичным для масштабируемости тоже.
В принципе, я подумал, что этот вариант обычен для оптимизации запросов (надеюсь!)
(2) Просто используйте дополнительный столбец id для каждого значения, поэтому:
column energy (7.00)
column energy_bibl_id (165862)
column carbohydrates (89.95)
column carbohydrates_bibl_id (14861)
column fats (63.12)
column fats_bibl_id (816486)
etc...
Кажется, что это большое количество столбцов, но сначала очень ясно, особенно для отношения любого столбца значения и его идентификатора.
(3) Создайте реляционную таблицу за значениями и библиографиями, поэтому
table values
energy
carbohydrates
fats
value_id --> point to table values_and_bibliographies val_bib_id
table values_and_bibliographies
val_bib_id
energy_id --> point to table bibliographies biblio_id
carbohydrates_id --> point to table bibliographies biblio_id
fats_id --> point to table bibliographies biblio_id
table bibliographies
biblio_id
biblio_name
biblio_year
Я не знаю, являются ли это лучшими решениями, и я буду благодарен, если кто-нибудь поможет мне пролить свет на это!