簡體   English   中英

外鍵和主鍵之間的關系?

[英]Relation between foreign and primary key?

例如:

表1

user_ID - 
username -
first_name -
email -

表2

message_ID - 
user_ID - 
message_title -
message_body - 

如您所見,我在table 1中將user_ID作為主鍵,在第二個表中將其作為外鍵。

如果我在第一張表中輸入2行,例如

1, undergz, sarah, sarah@hotmail.com
2, michel21, michaele, michalzost@gmail.com

現在,michaele輸入消息,現在我將其添加到表2中:

1, 2, hello, hello everybody, 

我考慮到第一個表在表2中添加了該條目,並添加了與table 1相同的user_ID號。

輸入第二個查詢時,我是通過$_SESSION['user_ID']變量完成此操作的。 所以就像

INSERT INTO table_2 VALUES (NULL, {$_SESSION['user_id']}, '$title','$message') 

我的問題是,這是正確的方法嗎? 我們在表中定義了外鍵,因此我們根據主鍵嚴格輸入數據,所有值都必須相同嗎?

您應該問自己的問題是:

table 2存在table 1沒有對應行的行?

如果您的問題的答案為“否”,那么您需要從table 2 (“子代”)到table 1 (“父代”)的FOREIGN KEY(又稱參照完整性 )約束。 您可以認為它是從一行到另一行的“指針”,DBMS本身保證您永遠不會有“懸掛”的指針。

FOREIGN KEY中的“父”列集必須始終是鍵,無論是主鍵還是備用鍵(也稱為UNIQUE)。 “子級”可以是任何列或列的組合,無論它們是否為鍵的一部分。 您可以將其視為父級的鍵列傳播到子級,並根據傳播的列最終指向何處 ,可以具有以下兩種關系:

1)“識別”關系

父鍵成為子鍵的一部分(因此父鍵“幫助”標識子鍵):

識別關系 要么 識別關系

這將模擬1:N或1:1關系。

2)“非識別”關系

父項不會成為孩子的關鍵部分:

非身份關系

此模型建模為1:N關系,但要求message_ID自身唯一(而不是與user_ID結合使用)。

創建表時,可以將FOREIGN KEY約束創建為表定義的一部分。 如果表已經存在,則可以添加FOREIGN KEY約束,前提是FOREIGN KEY約束已鏈接到另一張或同一張表中的現有PRIMARY KEY約束或UNIQUE約束。 一個表可以包含多個FOREIGN KEY約束。

如果FOREIGN KEY約束已經存在,則可以對其進行修改或刪除。 例如,您可能希望表的FOREIGN KEY約束引用其他列。 但是,您不能更改使用FOREIGN KEY約束定義的列的長度。

因此,您只能在table2使用table1已經存在的具有user_ID值。


關於您的問題:

我的問題是,這是正確的方法嗎?

看來是的。


我們在表中定義外鍵,所以我們根據主鍵嚴格輸入數據

正確


所有值都必須相同嗎?

這取決於它必須是table1中已經存在的值。 對於您的情況,對於每個登錄名(用戶),該值都應來自該用戶。 但是,如果您使用另一個用戶登錄,則該值應該是該用戶的ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM