2015-07-18 3 views
0

Я создаю сайт в социальных сетях. Пользователи могут создавать категории (1 пользователь для многих категорий), и каждая категория имеет много записей. Я хочу, чтобы пользователи могли публиковать сообщения о событиях (1 событие может содержать много сообщений).Могу ли я иметь таблицу с двумя внешними ключами?

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

Означает ли это, что я должен создать 1 событие для многих сообщений, а также 1 пользователь для многих сообщений? Это создает проблемы нормализации. Каков наилучший способ?

+0

Просто чтобы быть ясно, пользователи могут размещать на всех категорий или только те, которые они создали? А что такое категория «запись»? –

+0

Наличие 2 внешних ключей в сообщениях (событиях и пользователях) было бы лучшим способом добиться того, чего вы хотите. Это было бы нормализовано. –

+0

Объявление FOREIGN KEY просто сообщает СУБД, что значения в столбцах в таблице, указанные в качестве ссылки, должны отображаться как значения в столбцах в таблице, указанной в качестве ссылки. Если это так, объявите это. Некоторые СУБД не будут допускать циклов в ссылках. (Эти СУБД используют ссылки для других вещей, и ограничение - это только их выбор.) Такие случаи иногда являются признаком плохого дизайна. (СУБД использует ограничения для предотвращения недействительных попыток обновления и оптимизации оценки запросов. Но для обновления или запроса ограничений не требуется). – philipxy

ответ

2

Я не вижу никакой связи между категорией и событий
В этом случае добавьте CategoryId, как FK События

  • Пользователи табличные

    1. USERID Primary key
  • Категории таблица

    1. CategoryId Primary key
    2. идентификатор пользователя Foreign Key (users)
  • События

    1. с кодом события Primary key
  • Сообщений

    1. Primary key
    2. сообщения дан
    3. Foreign Key (events)
    4. с кодом события
    5. USERID Foreign Key (users)
Смежные вопросы