Ни при каких обстоятельствах ваша таблица сведений о заказе не должна использоваться только FKS. Это рецепт полного бедствия.
Сведения о заказе должны записывать информацию о продукте во время заказа. Например, изменение цены со временем. Вы не хотите, чтобы цены прошлых заказов менялись, потому что цена изменилась в будущем.
Не только это вызовет проблемы, если неправильное изменение цены заставляет клиента неожиданно заряжаться больше за то, что не было отправлено немедленно, но оно полностью уничтожит любую финансовую целостность вашей информации для отчетности о продажах и может отправить плохие данные в вашу систему учета.
Информация о заказе и заказе - это временные данные. Все о порядке должно быть записано с момента фактического заказа. Это не денормализация, временные данные передаются по-разному.
Если вы можете однозначно адресовать любую конкретную строку в таблице, вам не нужен первичный идентификатор. Подумайте: * Могу ли я удалить любую конкретную строку однозначно? * Если ответ уже есть * да *, и нет другой причины иметь дополнительный идентификатор, тогда не делайте этого. – deceze
(orderid, productid) выглядит превосходным * натуральным * кандидатом ключом. Его можно было бы повысить до первичного ключа. – wildplasser