Ответы пользователя по тегу Базы данных
  • Название таблицы в множественном числе или нет?

    @fynivx
    Software Engineer ( .NET )
    Стандарта нет, вопрос соглашения об именовании в отдельной команде.
    То же самое можно сказать об именовании первичных ключей. Где-то пишут просто Id, а где-то TableNameId.

    Из опыта могу сказать, что DBA чаще называют таблицы в единственном числе, а название первичного ключа начинают с имени таблицы. Девелоперы - наоборот.
    Ответ написан
    Комментировать
  • Как сформировать корректный запрос в связанную таблицу?

    @fynivx
    Software Engineer ( .NET )
    Вот так, например (это T-SQL):
    select P.*
      from Products as P
      join Attribute_values as AV
        on AV.ProductID = P.ID
       and AV.Value = 1
       and AV.AttributeID in (attr1, attr2, attr3)
     group by P.*
    having count(AV.ID) = 3


    Ну, естественно сочетание ProductID/AttributeID в Attribute_values должно быть уникальным.
    Ответ написан
    Комментировать
  • Проектирование базы данных. Переписка между пользователями?

    @fynivx
    Software Engineer ( .NET )
    Нет, вспомогательная таблица тут не нужна.

    Если нужно, чтобы между юзерами могло проходить несколько разных переписок, стоит создать таблицу Conversations (id, initiator_id, date_started, etc ... ) - не для связи, а как самостоятельную сущность, а в таблицу Messages добавить три референса - sender_id, receiver_id и conversation_id.

    Но если допускается, что сообщения между двумя юзерами - всегда одна переписка, то достаточно просто в Messages добавить sender_id и receiver_id. Это однозначно свяжет каждое сообщение с двумя юзерами.

    А вот если нужна переписка сразу между несколькими юзерами, тогда уже нужна вспомогательная таблица ConversationMembers (user_id, conversation_id), а из Messages нужно убрать receiver_id - сообщение и так будет связано с перепиской, и все ConversationMember'ы смогут его получить.
    Ответ написан