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