設定資料庫外來鍵時如何區分那個為主鍵表那個為外來鍵表

時間 2021-10-14 22:24:14

1樓:匿名使用者

a表必須有記錄,b表才能有,這個時候a表是主鍵表,b表外來鍵表。(a表裡面的記錄可以隨便錄入,但一般必須唯一,是主鍵;b表裡面錄入的東西就不是亂錄了,必須a表裡面有的記錄,才能錄入到b表中。b表裡面出現的任何一條記錄都必須在a表中找到與之對應的記錄,當然它可以重複出現,如果是1:

n的話)

例如:學生表,成績表。學生表裡面必須有某個學生的資訊,成績表裡面才可能有這個學生的成績。

這個時候學生表示主鍵表,成績表示外來鍵表。如果學生表中一個學生都沒有,成績表裡面也不能有,但是反之則可以。

一句話,主鍵表限制外來鍵表的資料。誰限制誰主鍵,誰被限制誰外來鍵。

2樓:

主鍵表——這個鍵值在這張表中為主鍵

外來鍵表——這個鍵值在這張表中為外來鍵

mysql資料庫一個表的外來鍵必須是另外一個表的主鍵嗎?具體提問如下,請一定幫我解答下! 1.一個 100

3樓:古舟蓑笠翁

一個表的外來鍵必須是另外一個表的主鍵

每一個表不是必須得有一個自增主鍵id的,比如學生表,可以設定學號為主鍵,這樣在選課表中可以設定學號為外來鍵,引用學生表中的學號.

4樓:節子不哭

答案是:來不需要,只要保證外來鍵是源唯一性的就可以了,外來鍵可以作為主鍵也可以不作為主鍵,第二個問題就沒有必要討論了,第三個問題:你現在既然已經加了外來鍵約束,應該先插入班級表的資訊,如果先插入學生資訊找不到對應的班級外來鍵的約束,插入就會失敗,

資料庫中什麼是主鍵,什麼是外來鍵

5樓:四舍**入

主鍵(primary key): 也稱為主碼或主關鍵字,用於惟一地確定一個元組的屬性或屬性組(複合主碼)。每個關係都有一個並且只有一個主碼。

外來鍵(foreign key):也稱為外碼或外部關鍵字。如果一個屬性集不是所在關係的關鍵字,但是是其他關係的關鍵字,則該屬性集稱為外部關鍵字。

在關聯式資料庫中可以通過外來鍵使兩個關係關聯,這種聯絡通常是一對多(1:n)的,其中主(父)關係(1方)稱為被參照關係,從(子)關係(n方)稱為參照關係。

6樓:愛可生雲資料庫

外來鍵的設計初衷是為了在資料庫端保證對邏輯上相關聯的表資料在操作上的一致性與完整性。

優點:精簡關聯資料,減少資料冗餘

避免後期對大量冗餘處理的額外運維操作。

降低應用**複雜性,減少了額外的異常處理

相關資料管理全由資料庫端處理。

增加文件的可讀性

特別是在表設計開始,繪製 er 圖的時候,邏輯簡單明瞭,可讀性非常強。

缺點:效能壓力

外來鍵一般會存在級聯功能,級聯更新,級聯刪除等等。在海量資料場景,造成很大的效能壓力。比如插入一條新記錄,如果插入記錄的表有 10 個外來鍵,那勢必要對關聯的 10 張表逐一檢查插入的記錄是否合理,延誤了正常插入的記錄時間。

並且父表的更新會連帶子表加上相關的鎖。

其他功能的靈活性不佳

比如,表結構的更新等。

7樓:匿名使用者

主外來鍵的存在是依託兩個實體之間的關係而存在的;

比如班級與學生的關係:

一個班級可以有多個學生,並且一個學生只能屬於一個班級,這就是一對多的關係;

那麼設計資料庫的時候就應該在學生表記憶體放班級的id作為外來鍵,為什麼不在班級表內放學生呢?

因為,你想一想班級表內如果放學生那麼記錄可能就是這樣:

1班id 1班 xx同學id

1班id 1班 xx同學id

..這是不允許的,班級表內班級為主鍵,是唯一的不允許相同記錄的;

下面簡單給你講下大概建成的表結構

--建班級表

create table class(

classid int primary key,--定義班級id為主鍵

classname varchar(15)

)--建學生表

create table students(

studentid int primary key,--定義學生id為主鍵

classid int ,--外來鍵值,跟班級表classid 屬性型別相同

stuname varchar(20),--學生姓名

---定義外來鍵

foreign key(classid) references class(classid) --本表classid是基於class表classid的外來鍵

)---------

如上定義了主外來鍵後,兩個表間的關係就是一對多的關係了,並且學生表內的classid必須依託班級表的classid存在,也就是說外來鍵必須要主鍵存在的時候才能建立,例如:

--在班級表為空的情況往學生表插入一條記錄是不允許的:

insert into students(studentid,classid,stuname)values(1,1,'小明')

系統會丟擲異常提示主鍵表班級表內班級id不存在這樣是不允許插入的;

必須要先往班級表內插入一條記錄:

insert into class(classid,classname)values(1,'一班')

後才能執行插入前面一條往學生表插入資訊的語句..

--------------可瞭解一些了?真累啊.

8樓:北桓崴

它們都是關聯式資料庫表設計的約束方式而已,為了保證資料庫中不會出現髒資料的限制方法。

主鍵是資料庫表的唯一索引序列,可以由多個欄位組成,但每條資料的這幾個欄位的組合必須唯一;主鍵約束僅涉及本表資料;

外來鍵是本表中該外來鍵欄位的取值要求是已經在目標表中存在的資料;假如說,表b有欄位b_1是表a中欄位a_1的外來鍵,那麼插入表b資料的時候,欄位b_1的取值要求在表a的欄位a_1的當前所有資料的值的範圍內。外來鍵是以外表資料約束本表資料的約束條件。

此外,外來鍵還有個要求,就是a_1必須是表a的主鍵。並且必須說得是,外來鍵是一個很煩人的資料庫約束。

9樓:小山山

一般每個表建議都有主鍵,比如表a和表b,

a的列式(aid,aa,bb,cc),其中aid就是主鍵,然後b是(bid,xx,yy,ab)bid為主鍵,ab是外來鍵對應a表的aid

然後你要是,然後你要查詢a表中的,aa,bb及b表中的xx,yy,且要是的b中xx,yy所在列的ab要等於a表中的aid,

然後即可以這樣寫select ..... from a a,b b where b.ab=a.aid

外來鍵差不多就是這樣的,設定好b中的外來鍵後,此ab的值只能是a中aid範圍內的值,不能搞一個aid中都沒有的值

10樓:淦琳溪

我給你解釋吧!

拿你做例子嘍^-9,

你們一家人在一個表中,你姥姥一家在一個表中,表中有共同的一個人,你媽媽,因為這是你的資料庫,所以以你家為主,你媽媽在你家是 你爺爺的兒媳婦,地位是「兒媳婦」,到了你姥姥那邊,你媽媽是 女兒,地位是「女兒」,不管到哪邊,她們是一個人,是不變的,這樣兩家就關聯起來了。

關於表是不是非有主鍵和外來鍵,不一定哦,

其實可以將有主外來鍵關係的表合併,是吧?

為什麼要分開呢?主要是考慮到當資料量大的時候查詢效率的問題,這個就有點難了

資料庫表中的主鍵和外來鍵如何關聯

扈琇保瀚 主鍵 編輯本段 概念 主關鍵字 主鍵,primarykey 是被挑選出來,作表的行的惟一標識的候選關鍵字。一個表只有一個主關鍵字。主關鍵字又可以稱為主鍵。主鍵可以由一個欄位,也可以由多個欄位組成,分別成為單欄位主鍵或多欄位主鍵。編輯本段 作用 1 保證實體的完整性 2 加快資料庫的操作速度...

資料庫表中有外來鍵,該怎麼新增資料

有外來鍵的情況應該先新增主表資料,再新增副表資料。如 有以下兩張表 班級表 classid name 1 一班 2 二班 學生表 sid name classid1 張三 12 李四 13 王五 2其中學生表中的classid是班級表classid的外來鍵。現在要求在學生表中新增一條sid 4,na...

如何把資料庫中NULL值設定為,如何把資料庫中NULL值設定為

鯉魚 sql中,設定語句 if 欄位名 is null set 欄位名 0 設定表欄位 update tablename set 欄位名 0 where 欄位名 is null update 表 set 欄位 0 where 欄位 is null 表中對應欄位預設值設定成0 就好了 直接用updat...