SQL структура для хранения массивов? - PullRequest
2 голосов
/ 20 августа 2011

Как связать таблицу с несколькими записями из другой таблицы?

По сути, у меня есть таблица для «события», как мне отслеживать, какие «пользователи» (в своей отдельной таблице) находятся в определенном событии? Прямо сейчас у меня просто есть столбец в таблице «событий» со списком разделенных запятыми идентификаторов пользователей, которые присоединились к этому «событию».

Должен быть лучший способ сделать это ... верно?

Ответы [ 2 ]

5 голосов
/ 20 августа 2011

Как правило, у вас есть таблица с именем 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 голос
/ 20 августа 2011

Если у вас есть отношение «многие ко многим», то есть пользователи могут посещать многие события, а события могут посещать многие пользователи, которые традиционно будут представлены таблицей сопоставления с первичным ключом из каждой таблицы плюс любые атрибуты, относящиеся к пользовательскому событию.

Например, если в таблицах USER и EVENT есть столбцы идентификаторов типа INT:

CREATE TABLE USER_EVENT_MAPPING
(
    USER_ID INT,
    EVENT_ID INT
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...