用于保存数组的SQL结构



如何将一个表与另一个表的多条记录关联起来?

基本上,我有一个'事件'表,我如何跟踪哪些'用户'(在他们自己的单独的表)是在一个特定的事件?现在,我在"事件"表中只有一列,其中包含加入该"事件"的用户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;

如果您有一个多对多关系,也就是说,用户可以参加许多事件,并且事件可以由许多用户参加,那么传统上可以用一个映射表来表示,其中包含每个表的主键,以及特定于用户-事件关系的任何属性。

例如,如果USEREVENT表中的ID列都是INT类型:

CREATE TABLE USER_EVENT_MAPPING
(
    USER_ID INT,
    EVENT_ID INT
)

相关内容

  • 没有找到相关文章

最新更新