请参阅下面的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或许多行。因此,我认为这不是第三种正常形式。这是对的吗?
答案 0 :(得分:4)
让我们逐步完成这个过程。
reference
。 reviewreference
是候选密钥。 PersonID
和EventID
不是候选键,因为它们不能唯一标识记录。由于候选键是原子的,因此另一个属性无法依赖于候选键的一部分。 2NF已通过 reference
,reviewreference
是候选键。剩下的信息都是指这些候选密钥,并且不依赖于这些候选密钥之外的任何信息。 3NF通过