相关疑难解决方法(0)

第三范式:复合 PRIMARY KEY 与系​​统生成的代理 (IDENTITY)

我正在研究一个数据建模项目,我正在尝试为一个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 行。

问题

  1. 声明复合 PRIMARY KEY (PK)(DateCreated, SecurityId, FieldID)与添加新 IDENTITY 列(即系统生成的代理)并将其用作 PK 的优缺点?

  2. 我相信,如果我添加一个 IDENTITY 列并将其用作 PK,那么该表将不会处于第三范式(3NF)中,因为非 PK 列之间将存在函数依赖关系,即,(DateCreated, SecurityId, FieldID)Value.

  3. 由于此表保留了历史数据,因此我不希望将此表加入其他外部表,应用程序将主要使用 SELECT 语句与其进行交互。基于这些假设,将表保持在 …

normalization database-design sql-server sql-server-2014

6
推荐指数
1
解决办法
2720
查看次数