如何将一个表与另一个表的多条记录关联起来?
基本上,我有一个'事件'表,我如何跟踪哪些'用户'(在他们自己的单独的表)是在一个特定的事件?现在,我在"事件"表中只有一列,其中包含加入该"事件"的用户id的逗号分隔列表。
一定有更好的方法来做这件事…对吧?
通常有一个名为users_in_event
的表,它与events
表保持多对多关系,每个用户都有一行。因此,对于每个事件,将有许多表行分别映射到用户。
CREATE TABLE users_in_event
(
user_id INT,
event_id INT,
FOREIGN KEY user_id REFERENCES users (user_id) ON UPDATE CASCADE,
FOREIGN KEY event_id REFERENCES events (event_id) ON UPDATE CASCADE
-- Optionally, use ON DELETE CASCADE for the events foreign key
-- FOREIGN KEY event_id REFERENCES events (event_id) ON UPDATE CASCADE ON DELETE CASCADE
)
查看某个事件中有哪些用户,执行:
SELECT
users_in_event.user_id,
users.name
FROM users JOIN users_in_event ON users.user_id = users_in_event.user_id
WHERE event_id=1234;
如果您有一个多对多关系,也就是说,用户可以参加许多事件,并且事件可以由许多用户参加,那么传统上可以用一个映射表来表示,其中包含每个表的主键,以及特定于用户-事件关系的任何属性。
例如,如果USER
和EVENT
表中的ID列都是INT
类型:
CREATE TABLE USER_EVENT_MAPPING
(
USER_ID INT,
EVENT_ID INT
)