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