Я бы сделал это так:
3 таблицы (как много ко многим)
Таблица 1: Пользователи
Таблица 2: Пользователи_События
Таблица 3: События
Таблица 2 будет содержать:
- ФК из таблицы 1
FK из таблицы 3
Атрибут, который является природой отношения (организатор или посетитель) ... его можно превратить в таблицу отношений, а затем таблица 2 будет содержать FK для этой таблицы вместо
дата, когда было инициировано отношение (это обязательно понадобится в какой-то момент :))
Так что, если мы скажем, что Боб создает событие сегодня, и что Сара и Джон будут добавлены завтра как участники, у вас получится (первый столбец - PK для таблиц 1 и 2):
Таблица 1 1 - Боб 2 - Сара 3 - Джон
Таблица 2 1 - A - Организатор - 05.01.2012 2 - A - Участник - 06.01.2012 3
- A - Участник - 06.01.2012
Таблица 3 A - Супер новое событие
если вы хотите, чтобы Боб присутствовал на собрании, то в таблице 2 должна быть создана новая запись
1 - A - Участник - 06.01.2012
Тогда, если вам нужны участники на мероприятии A, вам нужно присоединиться к таблицам 1, 2 и 3 и отфильтровать в table_2 значение "Attendee"
Чтобы избежать двойной записи в случае участия организатора, вы можете просто иметь таблицу 2 следующим образом:
Таблица 2 будет содержать:
- ФК из Таблицы 1
- ФК из Таблицы 3
- Посетитель (булево)
- Органайзер (логическое)
Это еще более гибко, и, например, если вам позже понадобится отслеживать, кто выступит с речью на собрании, вы можете ввести новую колонку «Динамик», не разбивая свой стол. Если вы предвидите много ролей, это не будет масштабируемым, однако