我有以下型號(簡化使所有其他領域出,重點主鍵的ID):SQL模型/模式設計,檢查約束,FK或表重新設計?
[invoice]
invoice_id
customer_id
invoice_description
[customer]
customer_id
company_id
customer_name
[company]
company_id
company_name
[strategy]
strategy_id
strategy_descripton
一個公司包含了許多客戶,這反過來又可以有屬於該客戶很多發票。
雖然上面沒有顯示,但我也希望列出屬於公司(只有一家公司)的戰略清單。
我希望客戶,發票和公司能夠定義一個引用他們所屬公司戰略的「默認策略」。
我知道我可以在每張表(發票,客戶和公司)中放置一個名爲strategy_id的額外FK字段,但我如何確保如果做出更改(有人試圖將策略轉移到另一家公司)最終沒有發票,還是客戶指向屬於另一家公司戰略清單的戰略?
我該如何處理這個問題 - 我是否需要檢查所有這些業務邏輯,或者使用檢查約束,還是可以通過重新設計表和外鍵來實現?
提前許多感謝,
克里斯
感謝您的快速回復。 是的,如果有人在使用過程中嘗試將策略更改爲另一家公司,這一點很重要,這是不允許的。 如果你有任何鏈接的SQL約束條件/代碼實現上述,這將是偉大的,通常我已經做了這種檢查只在業務邏輯級別,但最近越來越擔心保護應用程序免受奇怪的狀態是'有效「,但在我的實體模型中無效。 您已通過上述方式回答了我的問題,謝謝。 – g18c 2012-02-01 21:38:23
很高興我能夠幫助。如果您還有其他問題。 :) – Kyra 2012-02-01 21:39:52
最後一個澄清/問題,是否也正確地檢查業務邏輯層中的這些約束(我正在使用EntityFramework與SQL後端),還是讓它爲數據庫處理?我想避免在許多不同的地方複製工作和實施規則。 – g18c 2012-02-01 21:47:02