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エラー:テーブルテナンシーを作成できません(errno:150)」を生成しています:

FOREIGN KEY (tenant_id) REFERENCES tenant(tenant_id)

テナントテーブルはテナントと部屋の関係であるため、両方のテーブルを参照します。

それは本当に単純なことだと思いますが、私はそれを手に入れるのに苦労していて、少し助けていただければ幸いです。

ありがとう、

リチャード

4

1 に答える 1

0

としてそれをするためにあるtenants.tenant_id必要があります。PRIMARY KEYREFERENCEFOREIGN 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 に答える