webentwicklung-frage-antwort-db.com.de

SQLite-Verbundschlüssel (2 Fremdschlüssel) Verknüpfungstabelle

Ich habe die ziemlich cool gestaltete BNF-Grammatik für die SQLite-Anweisung create table gelesen

hier zu finden: http://www.sqlite.org/lang_createtable.html

Ich fragte mich, wie ich vorgehen sollte, um eine Verknüpfungstabelle zwischen diesen zu erstellen

Ich habe einen Tisch, sagen wir, Häuser und andere elektrische Gegenstände.

Ich möchte eine Verknüpfungstabelle erstellen, um die house_id und die item_id als zusammengesetzten Schlüssel zu haben, bin mir aber nicht sicher, wie ich vorgehen soll. Es scheint jedoch nicht möglich zu sein, dass ein Primärschlüssel ein Fremdschlüssel ist.

NB Ich möchte ein drittes Feld pap_tested, in dem das Datum gespeichert wird, an dem der elektrische Gegenstand im Haus pap_tested wurde, sodass diese Verknüpfungstabelle über einen zusammengesetzten Primärschlüssel der beste Ansatz zu sein scheint.

14
Luke

Beides sollte für Ihre Zuordnungstabelle funktionieren:

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)
)

Sie werden wahrscheinlich separate (einspaltige) Indizes für house_items.house_id und house_items.item_id benötigen.

29
mu is too short

Es gibt kein Verbot, dass ein PRIMARY KEY nicht auch ein FOREIGN KEY für diejenigen Designs ist, die diese Art von Beziehung erfordern. Ihr Problem ist jedoch keines davon, da der natürliche PRIMARY KEY in der Verknüpfungstabelle aus zwei Spalten besteht, von denen jede einen FOREIGN KEY zurück zu einer der anderen Tabellen enthält.

1
Larry Lustig

Um die erste Antwort zu vervollständigen, ist es eine gute Praxis, Einschränkungen einen Namen hinzuzufügen, wie den folgenden Code:

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));
1
Danilo Teodoro

Ich erstelle eine Tabelle mit zwei Fremdschlüsseln und Optionen für Update-Kaskade und Delete-Kaskade.

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
 );
0
Suleman Ilyas