我是否必须在数据库设计中列出所有可能的FK?

时间:2012-11-08 19:36:40

标签: sql database

情况如下:

我有一个数据库,记录了CUSTOMER和ORDER,INVOICE,PAYMENT等之间的关系。

我目前的设计是:CUSTOMER链接到ORDER,ORDER链接到INVOICE,INVOICE链接到PAYMENT。

我的问题是,我实际上想知道哪个CUSTOMER正在处理ORDER,INVOICE和PAYMENT。那么我是否必须将CUSTOMER_ID放在我想要将CUSTOMER作为FK显示的每个表中?它会

吗?

或者我可以通过查询来呈现它?

1 个答案:

答案 0 :(得分:1)

不,你没有。如果您的目标是遵循正确的数据库设计并避免冗余数据存储,则应该编写具有多个连接的查询。

E.g:

SELECT c.CUSTOMER_ID, ..., p.PAYMENT_ID, ...
FROM CUSTOMER c,ORDER o,INVOICE i,PAYMENT p
WHERE c.CUSTOMER_ID = o.CUSTOMER_ID
and o.ORDER_ID = i.ORDER_ID
and i.INVOICE_ID = p.INVOICE_ID