Предположим, у меня есть сайт, на котором любой человек может покупать и продавать товары, а 2 зарегистрированных пользователя могут отправлять друг другу сообщения о товаре. Одна из отношений в моей базе данных:Третья (?) Нормальная форма отношения
Message
--------
idMessage (PK)
Sender
Recipient
idObject
Subject
Конечно одного отправителя или получателя должен быть либо продавец или покупатель продукта. Мой вопрос в том, что это отношение в 3-й нормальной форме. Конечно, он находится в 2-й нормальной форме, потому что каждый неявный столбец полностью функционально зависит от первичного ключа.
Пример: Допустим, что userB
является продавцом (владельцем) продукта #1234
и userA
является продавцом (владельцем) продукта #1000
. Мы имеем следующую таблицу:
idMessage| Sender| Recipient | idObject| Subject
________________________________________________
1 | userA | userB | #1234 | size
2 | userB | userC | #1234 | discount
3 | userA | userB | #1000 | size
По-видимому, idObject
в таблице выше определяет продавец продукта. В каждом случае продавец должен быть либо в столбце «Отправитель», либо в столбце «Получатель». Дело в том, что [Отправитель] или/и [Получатель] не могут определить idObject, как мы можем видеть в приведенном выше примере. Таким образом, мы имеем 3NF, так как все неключевые столбцы функционально децентрализованы только и только для первичного ключа.
Остерегайтесь того, что «поскольку все неключевые столбцы определяются только первичным ключом» (угадывая, что вы намеревались написать, поскольку то, что вы написали, не имеет смысла) не является обоснованным оправданием. Правильно было бы, что все неключевые столбцы * не-транзитивно * определяются * каждым * ключом * и находятся в 2NF *. – philipxy