用户消息关系的功能依赖
Functional Dependencies of a User Message Relation
更新:关系模型可能无法按我希望的方式工作,请参阅:Database normalization for facebook-like messaging system
NoSQL 时间到了!
我无法将数据库放入 2nf。为此,您必须先确定所有函数依赖性,然后才能确定属性是质数还是非质数。
看这里:
--------------------------------------------
to | from | msg | time
--------|--------|----------------|---------
joe | jim | hello | 1
jim | joe | hey | 2
jim | joe | how are you | 3
victor | bryce | i love carrots | 4
joe | jim | im doin great | 5
bryce | jim | hello | 6
注意:时间将是唯一的。将被交易
是否 time->message despite
time1->"hello"
time6->"hello"
因为我听说只要有消息的唯一实例,就可以了。然而,我对此感到困惑。
此外,我想添加一个消息 ID 列。这是好的做法吗?
函数依赖性询问,"If I know one value for 'X', do I know one and only one value for 'Y'?",其中 'X' 和 'Y' 是关系的属性。 ('X' 和 'Y' 指的是 组 属性。)
如果属性 "time" 的值实际上是唯一的,那么知道 "time" 的一个值意味着您知道一个且唯一的 "msg" 值。这意味着函数依赖 time->msg 对这种关系成立。
相比之下,函数依赖性 "to"->"msg" 在此关系中不成立,因为知道值 "joe" 意味着我知道 two[= "msg" 的 25=] 值:'hello' 和 'im doin great'。它不适用于这种关系,所以我们说 "to"->"msg" 不是这种关系中的函数依赖。
出于完全相同的原因,"to, from"->"msg" 在此关系中不成立。所以 "to, from"->"msg" 不是这个关系中的函数依赖。
Also, I want to add a message id column. Is that good practice?
添加不在原始关系中的属性与数据压缩有关,与规范化无关。规范化从不引入新的属性或新的依赖关系。添加 "msg_id" 作为属性会引入两个新的函数依赖关系(取决于 "msg_id" 的含义):"msg_id"->"msg" 和 "time"->"msg_id".
因此,添加 "msg_id" 属性有时可能是个好主意(比您想象的要少),但这与规范化无关。假设您打算将 "msg_id, msg" 投影为新的 table 并从原始关系中删除 "msg",您还需要将 "msg" 声明为唯一的。
更新:关系模型可能无法按我希望的方式工作,请参阅:Database normalization for facebook-like messaging system
NoSQL 时间到了!
我无法将数据库放入 2nf。为此,您必须先确定所有函数依赖性,然后才能确定属性是质数还是非质数。
看这里:
--------------------------------------------
to | from | msg | time
--------|--------|----------------|---------
joe | jim | hello | 1
jim | joe | hey | 2
jim | joe | how are you | 3
victor | bryce | i love carrots | 4
joe | jim | im doin great | 5
bryce | jim | hello | 6
注意:时间将是唯一的。将被交易
是否 time->message despite
time1->"hello"
time6->"hello"
因为我听说只要有消息的唯一实例,就可以了。然而,我对此感到困惑。
此外,我想添加一个消息 ID 列。这是好的做法吗?
函数依赖性询问,"If I know one value for 'X', do I know one and only one value for 'Y'?",其中 'X' 和 'Y' 是关系的属性。 ('X' 和 'Y' 指的是 组 属性。)
如果属性 "time" 的值实际上是唯一的,那么知道 "time" 的一个值意味着您知道一个且唯一的 "msg" 值。这意味着函数依赖 time->msg 对这种关系成立。
相比之下,函数依赖性 "to"->"msg" 在此关系中不成立,因为知道值 "joe" 意味着我知道 two[= "msg" 的 25=] 值:'hello' 和 'im doin great'。它不适用于这种关系,所以我们说 "to"->"msg" 不是这种关系中的函数依赖。
出于完全相同的原因,"to, from"->"msg" 在此关系中不成立。所以 "to, from"->"msg" 不是这个关系中的函数依赖。
Also, I want to add a message id column. Is that good practice?
添加不在原始关系中的属性与数据压缩有关,与规范化无关。规范化从不引入新的属性或新的依赖关系。添加 "msg_id" 作为属性会引入两个新的函数依赖关系(取决于 "msg_id" 的含义):"msg_id"->"msg" 和 "time"->"msg_id".
因此,添加 "msg_id" 属性有时可能是个好主意(比您想象的要少),但这与规范化无关。假设您打算将 "msg_id, msg" 投影为新的 table 并从原始关系中删除 "msg",您还需要将 "msg" 声明为唯一的。