簡體   English   中英

MySQL關系數據庫設計

[英]MySQL relationship database design

我在這個論壇上看到了可以與之聯系的問題,但無法將答案應用於我的問題。

它去了:

  1. 我有一個memberlist表(id,名稱,數字),我只是將各列縮短。
  2. 接下來,我有一個事件表(id,eventName,描述)

現在,1.成員列表中的每個成員都可以根據需要加入任意數量的事件。 2.事件表中的每個事件都可以具有無限制的成員(好吧,說1k個成員,諸如此類)。

我現在所擁有的是一個事件表,該表具有名為“ joiners”的列,其中將包含某個特定的joiner / member的ID。 但是我相信我錯了,因為某個事件如何處理許多細木工的ID?

您需要第三個表,名為events_memberlist

events_memberlist - memberlistId - eventId

這將允許您在兩個表之間保持多對多關系。

您需要第三個表來娛樂,我們將其稱為EventMemberTable,col為:

event id | member

它將appropiat成員鏈接到appropiat事件。 保持其他表中沒有冗余數據。

我會重新命名memberlist進入members ,使您的表命名更加一致。 eventseventlist 您更喜歡哪個。

然后,您要定義成員與事件之間的多對多關系。 這是通過一個中間表完成的,該表將同時引用這兩個表:

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

我假設你的memebersevents你已經有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM