I often see people using artifical / surrogate keys in relational databases. Thinking about it, it seems to me that while this simplifies join-Queries, it complicates the insertion of new tuples. Take the following example:
R1(a, b, c) R2(c, d, e) c is a surrogate primary key of R2, referenced by R1(c). If I want to insert data in R1 and R2, I first have to check whether the to-be-inserted R2 tuple already exists in R2, and if so, I have to get its corresponding artifical key so I can reference it in the tuple for R1.
Using natural keys: R1(a,b,d,e) R2(d,e) The attributes d and e are the natural primary key set for R2, referenced by R1(d,e). If I want to insert a new tuple in R1 and R2, I simply can insert them, because for the R1 tuple the foreign key (ie. value of the R2 primary key set) I reference is known.
Am I correct in my assumption or am I missing something?