2015-04-14 36 views
0

我有一个关于模式设计的简单问题。我的应用程序有一个名字和姓氏的表格 - 没有其他识别信息。当然可能有两个具有相同名字和姓氏的不同人物。每个人都有一个或多个注册号码,这些注册号码保存在单独的表格中。注册号码是唯一的。麻烦的是,Names表没有唯一键(除了自动生成的ID),并且记录的唯一性实际上是FirstName,LastName和注册号的组合。首先,我不确定如何创建一个关键字,例如我描述的关键字,其次我不确定这是否有必要?这种设计是否比拥有独特(比如注册号码)的设计更具可持续性?如果这种影响是针对更新的 - 我需要搜索FirstName,LastName和注册号的交叉表组合。跨一对多模式的主键

回答

1

你可以这样做。通过创建一个我已经在下面解释的独特密钥。另一种选择是将ID用作存储注册号码的表中的外键。在更新记录时,您需要在where子句中提供注册号和ID(这是此表中的外键)以更新任何记录。

我宁愿你创建一个唯一密钥。

您可以根据三列简单创建一个唯一密钥。

CREATE TABLE Names(
    ID Int(10) NOT NULL AUTO_INCREMENT, 
    FirstName Varchar(50) NOT NULL, 
    LastName Varchar (50) NOT NULL, 
    CONSTRAINT Names_UC UNIQUE (ID, FirstName, LastName) 
); 

或改变命令,如果你已经创建了一个表:

ALTER TABLE Names ADD CONSTRAINT Names_UC UNIQUE (ID, FirstName, LastName); 
+0

Thak你这个 - 大加赞赏 – skyman

+0

一点问题都没有:) – ssadaqat