If I have understood correctly I think that I have a similar need:

I have a LP/Cassette/CD/DVD, etc identity number column which is 6 digits long 
with two zeroes at the end – I doubt I’ll ever have 9999 of them. So 100100, 
100200...

I use a two digit track number column – I doubt there ever be more than 99 on 
any of them per item.


I simply use a 6 digit code made up of the two numbers – item first then track 
but replacing the two zeroes with the track number.

I use 100100 as the whole item when I don’t need the track info or for common 
info and 100101, 100102, 100103... for the tracks.

The trick is that the primary key for every table is the computed column of the 
item number plus the track number – I like easy arithmetic! I can make views 
based on the computed column that include the common info (essentially track 
“00”) which was essential for me.

It has worked for years – back to v3.1 if I remember correctly.

Regards,
Alastair.





From: Bruce A. Chitiea 
Sent: Wednesday, October 15, 2014 5:34 PM
To: RBASE-L Mailing List 
Subject: [RBASE-L] - Primary Key Construction: Wisdom Needed

All:

By default I use incremented Integer values ( either AUTONUM ( or coded
(thanks Razzak)) ) as Primary Key values with no embedded or implicit
meaning.

I'm designing a table which (ideally) references the PKs of multiple tables
within ONE COMMON field in one-to-one relationships ( Were I referencing
only one table, this would be an FK field. But as multiple tables are being
referenced, Referential Integrity is out the window ).

So I need a mechanism to reliably  indicate which table is being referenced
within each row of the referencing table; otherwise, all sorts of mayhem
results.

Seems there are two ways to go:

1. Use my default PK construction in each referenced table. Include a
"TableReferenced" column in the referencing table. Insert the referenced
table name in each row. Use that value in code to follow the otherwise
inscrutible FK value to the correct referenced table;

Example Approach #1:
ReferencingTable
PrimaryKey|KeyReferenced|TableReferenced
10001|10051|Apple
10002|10051|MuscleCar
10003|10051|RocketMotor


2.  Embed a unique "Table Name" flag within the PK definition in each
referenced table. Build a "FlagTable" relating flags to tablenames. Use the
FlagTable and flag value from the PK in code to find the right table.

Example Approach #2:
Referencing Table
PrimaryKey|KeyReferenced
10001|AP10051
10002|MC10051
10003|RM10051

FlagTable
PrimaryKey|FlagValue|TableName
10001|AP|Apple
10002|MC|MuscleCar
10003|RM|RocketMotor

There's probably a Door Number Three, but I'm not that quick today.

Any votes? Cautions?

Thanks much,

Bruce Chitiea
SafeSectors, Inc.
909.238.9012 


Reply via email to