patternsqlMinor
Foreign key without referenced columns specification
Viewed 0 times
specificationwithoutreferencedcolumnsforeignkey
Problem
I noticed in the SQL Server documentation that the list of referenced columns is not a required parameter of a foreign key constraint:
If I omit the
Does anybody know whether it is specified anywhere?
::=
[ CONSTRAINT constraint_name ]
{ { PRIMARY KEY | UNIQUE }
(...)
| [ FOREIGN KEY ]
REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
| CHECK (...)
}If I omit the
( ref_column ) part, it seems to reference the primary key of the referenced_table_name. That is most convenient. However, I cannot find any specification of this behavior so I am cautious to use it.Does anybody know whether it is specified anywhere?
Solution
The behaviour is not explicitly mentioned in any of the official SQL Server documentation I am familiar with, but the 1992 Draft SQL Standard (section 11.8.2.b) does say:
If the `
Translated, this means an implicit foreign key does reference the primary key of the referenced table. As others have mentioned in comments to the question, it is probably best to be explicit about the relationship though.
If the `
does not specify a , then the table descriptor of the referenced table shall include a unique constraint that specifies PRIMARY KEY. Let referenced columns be the column or columns identified by the unique columns in that unique constraint and let referenced column be one such column. The shall be considered to implicitly specify a that is identical to that `.Translated, this means an implicit foreign key does reference the primary key of the referenced table. As others have mentioned in comments to the question, it is probably best to be explicit about the relationship though.
Context
StackExchange Database Administrators Q#77093, answer score: 8
Revisions (0)
No revisions yet.