1

Вот часть моего ERD: enter image description hereМожет ли моя таблица сведений о заказе иметь только внешние ключи?

Как вы можете видеть, OrderID из таблицы Order Details наследуется от OrderID таблицы заказов в. То же самое касается ProductID только в таблице продуктов. Я думал, что я где-то читал, что для каждой таблицы нужен первичный ключ, однако это исключение?

+0

Если вы можете однозначно адресовать любую конкретную строку в таблице, вам не нужен первичный идентификатор. Подумайте: * Могу ли я удалить любую конкретную строку однозначно? * Если ответ уже есть * да *, и нет другой причины иметь дополнительный идентификатор, тогда не делайте этого. – deceze

+0

(orderid, productid) выглядит превосходным * натуральным * кандидатом ключом. Его можно было бы повысить до первичного ключа. – wildplasser

ответ

1

Ни при каких обстоятельствах ваша таблица сведений о заказе не должна использоваться только FKS. Это рецепт полного бедствия.

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

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

Информация о заказе и заказе - это временные данные. Все о порядке должно быть записано с момента фактического заказа. Это не денормализация, временные данные передаются по-разному.

 Смежные вопросы

  • Нет связанных вопросов^_^