想象一下下表。在我的情况下,我完全确定name
需要为unique
和not null
[unique + not null = primary key]。因此name
是主键。由于某些原因(可能是习惯),我自然创建了一个int类型的主键id
。sql数据库:带有2列(id名称)和2个主键的表第三范式Boyce-Codd范式
其他假设:我绝对需要在我的表中保留name
,并且我绝对确定name
(类型varchar
)永远不会超过20个字符。
现在我的第一个问题是[可能是否有预期的接近问题]:如果我创建了这样的表,我尊重BCNF博伊斯 - 科德范式吗?
第二个可选问题[可能是开放式问题]:在这种情况下创建第id
列是否很好?
CREATE TABLE Y (
id int,
name varchar(20),
PRIMARY KEY(id, name)
);
'name'和'id'都是候选键*。只有其中一个可以被选为主键。而违反BCNF,你至少需要三列(因为它有一个PK)。 – joop
* unique + not null =候选键* –
@ MikeSherrill'CatRecall'是的你是对的。这是我的错误。我应该说独特的+不空=候选人的关键 – S12000