2013-05-04 131 views
1

我正在使用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一对一地获得它?

我已经尝试了大多数我可以在书中找到但没有成功的东西。

请帮忙。

+0

你怎么知道它是一对多的?如果它是真正的一对一,那么所有的数据应该在同一个表中。另外,'id varchar(1)'只给你256个可能的记录。那是你要的吗? – 2013-05-04 21:06:22

+1

好,所以它不会在关系中表现为一对一,但它实际上是一对一的,但它显示的是一对多。 – Jonathan 2013-05-04 21:11:19

+4

你所拥有的是“一对一还是一对一”,这与你在大多数关系型数据库产品中得到的一样接近,而不需要整合到一张表中。 – Thomas 2013-05-04 21:13:34

回答

1

您可能会被关系窗口中显示关系的方式所迷惑。我跑你确切的DDL,当我查看关系窗口的关系,它看起来像一个一对多...

gui.png

...但是当我上线右键单击加盟两个表,然后选择“编辑关系...”对话框中显示,它实际上是一个对一个:

details.png

0

我beleive其实您创建了一个一比一的关系,你希望。

  1. 人ID是唯一
  2. 护照ID是唯一
  3. 护照ID(唯一)等于一个人的ID(也是唯一的)。
  4. 因此,它一到一个

但是,它应该是更好的设计有用于个人和护照不同的ID有更清晰的设计。这样的事情:

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) 
    ); 

这也将包含多个护照的人的情况下。