亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

表中主鍵的最佳實踐是什么?

表中主鍵的最佳實踐是什么?

拉風的咖菲貓 2019-07-09 16:47:30
表中主鍵的最佳實踐是什么?在設計表格時,我養成了一種習慣,就是有一列是唯一的,我做主鍵。實現這一目標的方式有三種,視需要而定:自動遞增的標識整數列。唯一標識符(GUID)一個短字符(X)或整數(或其他相對較小的數字類型)列,可用作行標識符列。數字3將用于相當小的查找,大多數是讀取表,這些表可能具有唯一的靜態長度字符串代碼,或數字值(如年份或其他數字)。在大多數情況下,所有其他表都將具有自動遞增整數或唯一標識符主鍵。問題:-)我最近已經開始使用沒有一致行標識符的數據庫,并且主鍵當前聚集在不同的列中。一些例子:日期時間/字符日期時間/整數日期時間/varcharChar/nvarchar/nvarchar這有正當理由嗎?我會一直為這些情況定義標識或唯一標識符列。此外,還有許多表根本沒有主鍵。這樣做的有效理由(如果有的話)是什么?我試著去理解為什么桌子是按原來的設計的,對我來說,這似乎是一堆亂七八糟的東西,但也許這是有充分理由的。第三個問題可以幫助我破譯答案:在使用多個列組成復合主鍵的情況下,這種方法相對于代理/人工密鑰有什么特殊的優勢嗎?我主要考慮的是性能、維護、管理等?
查看完整描述

3 回答

?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

只是對一些經常被忽視的事情發表額外的評論。有時,不使用代理鍵在子表中有好處。假設我們有一個設計,允許您在一個數據庫中運行多個公司(可能是托管解決方案,或者其他什么)。

假設我們有這些表和列:

Company:
  CompanyId   (primary key)CostCenter:
  CompanyId   (primary key, foreign key to Company)
  CostCentre  (primary key)CostElement
  CompanyId   (primary key, foreign key to Company)
  CostElement (primary key)Invoice:
  InvoiceId    (primary key)
  CompanyId    (primary key, in foreign key to CostCentre, in foreign key to CostElement)
  CostCentre   (in foreign key to CostCentre)
  CostElement  (in foreign key to CostElement)

萬一最后一點說不通的話,Invoice.CompanyId是兩個外鍵的一部分,一個是CostCentre桌子和一張到成本要素桌子。主鍵是(InvoiceId公司).

在這個模型中,不可能搞砸和引用成本要素從一個公司和一個CostCentre來自另一家公司。如果在成本要素成本中心表它會是。

搞砸的機會越少越好。


查看完整回答
反對 回復 2019-07-09
  • 3 回答
  • 0 關注
  • 530 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號