2014-10-20 132 views
0

我在這個論壇上看到了一個關於我可以涉及的問題,但我無法將答案應用於我的問題。MySQL關係數據庫設計

這裏有雲:

  1. 我有一個會員表(ID,姓名,號碼)我就使列短。
  2. 接下來,我有一個事件表(ID,eventName的,描述)

現在, 1.會員每個成員都可以參加的活動,因爲他想盡可能多。 2.事件表中的每個事件可以有沒有限制的成員(好吧,說1k個成員,就像那樣或其他)。

我現在所擁有的事件表有一個名爲「joiners」的列,它將包含某個joiner/member的id。但我相信我錯了,因爲某個事件如何處理許多木匠的身份證?

回答

0

我會將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 = ? 
+0

感謝你們倆:)我不能投票你的答案,因爲我沒有足夠的代表。順便說一句,恐怕我沒有時間重新命名我的表格,我有許多使用成員列表表格的php文件。再次感謝! – Glenn 2014-10-20 14:09:19

0

你想要第三個表稱爲events_memberlist

events_memberlist - memberlistId - eventId

這將讓你保持兩個表之間的多對多一對多的關係。

0

您需要第三個表的樂趣,我們將其稱之爲EventMemberTable,山坳的:

event id | member 

它appropiat成員鏈接到appropiat事件。保持其他表格清除冗餘數據。

0

您可以通過具有實現這一目標中間表(在成員和事件之間)。在需要兩個表之間的「多對多」關係的情況下,中間表是必需的。

在中間表中,當成員加入事件時,您將在同一行中包含兩個表的主鍵作爲外鍵。外鍵有效地創建了一個成員和一個事件之間的關係。但是,表格可以包含數千個這樣的條目。

我希望幫助。 P.S.也許下次發佈一些語法。

乾杯

0

當你使用一箇中間表前面已經提到的一樣:

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

否則,您最終可能會產生大量重複項。