存储有关一行一行的元数据的最佳实践是什么?
以银行间金融转账为例。Transfer
可能看起来像:
CREATE TABLE Transfers (
TransferID int,
FromTransit varchar(10),
FromBranch varchar(10),
FromAccount varchar(50),
ToTransit varchar(10),
ToBranch varchar(10),
ToAccount varchar(50),
Amount money,
Status varchar(50));
但是现在,当然,人们会希望看到元数据:
ALTER TABLE Transfers
ADD
CreatedDate datetime,
LastModifiedDate datetime,
CreatedByUsername varchar(50),
CreatedByFullname varchar(200),
CreatedByWorkstation varchar(50),
VoidedDate datetime NULL,
VoidedByUsername datetime NULL,
VoidedByFullname datetime NULL,
VoidApprovedBySupervisorUsername varchar(50) NULL,
VoidApprovedBySupervisorFullname varchar(200) NULL,
VoidApprovedBySupervisorWorkstation varchar(50) NULL,
SentDate datetime NULL,
SentByUsername varchar(50) NULL,
SentByFullname varchar(50) NULL,
SentByWorkstation varchar(50) NULL,
SendApprovedBySupervisorUsername varchar(50) NULL,
SendApprovedBySupervisorFullname varchar(50) NULL,
SendApprovedBySupervisorWorkstation varchar(50) NULL,
SendConfirmationNumber varchar(50) NULL,
SentToRemoteMachineName varchar(50) NULL,
ReceivedDate datetime NULL,
ReceivedConfirmationNumber varchar(50) NULL,
ReceivedToRemoteMachineName varchar(50) NULL,
ReceivedByUsername varchar(50) NULL,
ReceivedByFullname varchar(50) NULL,
ReceivedByWorkstation varchar(50) NULL,
ReceiveApprovedBySupervisorUsername varchar(50) NULL,
ReceiveApprovedBySupervisorFullname varchar(50) NULL,
ReceivedApprovedBySupervisorWorkstation varchar(50) NULL,
ReceivedCheckedBySupervisorUsername varchar(50) NULL,
ReceivedCheckedBySupervisorFullname varchar(50) NULL,
ReceivedCheckedBySupervisorWorkstation varchar(50) NULL
)
这些都是明确定义的值,它们都将出现在与转移相关的硬拷贝上。
我们已经对表中的更改进行了审计日志记录,但这不会捕获如下内容:
UPDATE Transfers SET Status = 'TransferStatus_Received'
WHERE TransferID = 6744891
它将捕获进行更改的人的用户名、全名和机器名;但它无法知道在此人肩上输入其凭据以“授权”接收转移的主管的姓名。
当他们要求跟踪另一条信息时,我感到很恼火,我必须在我的数据表中添加更多元数据列。
这是最佳实践吗?