151 Actions

Why aren't primary key / foreign key matches used for joins?SQL did not come first! The relational model (which included the concept of foreign keys of course) was first outlined by E.F.Codd in 1969. SEQUEL, as it was then, didn't see the light of day until around 1974. Its inventors made it clear from the outset that SEQUEL/SQL was intended to be based on the pre-existing relational model - although SQL did fall short of being a truly relational language.

Question about choosing primary keyThomas, My point (and ypercube's) is that PersonID --> EmployeeID --> {Employee Attributes} is NOT a transitive dependency if EmployeeID is a key as well as PersonID. 3NF requires no distinction between primary and "non-primary" candidate keys. All candidate keys are equally important in 3NF as the Wikipedia link you posted makes very clear (I'm not advocating Wikipedia as a generally reliable source of information but in this instance it happens to be more accurate than the other links you referred to).

Why should I create an ID column when I can use others as key fields?If criminals are known to clone some identifier then surely that might be a very good reason to enforce the business rule that the attribute must be unique - i.e. not to "trip up" the system but to prevent the said duplicate values from entering the database and thereby red-flag any such attempts as potential fraud or errors requiring further investigation.

Column suitable for natural key?@mircale, my point was that the reason for key constraints is to guarantee that infomration is not duplicated. If you don't enforce a natural key on some attribute then the values of that attribute may be duplicated on multiple tuples with different surrogate key values. That is apparently not what is wanted here.