一对一的关系建模

时间:2013-05-04 20:59:53

标签: database ms-access

我正在使用Access 2010来执行此操作。

我已经创建了两个表格,我希望一对一地获得它,而且我似乎并不是一对一的关系。

CREATE TABLE Person(
ID VARCHAR(1) UNIQUE,
Name VARCHAR(30),

PRIMARY KEY (ID)
);

CREATE TABLE Passport(
ID VARCHAR(1) UNIQUE,
Country VARCHAR(30),
PRIMARY KEY (ID),
FOREIGN KEY (ID) REFERENCES Person(ID)
);

从我所掌握的一点点知识来看,这应该是一对一的关系,但它是一对一的关系。如何通过ACCESS一对一获取它?

我尝试了大部分可以在书中找到但却没有成功的东西。

请帮忙。

2 个答案:

答案 0 :(得分:1)

您可能会被“关系”窗口中关系的显示方式误导。我运行了你的确切DDL,当我在Relationships窗口中查看关系时,看起来像一对多......

gui.png

...但是当我右键单击连接两个表的行并选择“编辑关系...”时,对话框显示它实际上是一对一的:

details.png

答案 1 :(得分:0)

我相信你实际上已经按照自己的意愿建立了一对一的关系。

  1. 人员ID是唯一的
  2. 护照ID是唯一的
  3. 护照ID(唯一)等于一个人身份(也是唯一的)。
  4. 所以一对一
  5. 然而,为人和护照设置不同的设计应该是更好的设计。像这样:

       CREATE TABLE Person(
        PERSONID VARCHAR(1) UNIQUE,
        Name VARCHAR(30),
    
        PRIMARY KEY (PERSONID)
       );
    
       CREATE TABLE Passport(
       PASSPORTID VARCHAR(1) UNIQUE,
       Country VARCHAR(30),
       PERSONID VARCHAR(1),
       PRIMARY KEY (PASSPORTID),
       FOREIGN KEY (PERSONID) REFERENCES Person(PERSONID)
       );
    

    这也适用于持有多本护照的人。

相关问题