2012-06-18 4 views
1

У меня возникли трудности при разработке подходящей модели данных для моего приложения.
В моем заявлении у меня есть пары участников, которые будут выполнять несколько действий вместе. Каждое спаривание будет иметь 2-3 разговоров в течение своего существования. В каждом разговоре может быть много сообщений, созданных одним из участников спаривания.
Лучшая модель у меня есть это:Дизайн модели данных для специализированного чат-приложения

  PAIRINGS 
     / \ 
     /  \ 
     V   V 
PARTICIPANTS  CONVERSATIONS 
-pairing_id  -pairing_id 
     \  /
     \  /
     V  V 
     MESSAGES 
     -participant_id 
     -conversation_id 

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

+0

Это слишком расплывчатое , Нет стандартных обозначений. Не достаточно подробно. – Jonno

+0

У меня недостаточно репутации, чтобы опубликовать картинку, поэтому я не могу включить диаграмму. Если есть какие-то вопросы, на которые я могу ответить, я бы с удовольствием это сделал. – Selah

ответ

2

Это распространенная проблема. Добавьте pairing_id в MESSAGES таблице и соответствующим образом два FOREIGN ключей, чтобы включить эту колонку:

  PAIRINGS 
     / \ 
     /  \ 
     V   V 
PARTICIPANTS  CONVERSATIONS 
-pairing_id  -pairing_id 
     \  /
     \  /
     V  V 
     MESSAGES 
     -participant_id 
     -conversation_id 
     -pairing_id 

Большинство СУБД будет также требовать, чтобы добавить UNIQUE индексов, на PARTICIPANTS (pairing_id, participant_id) и CONVERSATIONS (pairing_id, conversation_id)

+0

интересный ... это общий шаблон, о котором я мог бы больше узнать? есть ли какой-то термин, который я мог бы найти в Интернете? – Selah

+0

Да, я должен сказать, что это распространено в ромбовидном дизайне. См. Аналогичный вопрос: [SQL: нормализация базы данных при сохранении ограничений] (http://stackoverflow.com/questions/7183039/sql-normalization-of-database-while-retaining-constraints/7183985#7183985) или это (подробнее сложный) один: [Выбор из нескольких ключей-кандидатов] (http://stackoverflow.com/questions/9082575/choosing-from-multiple-candidate-keys/9082972#9082972) –

+0

Остерегайтесь, что для этого требуется составная (составная) ПК или Уникальный индекс и составной внешний ключ - и что некоторые ОРМ испытывают трудности с сложными FK или вообще не могут работать с ними. –

Смежные вопросы