Introduction
Master table layout and creation. The master table controls all data tables via one to one relationship and carries audit info.
Layout
Column | Type | Description |
---|---|---|
id | int (Auto Increment) | Primary key for master table. All data tables must include an ID field (NOT auto increment) linked to this field via one to one relationship. |
id_group | int | Version linking ID. Multiple entries share an identical group ID to identify them as a single record with multiple versions. If no previous versions of a new record exist, then this column is seeded from ID field after initial creation. |
active | bit | If TRUE, marks this entry as the active version of a record. Much faster than a date lookup and necessary for soft delete. |
create_by | int | Account creating this version. -1 = Unknown. |
create_host | varchar(50) | Host (usually IP provided by control code) creating entry. |
create_time | datetype2 | Time this entry was created. |
create_etime | Computed column | Elapsed time in seconds since entry was created. |
update_by | Same as create_x, but updated on every CRUD operation. | |
update_host | ||
update_time | ||
update_etime |
Set Up
CREATE TABLE [dbo].[_a_tbl_master]( id int IDENTITY(1,1) NOT NULL, -- Primary unique key. id_group int NULL, -- Primary record key. All versions of a given record will share a single group ID. active bit NOT NULL, -- Is this the active version of a record? TRUE = Yes. -- Audit info for creating version. A new -- version is created on any CRUD operation -- in the data tables controlled by master. create_by int NOT NULL, -- Account creating this version. -1 = Unknown. create_host varchar(50) NOT NULL, -- Host (usually IP from control code) creating version. create_time datetime2 NOT NULL, -- Time this version was created. create_etime AS (datediff(second, [create_time], getdate())), -- Elapsed time in seconds since creation. -- Audit information for updating version. -- When any CRUD is performed on a data -- table, the previously active version -- is marked inactive. Deleting a record -- simply marks all versions inactive. -- In short, the only updates made to -- a master table are toggling Active -- flag. update_by int NOT NULL, -- Account updating this version. -1 = Unknown. update_host varchar(50) NOT NULL, update_time datetime2 NOT NULL, update_etime AS (datediff(second, update_time, getdate())), CONSTRAINT PK__a_tbl_master PRIMARY KEY CLUSTERED ( id ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE _a_tbl_master ADD CONSTRAINT DF__a_tbl_master_active DEFAULT ((1)) FOR active GO ALTER TABLE _a_tbl_master ADD CONSTRAINT DF__a_tbl_master_create_by DEFAULT ((-1)) FOR create_by GO ALTER TABLE _a_tbl_master ADD CONSTRAINT DF__a_tbl_master_create_host DEFAULT (host_name()) FOR create_host GO ALTER TABLE _a_tbl_master ADD CONSTRAINT DF__a_tbl_master_created DEFAULT (getdate()) FOR create_time GO ALTER TABLE _a_tbl_master ADD CONSTRAINT DF__a_tbl_master_update_host DEFAULT (host_name()) FOR update_host GO