我想在数据库中的两个表之间定义一对一的关系,让我们说人和地址。
CREATE TABLE Person (
pid INT PRIMARY KEY,
name VARCHAR(20),
occupation VARCHAR(20));
CREATE TABLE Address (
street VARCHAR(30) PRIMARY KEY,
city VARCHAR(10),
state VARCHAR(2),
zip VARCHAR(5));
我想链接这两个,以便每个人只有一个地址,每个地址只有一个人住在那里(这是一个简化的例子)。
我发现大多数解决方案都建议让两个表共享一个主键,或者将地址PK更改为引用人员PK的FK。我不想这样做,因为我仍然希望街道和pid都是独一无二的。
我将如何接近这个?
答案 0 :(得分:2)
您在Person上有一个唯一键,以及一个主键,地址的主键将引用该键。
答案 1 :(得分:1)
与@ DavidAldridge的建议相反,我将表格结构如下:
CREATE TABLE ADDRESS
(ID_ADDRESS NUMBER
CONSTRAINT PK_ADDRESS
PRIMARY KEY,
ADDR1 VARCHAR2(100),
ADDR2 VARCHAR2(100),
CITY VARCHAR2(100),
STATE_ABBR CHAR(2),
POSTAL_CODE VARCHAR2(9));
CREATE TABLE PERSON
(ID_PERSON NUMBER
CONSTRAINT PK_PERSON
PRIMARY KEY,
ID_ADDRESS NUMBER
CONSTRAINT FK_PERSON_1
REFERENCES ADDRESS (ID_ADDRESS)
CONSTRAINT UQ_PERSON_1
UNIQUE,
FIRST_NAME VARCHAR2(50) DEFAULT 'JENNIE',
LAST_NAME VARCHAR2(50),
AGE NUMBER,
WEIGHT NUMBER,
PHONE VARCHAR2(50) DEFAULT '867-5309');
(这里假设ID_ADDRESS和ID_PERSON将以某种方式填充唯一值 - 如果是我,我将在每个表的BEFORE INSERT触发器中执行此操作......)。
通过在PERSON.ID_ADDRESS上放置一个UNIQUE约束,你说只有一个人可以住在给定的地址。
希望这会给你一些想法。
分享并享受。