家を借りるデータベースに複数の外部キーを設定するのに問題があります。
家にはたくさんの部屋があり、それぞれにテナントがあります。テナントは多くのテナントを持つことができます。
私のデータベースは次のように作成されます。
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)
テナントテーブルはテナントと部屋の関係であるため、両方のテーブルを参照します。
それは本当に単純なことだと思いますが、私はそれを手に入れるのに苦労していて、少し助けていただければ幸いです。
ありがとう、
リチャード