2011-11-11 68 views
8

我試圖理解關係,並自然出現問題。引用表和引用表

MySQL Workbench screenshot

是什麼引用表的意思又是什麼引用的表呢?在上面的例子中應該引用哪一個引用? 可以說爲了爭辯,settlements表是一個子表(沒有國家就不能存在結算)。這個子表是否應該引用或引用?

我不想爲這樣一個小問題打開一個新問題: 那個Mandatory複選框是什麼意思?這是否意味着需要定居點表或需要country_id?或者也許別的東西?

+0

也許我應該在english.stackexchange.com上發佈這個:D – abruski

回答

8

在PostgreSQL文檔中找到了非常好的解釋。

說你有,我們已經多次使用的產品表:

CREATE TABLE products (
    product_no integer PRIMARY KEY, 
    name text, 
    price numeric 
); 

讓我們假設你有一個表,用於存儲這些產品的訂單。我們希望確保訂單表只包含實際存在的產品訂單。因此,我們在訂單表引用產品表中定義一個外鍵約束:

CREATE TABLE orders (
    order_id integer PRIMARY KEY, 
    product_no integer REFERENCES products (product_no), 
    quantity integer 
); 

現在是不可能與沒有出現在產品表product_no項創建訂單。

我們說,在這種情況下,訂單表是引用表和產品表是引用表。同樣,也有引用和引用的列。

2

settlements(與COUNTRY_ID場)被引用countries(id字段)

我想強制複選框有無關的關係。這只是對該字段的非空限制。但是你應該參考這個MySQL Workbench的用戶手冊。

+0

那麼這張圖我是正確的?解決方案應該是參考表? – abruski

+0

yupp,'國家'應該是引用的 – bpgergo

+0

我不這麼認爲。看到我的答案。 – Bytemain

0

一個國家可以有多個定居點,所以國家表是參考表,結算表是參考表。我不知道強制性領域。

+1

「結算」表包含引用「國家」表的「country_id」字段。所以,我得出結論,「結算」表參照了「國家」表。 – bpgergo

+0

沒錯,但是一個國家可以有很多定居點。國際海事組織是國家表的父表。通過定居點尋找國家是不可能的。 – Bytemain

+0

@Betterdev你的意思是一對多和多對一關係的區別。 – 2016-04-10 17:44:30

4

被引用的表是「父」表。

引用表是'子'表。

線索在SQL DDL中,例如

ALTER TABLE Settlements ADD 
    FOREIGN KEY (country_id) 
    REFERENCES Countries (id); 

住區引用國家,意味着引用國家。

1

強制複選框(如果它在生成的SQL中似乎沒有效果)對圖形有一定影響。如果不加以控制,你可以在有關聯的關係線上看到小圓圈(關係符號烏鴉的腳)。

這意味着外鍵可以是空的,又名。不是強制性的。