簡體   English   中英

代理與自然鍵的特定示例

[英]Surrogate vs. natural keys specific example

經過大量閱讀后,我決定為我的桌子制作代理鍵。 現在,我在兩張表“ Orders”和“ Form_VSA_albums”上創建1:1關系時遇到了難題。 1:1是因為一種形式只能有一個順序,而一個順序只能有一種形式。 注意,可以有沒有格式的訂單,但不能有沒有訂單的from,因此Order表是父表,它包含PK。

使用自然鍵時,我將公司的Order_id設置為兩個表的PK,然后將這個值設置為PROGRAM-GENERATED varchar(5)(因此,我不必擔心用戶錯誤條目會弄亂PK-a使用自然鍵時的主要問題)。 因此,每次Order需要一個Form時,新的FORM表行的ID將與ORDER行的ID相同。 沒問題。

但是現在我切換到代理鍵,兩個表的PK將由計算機生成,並且當創建Order和Form行時,我無法控制正在生成的值。 所以我的問題是,當訂單需要創建新表格時,我該怎么做才能確保該表格的PK應該與調用訂單的PK相同? 如果不相同,它將違反1-1關系,因此將失敗。

ps我想用作自然鍵的公司內部的order_id,現在移到一個名為order_id的新屬性-varchar(5))。

在此處輸入圖片說明

表格應與調用訂單的PK相同嗎? 如果不相同,它將違反1-1關系,因此將失敗。

你不會的 每個表將具有其自己的主鍵值,並且表單將具有訂單表的主鍵的外鍵。

您可以通過在Form表中的外鍵列中添加唯一鍵來實現1:1關系。

在設計良好的數據庫中,表將具有代理鍵的時間大約為一半。 但是,不要陷入僅僅因為某些事情在大多數一般情況下都能完美運行的想法的陷阱中,而應該在所有情況下都采用它。 檢查這對您自己的設計正在做什么。 您擁有一個完美的設計,並且使用相同的鍵值來實現1-1關系。 但是,您對將唯一的代理鍵強加到每個表中的教條性願望意味着您必須放棄一種完美的加強關系的方法。 正如您已經注意到的那樣,有效的替代方案並非易事,並且不可避免地會迫使您更多地參與維護關系的完整性,並且效果很可能會與設計中的其他折衷相聯系。

解決方案很簡單:認識到設計的任何規則或方面,盡管在大多數情況下可能是完美的解決方案,但並非在所有情況下都不是完美的解決方案。 您目前的設計簡單,優雅,可以完成您需要做的所有事情。 堅持下去。

並且始終在工具箱中保留多個工具。 您的設計將對此更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM