2011-12-21 91 views
19

這兩個我很混淆。他們是相同還是不同?有些書或人說他們是一樣的,有些則說他們不一樣。我試過但沒有找到任何真實的答案。
請大家解決它。外鍵和引用鍵有什麼區別?

回答

9

「引用鍵」在美國英語中不是關係建模或SQL實現中的正常技術術語。

外鍵「引用」某個其他表中的鍵;這可能是混淆來自何處嗎?

5

你真的不叫東西參考關鍵 ...他們是同樣的事情......你可能會看到這個詞引用 SQLite中使用,例如:你可以使用如下語法啓動數據庫的作者和書籍。這可以讓你證明一個作者可以有很多書。這告訴books.author_id(定義幾行了)分貝引用author.id

CREATE TABLE 'author' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    firstname varchar(255) 
    lastname varchar(255) 
); 

CREATE TABLE 'books' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    author_id INTEGER, 
    title varchar(255), 
    published date, 
    FOREIGN KEY(author_id) REFERENCES author(id) 
); 
2

也許你正在使用的術語「參考鍵」有點鬆散?

一行中的外鍵值被稱爲「引用」包含相應鍵值的行。請注意,前面句子中的「reference」一詞是一個動詞,所以我們可以說我們有一個引用的外鍵值和一個引用的鍵值。

雖然它是被引用的關鍵值而不是表鍵約束,但我可以鬆散地說,我們可以說「引用鍵」是指構成可能被引用的值的行。然後我會看到「引用鍵」可能會成爲「引用鍵」,但不會相信它的起源。

36

我假設你正在談論使用,在不使用的FOREIGN KEY關鍵字REFERENCES,例如。

author_id INTEGER REFERENCES author(id) 

...而不是...

author_id INTEGER, 
FOREIGN KEY(author_id) REFERENCES author(id) 

答案是,這僅僅是同一事物的簡寫語法。當兩者之間發生變化時,主要關心的應該是可讀性。

+0

雖然第一個將不啓用外鍵,第二個不會啓用。第二種方式不再使用了嗎? – schwiz 2014-10-13 22:38:41

+0

如果您嘗試使用逆向工程從MySQL Workbench中的數據庫創建圖表,這也很重要。如果您在創建數據庫時使用了fir選項,該工具將無法在圖元素之間創建連接。 – 2016-12-14 10:59:39

2

外鍵「引用」某個其他表中的鍵。其他表中的該鍵稱爲引用鍵。如果您在phpmyadmin上使用圖形功能,您可能會聽到很多關於此的信息。

1

有2種方式申報的外鍵(S):

  1. 如果外鍵是一個屬性:
    參考()

  2. 如果外鍵的列表屬性

外鍵()參考文獻

1

兩個關鍵字「FOREIGN KEY」和「REFERENCES」關鍵字之間唯一且最重要的區別是雖然它們都使數據成爲父表的子數據,但「FOREIGN KEY」用於創建表級約束,而REFERENCES關鍵字只能用於創建列級約束。列級約束只能在創建表時創建。但是可以使用ALTER TABLE命令添加表級約束。

1

外鍵必須表示主鍵。 簡單地使用REFERENCES約束時,引用的鍵不一定是主鍵。

相關問題