為什麼資料表中都要新增乙個業務無關的ID欄位

2021-06-13 19:47:37 字數 653 閱讀 7831

這個問題當時真的不知道怎麼回答,只是說hibernate框架就是這麼要求的。後來翻了上學時候的書《資料庫系統設計 實現與管理》(第六版)第73頁3.3節「表3-4 完整性規則」中要求:

1. 實體完整性

1.1 要求:所有主鍵標實體都是惟一的,而且主鍵標的任何部分不可以是空值;

1.2 目的:保證每乙個實體會有惟一的標識,並且確保外來鍵標值可以正確的引用主鍵標值;

1.3 示例:沒有發票可以具有重複的編號,也不可以是空值。總之,所有發票由它們的發票編號惟一的標識。

使用者發難:人員表中工號是唯一的,為什麼不用工號作為主鍵?

回答:分析了需求後,發現,人員表中工號存在「**復用」的情況。比如,局長的工號永遠都是00001,今年是李局長,明年李局長公升遷了、退休了,張局長赴任,工號還是00001。如果用工號作為主鍵,那麼子表引用人員表工號字段,就會出現以下情況:

1、2023年工號為00001的使用者操作了100條業務,該工號00001代表李局長;

2、2023年工號為00001的使用者操作了80條業務,該工號00001代表張局長。

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

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

資料表資料遷移 複製乙個表的資料到另外乙個表

通過 sql,你可以從乙個表複製資訊到另乙個表。mysql 資料庫不支援 select into 語句,但支援 insert into select select into 語句從乙個表複製資料,然後把資料插入到另乙個新錶中。create table 新錶 as select from 舊表 我們可...

返回乙個資料表的集合

create or replace package pag selecttable istype select table is ref cursor end pag selecttable create or replace procedure pro selecttable tablename ...

如何取得乙個資料表的所有列名

如何取得乙個資料表的所有列名 方法如下 先從systemobject系統表中取得資料表的systemid,然後再syscolumn表中取得該資料表的所有列名。sql語句如下 declare objid int,objname char 40 set objname tablename select ...