As an example
create table indexing_table
(
id SERIAL PRIMARY KEY,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
);
Is there a difference between the following tables?
Table 1:
create table referencing_table
(
indexing_table_id INTEGER references indexing_table
);
Table 2:
create table referencing_table
(
indexing_table_id INTEGER references indexing_table NOT NULL
);
Alternatively, in the case of Table 1, where there is no NOT NULL
constraint, are we allowed to insert records containing NULL
values?
For table 1, this INSERT statement will succeed. If you run it 100 times, it will succeed 100 times.
The same INSERT statement will fail on table 2.
Sometimes you want a foreign keyed column to be nullable because it is not required (just as not every citizen in a citizens table went to a university, so a
university_id
column can be null). In other cases, the column should not be null, just as every student lshould be associated with auniversity_id
.Therefore, the two
referencing_table
s you describe are actually very different, if you consider what you are trying to achieve.