SQLite create tableステートメントのかなりクールなスタイルBNF文法を読みました
ここにあります: http://www.sqlite.org/lang_createtable.html
これらの間にリンクテーブルを作成するにはどうすればよいのでしょうか。
たとえば、家と別のelectrical_itemsという1つのテーブルがあります。
House_idとitem_idを複合キーとして持つリンクテーブルを作成したいのですが、どうすればよいかわかりません。主キーを外部キーにすることができないようです。
N.B家の電気製品がpap_testedされた日付を格納する3番目のフィールドpap_testedが必要なので、複合主キーを介したこのリンクテーブルが最善のアプローチのようです。
これらのいずれかが関連付けテーブルで機能するはずです。
create table house_items (
house_id integer not null,
item_id integer not null,
foreign key (house_id) references houses(id),
foreign key (item_id) references electrical_items(id),
primary key (house_id, item_id)
)
create table house_items (
house_id integer not null references houses(id),
item_id integer not null references electrical_items(id),
primary key (house_id, item_id)
)
house_items.house_id
とhouse_items.item_id
の個別の(単一列)インデックスも必要になるでしょう 。
最初の答えを補足するために、以下のコードのように、制約に名前を追加することをお勧めします。
create table house_items (
house_id integer not null,
item_id integer not null,
constraint house_items_pk primary key (house_id, item_id),
constraint house_items_house_fk foreign key (house_id) references houses(id),
constraint house_items_items_fk foreign key (item_id) references electrical_items(id));
この種の関係を必要とする設計では、PRIMARYKEYがFOREIGNKEYでもないことを禁止するものはありません。ただし、リンクテーブルの自然なPRIMARY KEYは2つの列の複合であり、それぞれが他のテーブルの1つに戻るFOREIGN KEYであるため、問題はそれらの1つではありません。
2つの外部キーと、更新カスケードと削除カスケードのオプションを使用してテーブルを作成します。
CREATE TABLE category_subcategory
(
category_subcategory_id INTEGER PRIMARY KEY,
category_id INTEGER NOT NULL,
subcategory_id INTEGER NOT NULL,
FOREIGN KEY(category_id) REFERENCES categories(id) ON DELETE CASCADE ON
UPDATE CASCADE,
FOREIGN KEY(subcategory_id) REFERENCES subcategories(subcategory_id) ON
DELETE CASCADE ON UPDATE CASCADE
);