0

我无法在我的房屋出租数据库中设置多个外键。

房子有很多房间,里面有很多租户,每个租户都有一个租户。一个租户可以有多个租约。

我的数据库创建如下:

DROP TABLE IF EXISTS house;
CREATE TABLE house
(
    house_name varchar(30) NOT NULL PRIMARY KEY,
    address_first_line varchar(60),
    address_city varchar(30),
    address_postcode varchar(8)
);

-- rooms

DROP TABLE IF EXISTS room;
CREATE TABLE room
(
    house_name varchar(30) NOT NULL,
    room_number smallint NOT NULL,
    PRIMARY KEY(house_name,room_number),
    FOREIGN KEY (house_name) REFERENCES house(house_name)
);

-- tenants

DROP TABLE IF EXISTS tenant;
CREATE TABLE tenant
(
    tenant_id smallint NOT NULL,
    tenant_firstname varchar(20),
    tenant_surname varchar(20),
    tenant_telephone varchar(12)
);

-- rentals

DROP TABLE IF EXISTS tenancy;
CREATE TABLE tenancy 
(
    house_name varchar(30) NOT NULL,
    room_number smallint NOT NULL,
    start_date date NOT NULL,
    end_date date,
    tenant_id smallint NOT NULL,
    advance smallint,
    deposit smallint,
    PRIMARY KEY (house_name,room_number,start_date),
    FOREIGN KEY (house_name,room_number) REFERENCES room(house_name,room_number),
    FOREIGN KEY (tenant_id) REFERENCES tenant(tenant_id)
);

此行正在生成“1005 错误:无法创建表租赁(错误号:150)”:

FOREIGN KEY (tenant_id) REFERENCES tenant(tenant_id)

租户表是租户和房间之间的关系,这就是它引用这两个表的原因。

我怀疑这真的很简单,但我很难得到它,希望能得到一点帮助。

谢谢,

理查德

4

1 回答 1

0

tenants.tenant_id必须是PRIMARY KEY为了它REFERENCE作为FOREIGN KEY

-- tenants

DROP TABLE IF EXISTS tenant;
CREATE TABLE tenant
(
    tenant_id smallint NOT NULL,
    tenant_firstname varchar(20),
    tenant_surname varchar(20),
    tenant_telephone varchar(12),
    PRIMARY KEY(tenant_id)
);
于 2013-02-03T13:40:11.667 回答