sql - Table design with "Person Number" -
we have need store people, 'person number' in format business uses them. @ moment, use manual process numbers person in format of, example fp123456. next person added gets next number, fp123457.
there search in system based on number.
my idea use primary key numeric part, identity(123456,1), , have calculated column (somehow), appends current prefix (fp) primary key, giving fpxxxxxx
i thinking of maybe using default (if that's possible) on personnumber column, which, on inserts, 'fp' + id.
is idea, or there possible issues? also, how default column, on insert. maybe trigger better?
i keep personnumber separate primary key.
you find folks disagree, in experience using natural key primary key always turns out bad choice. things change*.
- today format personnumber 1 way. tomorrow new boss new ideas, , format changes. have problem of updating not 1 original column "personnumber", have update foreign keys well.
- tomorrow may need federate, meaning share records across multiple databases or other systems. have change way primary key, such using uuid values rather integer values.
- at point may need rebuild tables, involving exporting , importing data. @ point want keep personnumber values generate new primary key values.
bottom line job of generating primary key may seem same kind of job generating personnumber, 2 different jobs. separation of concerns guiding principal avoid brittle (easily broken) software. example, if personnumber generator gets messed somehow, @ least rest of database (primary keys in table , foreign keys in related tables) still continue function.
so use surrogate key primary key. separately work out strategy managing personnumber.
that strategy may involve user interface or server-side app incrementing number generate personnumber, suggested sdreyes on page.
another strategy leveraging database server generate sequence/serial personnumber. if have serious database server such ms sql server or postgres, should able create sequence/serial generator without being tied primary key. can create trigger calls on sequence generator assign default value new records. serious database server built handle concurrency problem pointed out sdreyes numbers generated without duplicates. read doc, serial number generators may have gaps in sequence, if transaction rollback happens. if unacceptable, may need find route.
*if think unlikely, ask programmer or sysadmin grey hair.
Comments
Post a Comment