跨越一对多架构的主键

时间:2015-04-14 11:32:02

标签: mysql database jpa

我有一个关于架构设计的简单问题。我的应用程序有一个名字和姓氏表 - 没有其他识别信息。当然可以有两个具有相同名字和姓氏的不同个体。每个人都有一个或多个注册号,这些注册号保存在一个单独的表中。注册号是唯一的。令我困扰的是,Names表没有唯一键(除了自动生成的ID),并且记录的唯一性实际上是FirstName,LastName和注册号的组合。首先,我不知道如何创建一个像我描述的那样的密钥,其次我不确定是否有必要?与具有独特(例如注册号码)的设计相比,这种设计对腐败更具可持续性吗?这种影响是针对更新的 - 我需要搜索FirstName,LastName和注册号的交叉表组合。

1 个答案:

答案 0 :(得分: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命令,以防您已经创建了一个表:

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