Я работаю над редизайном некоторых частей нашей схемы и сталкиваюсь с проблемой, когда просто не знаю, как правильно что-то сделать.У меня есть таблица событий, например:
Events
--------
event_id
для каждого события, с ним может быть связано n групп или пользователей.Таким образом, есть таблица, относящаяся к событиям для пользователей, чтобы отразить это отношение один ко многим, например:
EventUsers
----------
event_id
user_id
Проблема в том, что у нас также есть концепция групп.Мы хотим связать n групп с событием в дополнение к пользователям.Таким образом, этого столбца user_id недостаточно, потому что нам нужно хранить потенциально либо user_id, либо group_id.
Я думал о множестве способов справиться с этим, но все они кажутся большим взломом,Например, я мог бы сделать это member_id и вставить в столбец member_type, например:
EventUsers
----------
event_id
participant_id
participant_type
, и если бы я хотел получить события, частью которых является user_id 10, это могло бы быть что-то вроде:
select event_id
from EventUsers
where participant_id = 10
and participant_type = 1
(при условии, что где-то участник_Тип 1 был определен как Пользователь).Но мне не нравится это с философской точки зрения, потому что, когда я смотрю на данные, я не знаю, что означает число в member_id, если только я не смотрю на значение вpartpant_type.
Я мог бытакже измените EventUsers на что-то вроде:
EventParticipants
-----------------
event_id
user_id
group_id
и разрешите значениям user_id и group_id быть NULL, если эта запись имеет дело с другим типом информации.
Конечно, яможно просто разбить EventUsers, и мы назовем его EventGroups на 2 разные таблицы, но я хотел бы сохранить, кто связан с событием, хранящимся в одном месте, если есть хороший логический способ сделать это.
Итакя пропускаю хороший способ сделать это?