2011-11-11 35 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 
); 

はのはまた、あなたがそれらの製品の注文を格納するテーブルを持っていると仮定しましょう。注文テーブルには、実際に存在する商品の注文のみが含まれていることを確認します。だから我々は、製品テーブルを参照するordersテーブルに外部キー制約を定義します。

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フィールド)

を参照している私は、必須のチェックボックスが関係とは何の関係もありませんと仮定します。これは単にフィールド上のnullではない制約です。しかし、これについてはMySQL Workbenchのユーザマニュアルを参照してください。

+0

私が作ったこの図は正しいですか? settlemetsは参照元のテーブルである必要がありますか? – abruski

+0

yupp、 'countries'が参照されるべきである – bpgergo

+0

私はそうは思わない。私の答えを見てください。 – Bytemain

0

ある国では多くの決済が行われるため、国別テーブルは参照テーブルであり、決済テーブルは参照テーブルです。私は必須フィールドについては知らない。

+1

'settlements'テーブルには' countries'テーブルを参照する 'country_id'フィールドがあります。したがって、 'settlements'テーブルは' countries'テーブルを参照していると私は結論づけています。 – bpgergo

+0

真実ですが、国は多くの決済を行うことができます。 IMOは、親テーブルの国別テーブルです。和解を通って国を見つけることは不可能です。 – Bytemain

+0

@Betterdevあなたが意味することは、一対多と多対1の関係の違いです。 –

4

参照先の表は「親」表です。

参照テーブルは「子」テーブルです。

ヒントはSQL DDLにあります。

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

決済参照国は、国が参照することを意味します。

1

[必須]チェックボックスは、生成されたSQLで効果がないと思われる場合は、グラフィックスに影響を与えます。チェックを外すと、関係線の端で小さな円が表示されます(関係表記のカラスの足の場合)。

これは、外部キーがnull、別名である可能性があることを意味します。必須ではありません。