用于保存数组的SQL结构?

时间:2011-08-20 01:55:06

标签: php sql multidimensional-array

如何将表与另一个表中的多个记录相关联?

基本上,我有一个活动表,我如何跟踪哪些用户' (在他们自己的单独表中)是在特定的事件?现在我只是在“'事件”栏目中有一个专栏。表格以逗号分隔的用户ID列表已加入该事件'。

必须有更好的方法来做到这一点......对吗?

2 个答案:

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

如果您有多对多的关系,也就是说,用户可以参加许多活动,许多用户都可以参加活动,传统上这些活动将使用包含每个表中主键的映射表来表示,另外任何特定于用户事件关系的属性。

例如,如果您的USEREVENT表中的ID列都属于INT类型:

CREATE TABLE USER_EVENT_MAPPING
(
    USER_ID INT,
    EVENT_ID INT
)