如何将表与另一个表中的多个记录相关联?
基本上,我有一个活动表,我如何跟踪哪些用户' (在他们自己的单独表中)是在特定的事件?现在我只是在“'事件”栏目中有一个专栏。表格以逗号分隔的用户ID列表已加入该事件'。
必须有更好的方法来做到这一点......对吗?
答案 0 :(得分:5)
通常,您有一个名为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;
答案 1 :(得分:1)
如果您有多对多的关系,也就是说,用户可以参加许多活动,许多用户都可以参加活动,传统上这些活动将使用包含每个表中主键的映射表来表示,另外任何特定于用户事件关系的属性。
例如,如果您的USER
和EVENT
表中的ID列都属于INT
类型:
CREATE TABLE USER_EVENT_MAPPING
(
USER_ID INT,
EVENT_ID INT
)