a表两个字段都与b表一个字段关联_数据库表的主键实例分析
主鍵(PRIMARY KEY):數據庫表通常具有包含唯一標識表中每一行的值的一列或一組列。這樣的一列或多列稱為表的主鍵 (PK),用于強制表的實體完整性。
- 業務主鍵(自然主鍵):在數據庫表中把具有業務邏輯含義的字段作為主鍵,稱為“自然主鍵(Natural Key)”。
- 邏輯主鍵(代理主鍵):在數據庫表中采用一個與當前表中邏輯信息無關的字段作為其主鍵,稱為“代理主鍵”。
- 復合主鍵(聯合主鍵):通過兩個或者多個字段的組合作為主鍵。
這么多的主鍵,每種主鍵在表中作用是什么?哪一種可以有效提高查詢的效率?
為了表達方便,下面如oracle為例。先定義兩個表,如下圖
(紅色表示采用那種主鍵)
業務主鍵
顧名思義,業務主鍵就是說用業務字段來作為主鍵。但業務邏輯的改變是不可避免的,因為“永遠不變的是變化”,沒有任何一個業務是永遠不變的。
例如:如果你用客戶的編碼來作主鍵,當編碼錯誤修正時,系統中關聯該主鍵的部分表修改將是不可避免的,并且關聯的表越多改動越大。
則查詢:
SELECT A.CUST_CODE "客戶編碼",A.CUST_NAME "客戶名稱",B.SALES_CODE "訂單編碼",B.ORDER_QTY "訂單數量"
FROM DATA0010 A,DATA0060 B
WHERE A.CUST_CODE=B..CUST_CODE
從上面可知道,當業務字段客戶編碼改變時,查詢要同步更新訂單表DATA0060中的客戶編碼,關聯的表越多,更新越多。
如果訂單表有100萬,則多并發運行的時候整個系統就會崩潰。
復合主鍵
由一個或者兩個以上的字段組成,當然的也包含業務字段在里面,這種情況更加不可能用來做主鍵,但可以作為唯一性的索引約束。它也具備業務主鍵的弊端 。
邏輯主鍵
邏輯主鍵的字段,不會跟著業務的變動而變動。比如自動生成的ID數字,但有時候因為系統編程要拿到這個字段ID值,因此一般情況下都要自定義一個數值字段ID(Oracle用SELECT 序列名.NEXTVAL AS NextNumber FROM DUAL),然后將拿到的值,再寫入相應表中(一般的每個表對應一個序列名)。
則查詢:SELECT A.CUST_CODE "客戶編碼",A.CUST_NAME "客戶名稱",B.SALES_CODE "訂單編碼",B.ORDER_QTY "訂單數量"
FROM DATA0010 A,DATA0060 B
WHERE A.RKEY=B.CUSTOMER_PTR
從上面可知道,當業務字段客戶編碼改變時,查詢邏輯永久不變。
使用邏輯主鍵的主要原因
- 業務主鍵一旦錯誤修改,邏輯主鍵對應的值不受任務影響。只需要修改相應的業務主鍵的業務邏輯即可,減少了因為業務主鍵相關改變對系統的影響范圍。
- 使用邏輯主鍵的另外一個原因是,業務主鍵有時用字符字段,速度性能較邏輯字段(數字型)差且存儲間大,不利于傳輸及處理。
結束
當查詢連接5個以上的外連接表時候,邏輯主鍵優于業務主鍵的性能越來越明顯。在oracle中建立主鍵的同時自動將字段設為索引,其他數據庫要親自去測試了。@春天說煙火 @程序猿大波
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的a表两个字段都与b表一个字段关联_数据库表的主键实例分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle for循环_浅谈Oracl
- 下一篇: numpy找到矩阵中不同元素的种类_基于