Мне нужна помощь в понимании применимости внешних ключей при настройке ограничений. Я понимаю, что роль настройки внешних ключей заключается в том, чтобы предотвратить потерянные данные, но я нашел желание поместить внешний ключ в ребенка, который, похоже, нарушает шаблон. Не уверен, что я делаю это правильно, и хотел бы получить совет, если у меня будут свои ограничения правильно.Понимание роли ограничений внешнего ключа. Я правильно их использую?
Вот дизайн у меня есть:
(1) Я хочу, чтобы все мои «продукт» s иметь тип блока ассоциированной с количеством. Блоки являются как «каждый», «Нога», «Галлон», и т.д., так что между количеством и блоком, вы бы что-то вроде:
Количество Единица 5 галлонах
Я не хочу, чтобы куча сумасшедших юнитов, поэтому я установил это ограничение. Это в значительной степени книга.
(2) Я также считаю, что не все продукты будут иметь «изображение», поэтому я помещаю внешний ключ в таблицу «ProductImage», поэтому у меня не было бы «продукта» с столбцом с пустой строкой, потому что Я также пытаюсь «нормализовать» дизайн.
Та же проблема с «FeeTypes», потому что не все «Продукт» будут иметь сборы.
Я чувствую вину за нарушение шаблона ограничения внешнего ключа у ребенка, а не родителя. Я просто не могу обернуть голову вокруг «FeeType», являющегося родителем. Этот конфликт в логике - вот где у меня вопрос.
Является ли мой дизайн правильным, с точки зрения дизайна? Я все еще сдерживаю данные правильно? Есть ли еще одна «роль», кроме предотвращения сиротских данных?
Заранее спасибо.
Это может помочь: Если вы удаляете запись из таблицы FeeType, и в таблице Product есть существующие записи, в которых используется FeeType, где созданы сироты? Сироты находятся в таблице «Продукт». Это означает, что таблица FeeType является родительской. –