![]() |
|

SQL Server backup compression with network fault tolerance and zero impact encryption
|
|
By: Armando Prato | Read Comments (8) | Related Tips: 1 | 2 | 3 | 4 | 5 | 6 | More > Constraints |
Problem
Some time ago, I had a water cooler discussion with one my company’s java developers about maintaining data integrity. His belief was that all data integrity checks should be handled in the logic tier of an n-tier system. I politely explained why I consider this a bad practice. Foreign keys are specifically provided by SQL Server to prevent your database from storing invalid data relationships and should be a mainstay in every relational database model developed!
Solution
Foreign keys are part of the family of constraints that SQL Server provides to ensure database integrity. You may be familiar with other constraint types that help maintain data integrity such as Primary Key constraints, Unique constraints, Default constraints, and Check constraints. Each of these constraint types serves a specific purpose. The foreign key’s purpose is to ensure the relationship integrity between a parent table and its child tables.
You can define a foreign key as follows
| ALTER TABLE DBO.<child table> ADD CONSTRAINT <foreign key name> FOREIGN KEY <child column> REFERENCES DBO.<parent table>(<parent column>) {ON [DELETE|UPDATE] CASCADE} |
The following example declares that a line item row cannot exist without an associated order header row. The ON DELETE CASCADE option tells the database engine that if the parent ORDER HEADER row’s ORDERNUMBER is deleted, then any LINE ITEM tied to the ORDER HEADER by the deleted ORDERNUMBER should be automatically deleted as well.
| ALTER TABLE DBO.LINEITEM ADD CONSTRAINT FK_LINEITEM_ORDERNUMBER FOREIGN KEY (ORDERNUMBER) REFERENCES DBO.ORDERHEADER(ORDERNUMBER) ON DELETE CASCADE |
There are obvious reasons for defining foreign key constraints in your data model
The not so obvious
Unlike primary key constraints and unique constraints, foreign key constraints are not automatically indexed by SQL Server. However, indexing the column used in your foreign key is a good idea for a few reasons
Next Steps
| Monday, March 23, 2009 - 9:37:15 AM - markntejas | Read The Tip |
| I have a parent table with its primary key. I want it to be referenced as a foreign key in more than one child table. i receive the "ALTER TABLE statement conflicted with the FOREIGN KEY constraint ..." The conflict occurred in database "schema_name", table "dbo.a_db_tablename", column 'parent_tbl_PK_ID'." can i have a primary key that is referenced as a foreign key in multiple tables? thx in advance .... | |
| Monday, March 23, 2009 - 6:26:40 PM - aprato | Read The Tip |
|
A message like that is indicative of having an entry in the child table that does not exist in the parent table. You won't be able to build the FK until you clear this up (you could, if you used NOCHECK - but I don't recommend it). |
|
| Tuesday, March 24, 2009 - 7:17:36 AM - markntejas | Read The Tip |
| many thx ... | |
| Thursday, January 26, 2012 - 11:36:06 PM - Lx[n] | Read The Tip |
|
Nice article, but just want to let you know that I believe someone taken your article and make it as his own, below are the url link: http://ps-india.blogspot.com/2008/10/importance-of-sql-server-foreign-keys.html Prakash Samariya (M): +91-9879074678 Cheers! |
|
| Friday, January 27, 2012 - 9:21:04 AM - Armando Prato | Read The Tip |
|
Thanks for letting me know. I will let the folks at Edgewood know |
|
| Monday, August 13, 2012 - 8:00:30 AM - Srikanth | Read The Tip |
|
Msg 1785, Level 16, State 0, Line 1 Introducing FOREIGN KEY constraint 'FK_AAAA' on table 'MASKED' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Msg 1750, Level 16, State 0, Line 1 Could not create constraint. See previous errors. my actual code looks similar:
ALTER TABLE DBO.<child table>
ADD CONSTRAINT <foreign key name> FOREIGN KEY <child column> REFERENCES DBO.<parent table>(<parent column>) ON DELETE CASCADE |
|
| Monday, August 13, 2012 - 9:43:53 AM - Armando Prato | Read The Tip |
|
This is pretty self explanatory.
http://support.microsoft.com/kb/321843
|
|
| Thursday, April 04, 2013 - 10:44:30 AM - John | Read The Tip |
|
Considering only SQL performance: Given that I already have an index on the foriegn key candidate column, is there any performance bump in defining that field as a foreign key?
|
|
|
privacy | disclaimer | copyright | advertise | about authors | contribute | feedback | giveaways | user groups Some names and products listed are the registered trademarks of their respective owners. Edgewood Solutions LLC | MSSharePointTips.com | MSSQLTips.com |