我正在研究一个数据建模项目,我正在尝试为一个history
只有四列的表找出最好的数据建模方法:
CREATE TABLE FooHistory
(
SecurityID INT (FK), -- Part of the natural PK.
FieldID INT (FK), -- Part of the natural PK.
DateCreated DATETIME2(0), -- Part of the natural PK.
Value VARCHAR(50)
);
Run Code Online (Sandbox Code Playgroud)
此表中的自然复合 KEY 将是(DateCreated, SecurityId, FieldID)
,并且 ETL 过程每 30 分钟将向此表添加 ~ 2K 行。
问题
声明复合 PRIMARY KEY (PK)(DateCreated, SecurityId, FieldID)
与添加新 IDENTITY 列(即系统生成的代理)并将其用作 PK 的优缺点?
我相信,如果我添加一个 IDENTITY 列并将其用作 PK,那么该表将不会处于第三范式(3NF)中,因为非 PK 列之间将存在函数依赖关系,即,(DateCreated, SecurityId, FieldID)
和Value
.
由于此表保留了历史数据,因此我不希望将此表加入其他外部表,应用程序将主要使用 SELECT 语句与其进行交互。基于这些假设,将表保持在 …