The primary key pool table

The pool of primary keys is held in a separate table. The following CREATE TABLE statement creates a primary key pool table:

CREATE TABLE KeyPool (
   table_name VARCHAR(40) NOT NULL,
   value INTEGER NOT NULL,
   location CHAR(12) NOT NULL,
   PRIMARY KEY (table_name, value),
);

The columns of this table have the following meanings:

Column Description
table_name Holds the names of tables for which primary key pools must be maintained. In our simple example, if new sales representatives were to be added only at the consolidated database, only the Customers table needs a primary key pool and this column is redundant. It is included to show a general solution.
value Holds a list of primary key values. Each value is unique for each table listed in table_name.
location An identifier for the recipient. In some setups, this could be the same as the rep_key value of the SalesReps table. In other setups, there will be users other than sales representatives and the two identifiers should be distinct.

For performance reasons, you may want to create an index on the table:

CREATE INDEX KeyPoolLocation
ON KeyPool (table_name, location, value);