达到第三范式

时间:2015-02-25 20:08:47

标签: sql sql-server database-normalization

请参阅下面的DDL:

CREATE TABLE dbDeletion
  (
     reference       INT IDENTITY PRIMARY KEY,
     reviewreference INT,
     PersonID        INT,
     EventID         INT,
     [delete]        BIT,
     Deleted         BIT,
     Checked         BIT
  )

INSERT INTO dbdeletion
            (reviewreference,
             personid,
             eventid,
             [delete],
             deleted,
             checked)
VALUES      (1,1,4,0,0,0),
            (2,2,4,1,0,1),
            (3,1,4,1,1,0)

我相信这个设计是第二种正常形式,但我想检查一下。

我认为它是第二种正常形式的原因是因为删除了'并且'检查'属性,即每次将记录标记为删除(dbdeletion.delete = 1)时,都会检查记录以查看是否可以删除它。如果可以删除它,则删除它并将dbdeletion.deleted设置为1,否则dbdeletion.checked设置为1.

当dbdeletion.deleted设置为1时,它设置如下:

update dbdeletion set deleted=1 where PersonID=@PersonID and EventID=@EventID

当dbdeletion.checked设置为1时,它设置如下:

update dbdeletion set checked=1 where PersonID=@PersonID and EventID=@EventID

上面的两个SQL语句更新1或许多行。因此,我认为这不是第三种正常形式。这是对的吗?

1 个答案:

答案 0 :(得分:4)

让我们逐步完成这个过程。

  1. 所有字段都包含一条且仅包含一条信息。 1NF通过
  2. 主键是referencereviewreference是候选密钥。 PersonIDEventID不是候选键,因为它们不能唯一标识记录。由于候选键是原子的,因此另一个属性无法依赖于候选键的一部分。 2NF已通过
  3. 主键是referencereviewreference是候选键。剩下的信息都是指这些候选密钥,并且不依赖于这些候选密钥之外的任何信息。 3NF通过