创建表时,我通常使用几个额外的列来跟踪更改时间和相应的用户:
CREATE TABLE dbo.Object
(
ObjectId int NOT NULL IDENTITY (1, 1),
ObjectName varchar(50) NULL ,
CreateTime datetime NOT NULL,
CreateUserId int NOT NULL,
ModifyTime datetime NULL ,
ModifyUserId int NULL
) ON [PRIMARY]
GO
我现在有一个新项目,如果我继续使用这种结构,我将在每个表上使用这种类型的更改跟踪有 6 个额外的列。时间列、用户 ID 列和地理列。我现在认为向我想要执行此操作的每个表添加 6 列是没有意义的。我想知道以下结构是否更有意义:
CREATE TABLE dbo.Object
(
ObjectId int NOT NULL IDENTITY (1, 1),
ObjectName varchar(50) NULL ,
CreateChangeId int NOT NULL,
ModifyChangeId int NULL
) ON [PRIMARY]
GO
-- foreign key relationships on CreateChangeId & ModifyChangeId
CREATE TABLE dbo.Change
(
ChangeId int NOT NULL IDENTITY (1, 1),
ChangeTime datetime NOT NULL,
ChangeUserId int NOT NULL,
ChangeCoordinates geography NULL
) ON [PRIMARY]
GO
任何人都可以对这个小的数据库设计问题提供一些见解,例如常见做法和功能设计吗?