有一次用戶問我為什么數據表中都要添加一個業務無關的ID字段

          這個問題當時真的不知道怎么回答,只是說Hibernate框架就是這么要求的。后來翻了上學時候的書《數據庫系統設計 實現與管理》(第六版)第73頁3.3節“表3-4 完整性規則”中要求:
          1. 實體完整性
          1.1 要求:所有主鍵標實體都是惟一的,而且主鍵標的任何部分不可以是空值;
          1.2 目的:保證每一個實體會有惟一的標識,并且確保外鍵標值可以正確的引用主鍵標值;
          1.3 示例:沒有發票可以具有重復的編號,也不可以是空值??傊邪l票由它們的發票編號惟一的標識。

          用戶發難:人員表中工號是唯一的,為什么不用工號作為主鍵?
          回答:分析了需求后,發現,人員表中工號存在“回收復用”的情況。比如,局長的工號永遠都是00001,今年是李局長,明年李局長升遷了、退休了,張局長赴任,工號還是00001。如果用工號作為主鍵,那么子表引用人員表工號字段,就會出現以下情況:

          1、2008年工號為00001的用戶操作了100條業務,該工號00001代表李局長;
          2、2009年工號為00001的用戶操作了80條業務,該工號00001代表張局長。

          最后統計工號為00001的用戶一共操作了多少業務的時候,會得到工號為00001的張局長操作了180條業務。

          因此,工號雖然在庫表中唯一,但是他違背了“所有主鍵標實體都是惟一的”這一完整性要求,因此,不能將工號作為主鍵。

          posted on 2009-10-21 10:55 Rick Qin 閱讀(556) 評論(0)  編輯  收藏 所屬分類: DB


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          <2009年10月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統計

          留言簿(2)

          隨筆分類(3)

          隨筆檔案(6)

          文章分類

          文章檔案(3)

          搜索

          最新隨筆

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 鹤庆县| 大丰市| 阿荣旗| 莱芜市| 开原市| 柘城县| 绍兴市| 独山县| 搜索| 嘉善县| 平和县| 平舆县| 玉树县| 达拉特旗| 临沂市| 明水县| 含山县| 健康| 和静县| 贡山| 西畴县| 内黄县| 和林格尔县| 平舆县| 集贤县| 蒙自县| 霞浦县| 广安市| 阿拉善右旗| 贵德县| 德兴市| 会宁县| 滨州市| 古浪县| 瓦房店市| 临沭县| 武宣县| 南投县| 永吉县| 长葛市| 晋江市|