2017-12-16 6 views
-1

Ich bin neu in mysql und ich habe die folgenden Spezifikationen für 3-Tabellen, um eine einfache Datenbank zu erstellen gemacht:Update-Tabellen mit Fremdschlüsseln

DROP TABLE IF EXISTS representative; 
CREATE TABLE representative(
    id_representative VARCHAR(15), 
    name VARCHAR(15), 
    PRIMARY KEY(id_representative) 
)ENGINE=InnoDB DEFAULT CHARSET=latin1; 

DROP TABLE IF EXISTS congress; 
CREATE TABLE congress(
    id_congress INT, 
    PRIMARY KEY(id_congress) 
)ENGINE=InnoDB DEFAULT CHARSET=latin1; 


DROP TABLE IF EXISTS representative_congress; 
CREATE TABLE representative_congress(
    id_ai INT AUTO_INCREMENT, 
    id_representative VARCHAR(15), 
    id_congress INT, 
    party VARCHAR(2), 
    PRIMARY KEY(id_ai), 
    FOREIGN KEY(id_congress) REFERENCES congress(id_congress) ON UPDATE CASCADE, 
    FOREIGN KEY(id_representative) REFERENCES representative(id_representative) ON UPDATE CASCADE 
)ENGINE=InnoDB DEFAULT CHARSET=latin1; 

Die Informationen in beiden Vertretern und Kongress Tabellen gewonnen ändere es nicht, wenn es einmal eingefügt wurde (ich hätte nicht zwei gleiche ID-Repräsentanten für zwei verschiedene Repräsentanten oder zwei gleiche ID-KONGRESS für zwei verschiedene Kongresse). Aber die representative_congress-Tabelle wird für die Fälle verwendet, in denen im selben Kongress (Zeitraum von 2 Jahren) ein bestimmter Vertreter die Parteien (oder noch mehr Felder, die in Zukunft in die Tabelle aufgenommen werden könnten) ändern würde haben denselben id_representative mit verschiedenen Parteien oder noch mehr Feldern für den gleichen Kongress verbunden.

, die mit im Auge, ich habe 2 Fragen:

  • Muss ich den Spezifikationen des Tabellen oder die Einführungs Abfragen keine Einschränkungen hinzufügen müssen? Beachten Sie, dass die Informationen einmal zu den Tabellen hinzugefügt werden und nur geändert werden, wenn die Tabelle/Datenbank gelöscht wird.

  • Gibt es eine Möglichkeit, mit nur einer INSERT-Abfrage die Informationen , die zu zwei verschiedenen Tabellen auf einmal gehören, wie ein Kaskadierungsbefehl in irgendeiner Form einzufügen? Zum Beispiel der id_representative, der sowohl zu repräsentativen als auch zu repräsentativen_Kongressen gehört.

Vielen Dank im Voraus

Antwort

0

Die Einschränkungen sind gut, die Primärschlüssel für repräsentative und Kongress Tabellen sorgen für die Integrität dieser Daten und die Fremdschlüssel in representative_congress verhindern eine falsche Beziehung zu haben, die einzige Überlegung Es gibt das, das vorher nicht in repräsentative_congress eingefügt werden kann, um die IDs in die vorherigen Tabellen einzufügen.

Die Art und Weise Daten in zwei (oder mehr) Tabellen mit nur 1 Insert-Anweisung einzufügen ist mit einem Trigger, aber Sie müssen einen Standardeinsatz oder eine Logik für die Einfügungen zum Beispiel definieren

CREATE TRIGGER trigger_name 
    AFTER INSERT 
    ON representative FOR EACH ROW 
    insert into representative_congress (id_representative, id_congress, party) 
    values (NEW.id_representative, 1, '01') 
Verwandte Themen