[英]MySQL relationship database design
我在這個論壇上看到了可以與之聯系的問題,但無法將答案應用於我的問題。
它去了:
現在,1.成員列表中的每個成員都可以根據需要加入任意數量的事件。 2.事件表中的每個事件都可以具有無限制的成員(好吧,說1k個成員,諸如此類)。
我現在所擁有的是一個事件表,該表具有名為“ joiners”的列,其中將包含某個特定的joiner / member的ID。 但是我相信我錯了,因為某個事件如何處理許多細木工的ID?
您需要第三個表,名為events_memberlist :
events_memberlist - memberlistId - eventId
這將允許您在兩個表之間保持多對多關系。
您需要第三個表來娛樂,我們將其稱為EventMemberTable,col為:
event id | member
它將appropiat成員鏈接到appropiat事件。 保持其他表中沒有冗余數據。
我會重新命名memberlist
進入members
,使您的表命名更加一致。 或events
到eventlist
。 您更喜歡哪個。
然后,您要定義成員與事件之間的多對多關系。 這是通過一個中間表完成的,該表將同時引用這兩個表:
create table eventmembers (
id int unsigned not null primary_key auto_increment,
member_id int unsigned not null references members(id),
event_id int unsigned not null references events(id)
)
我假設你的memebers
和events
你已經有id
被設置成主鍵字段。
如果您想讓特定用戶參加所有活動,則可以
select events.*
from events
left join eventmembers
on events.id = eventmembers.event_id
where
member_id = ?
並獲得活動中的所有成員:
select members.*
from members
left join eventmembers
on members.id = eventmembers.member_id
where
event_id = ?
您可以通過有一個中間表(在成員和事件之間)來實現。 在兩個表之間需要“多對多”關系的情況下,中間表是必需的。
在中間表中,當成員加入事件時,您將在同一行中將兩個表的主鍵作為外鍵包括在內。 外鍵有效地創建了一個成員和一個事件之間的關系。 但是,該表可以包含數千個這些條目。
希望對您有所幫助。 PS也許下次發布一些語法。
干杯
當您使用已經提到的中間表時,例如:
CREATE TABLE event_members (
member_id INT UNSIGNED NOT NULL REFERENCES members(id),
event_id INT UNSIGNED NOT NULL REFERENCES events(id)
)
您還應該設置唯一索引,以防止同一成員/事件組合出現多個條目,例如
ALTER TABLE event_members ADD UNIQUE INDEX uniq_event_members_idx (member_id, event_id);
否則,您可能最終會產生大量重復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.