请参考下面的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)
我相信这个设计是第二范式,但我想检查一下。
我认为它是第二范式的原因是因为' deleted‘和' checked’属性,即每当一条记录被标记为要删除(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行或多行。因此,我认为这不是第三范式。对吗?
发布于 2015-02-26 04:29:18
让我们逐步了解一下这一点。
reference
。reviewreference
是候选关键字。PersonID
和EventID
不是候选键,因为它们不能唯一标识记录。因为候选键是原子的,所以另一个属性不可能依赖于候选键的一部分。2NF Passedreference
,reviewreference
是候选键。其余信息都引用这些候选关键字,并且除了这些候选关键字之外,不依赖于任何信息。Passed3NF
https://stackoverflow.com/questions/28728629
复制相似问题