Ich nehme an, dass Sie versuchen, eine m: n-Beziehung zwischen den beiden Tabellen zu erstellen, und dass die Tabelle eventparticipant
als Junction-Tabelle dient.
Diese neue Tabelle nur ein Primärschlüssel der participant_id
und event_id
zwei Spalten bestehend hat. Beachten Sie, dass eine Tabelle nur einen Primärschlüssel haben kann. Dieser Primärschlüssel kann jedoch aus mehreren Spalten bestehen. Jede Kombination der Werte dieser Spalten muss eindeutig sein.
CREATE TABLE eventparticipant(
participant_id int not null,
event_id int not null,
PRIMARY KEY (participant_id, event_id)
);
ALTER TABLE participant
ADD CONSTRAINT fk_participant_eventpart
FOREIGN KEY(participant_id)
REFERENCES eventparticipant(participant_id)
ON DELETE CASCADE;
ALTER TABLE event
ADD CONSTRAINT fk_event_eventpart
FOREIGN KEY(event_id)
REFERENCES eventparticipant(evet_id)
ON DELETE CASCADE;
Die Klausel ON DELETE CASCADE
ist optional. Wenn Sie entweder einen Teilnehmer oder ein Ereignis löschen, wird die Verbindung zwischen beiden automatisch gelöscht. Wenn Sie diese Klausel jedoch nicht hinzufügen, können Sie keine Teilnehmer oder Ereignisse löschen, es sei denn, Sie löschen zuerst alle zugehörigen eventparticipant
Datensätze.
Wenn Sie diese Fremdschlüssel-Constraints nicht erstellt haben, wäre es möglich, Datensätze in der Tabelle eventparticipant
mit id bestehenden hinzufügen nicht in participant
oder event
und Sie könnten auch Teilnehmer oder Ereignisse löschen und Rück Aufzeichnungen in eventparticipant
hinter sich lassen.
Wenn Sie wirklich wollen diese beiden Tabellen zusammenführen, tun dies nicht physisch tun, anstatt eine zusammenfassende Ansicht erstellen oder einfach nur eine Auswahlabfrage auf diesen drei Tabellen
SELECT
p.participant_fname,
p.participant_lname,
e.event_name,
e.event_date
FROM
participants p
INNER JOIN eventparticipant ep
ON p.participant_id = ep.participant_id
INNER JOIN event e
ON ep.event_id = e.event_id;
Hinweis: Beim Erstellen einer zusammengeführten Tabelle werden nicht normalisierte Daten angezeigt. Das ist schlecht, weil Sie mehrere Kopien der gleichen Daten behalten müssen. Für jeden Teilnehmer eines Events müssten Sie die Namen und Daten des Events erneut eingeben. Dies macht es schwierig, die Daten zu pflegen und konsistent zu halten. Wenn sich beispielsweise das Ereignisdatum ändert, kann es passieren, dass Sie vergessen, es für alle Teilnehmer zu aktualisieren oder dass Sie es irgendwo falsch eingeben.
I 'sql-server' Tag entfernt, da diese Frage zu' mysql' ist. Bitte verwenden Sie keine nicht verwandten Tags. –
Sie suchen nach einem zusammengesetzten Schlüssel. Hier ist eine Frage, die helfen kann: http://stackoverflow.com/q/5835978/3901060 – FamousJameous