внешний ключ mysql с несколькими ссылками


Я использую mysql и работаю над схемой для веб-сайта, который я создаю. Я немного застрял, потому что у меня есть пользователи, сообщества (группа пользователей), мероприятия (планы, составленные пользователем или сообществом, в которых участвуют один или несколько пользователей или сообществ), и RSVP (содержащие дату, когда пользователь/сообщество rsvped к действию). Я создал таблицу для пользователей, сообществ и действий, но застрял на RSVP:

Проблема, с которой я сталкиваюсь, заключается в том, что в идеале у меня было бы что-то вроде это для таблицы rsvps:

USER/COM     ID     ACT_ID     DATE     Goin?
U            2342   1          7/1/12   true
U            1342   1          7/2/12   false
U            2842   1          7/1/12   true
C            5342   1          7/1/12   false

ID-это ограничение внешнего ключа для таблиц пользователя или сообщества в зависимости от значения атрибута USER/COM. Теперь я почти уверен, что это невозможно сделать таким образом, поэтому мне просто интересно, как вы это сделаете.

Последнее примечание: у меня будет несколько других таблиц, которые должны быть в состоянии использовать либо пользователей, либо сообщества вместе, кроме только таблицы rsvp, поэтому я предпочел бы, чтобы идея была максимально простой для приглашение таблице.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, Спасибо :)

2 2

2 ответа:

Я бы сделал другую таблицу, которая соединяет пользователей и сообщества.

ID    USER_OR_COMMUNITY_ID     IS_USER
1     32933                    true
2     2398                     false
3     23278                    false
4     923                      false
Это может быть полезно, поскольку пользователи и сообщества могут иметь схожие типы информации. Например, у пользователей есть имя (username), сообщества тоже. У них также может быть дата регистрации, Аватар и так далее.. Таким образом, вы можете иметь таблицу, содержащую, например, следующие столбцы: id, user_or_community_id, is_user, name, date_registred. Тогда все данные, относящиеся к конкретному пользователю, будут храниться в нем. таблица и то же самое для общин. Но я не уверен, что это хороший вопрос. Это может немного усложниться.

Поскольку я предпочитаю внешние ключи, я бы использовал что-то вроде этого

RSVP_ID   USER_ID    COM_ID   ACT_ID     DATE     Goin?
1         2342       NULL     1          7/1/12   true
2         1342       NULL     1          7/2/12   false
3         2842       NULL     1          7/1/12   true
4         NULL       5342     1          7/1/12   false

RSVP_ID - это просто некоторый первичный ключ автоматического приращения. Вы можете поместить 2 уникальных ключа на user_id+act_id и com_id+act_id.

Таким образом, вы можете заставить ваши внешние ключи работать должным образом. Кроме того, у меня всегда есть колонка с разным содержанием...