我假設您正試圖在兩個表格之間創建m:n關係,並且eventparticipant
表格將用作聯結表格。
此新表格將只有一個主鍵,由兩列participant_id
和event_id
組成。請注意,一個表只能有一個主鍵,但這個主鍵可以由多個列組成。這些列的值的每個組合必須是唯一的。
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;
ON DELETE CASCADE
子句是可選的。這意味着如果您刪除參與者或事件,那麼兩者之間的連接將自動被刪除。另一方面,如果您不添加此條款,那麼您將無法刪除參與者或事件,除非您首先刪除所有相關的eventparticipant
記錄。
如果您沒有創建這些外鍵約束,將有可能與ID在participant
或event
不存在添加表eventparticipant
記錄,你也可以刪除參與者或事件,並在eventparticipant
留下幻影記錄後面。
如果你真的想合併這兩個表,不這樣做的身體,而是創建於這三個表合併視圖或只是一個選擇查詢
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;
注意:創建合併表將意味着有非標準化的數據。這很糟糕,因爲您必須保留相同數據的多個副本。對於活動的每個參與者,您都必須再次輸入活動名稱和日期。這使得難以維護數據並保持一致。例如,如果事件日期發生變化,那麼您可能會忘記爲所有參與者更新它,或者您在某處錯誤地輸入了它。
我刪除'SQL-server'標籤,因爲這問題是關於'mysql'。請不要使用不相關的標籤。 –
您正在查找複合鍵。這裏有一個問題可以幫助:http://stackoverflow.com/q/5835978/3901060 – FamousJameous