例として
create table indexing_table
(
id SERIAL PRIMARY KEY,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
);
次の表に違いはありますか?
表1:
create table referencing_table
(
indexing_table_id INTEGER references indexing_table
);
表2:
create table referencing_table
(
indexing_table_id INTEGER references indexing_table NOT NULL
);
あるいは、NOT NULL
制約がない表1の場合、NULL
値を含むレコードを挿入できますか?
表1の場合、このINSERTステートメントは成功します。 100回実行すると、100回成功します。
insert into referencing_table values (null);
同じINSERTステートメントがテーブル2で失敗します。
エラー:「indexing_table_id」列のnull値はnull以外の制約に違反しています 詳細:失敗した行には(null)が含まれています。
場合によっては、外部キー列が必須ではないためnull可能にすることもできます(市民テーブルのcitizenがすべて大学に行くわけではないので、university_id
列はnullになる可能性があります)。他の場合では、すべてのstudent lがuniversity_id
に関連付けられている必要があるのと同様に、列はnullであってはなりません。
したがって、達成しようとしていることを考えると、2つのreferencing_table
は実際には大きく異なります。