更新:关系模型可能无法按我希望的方式工作,请参阅: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
注意:时间将是唯一的。它将被处理。
时间 - >消息尽管
time1->"hello"
time6->"hello"
因为只要有唯一的消息实例,我就听说过,这很好。但是,我对此感到困惑。
另外,我想添加一个消息ID列。那是好事吗?
答案 0 :(得分:1)
功能依赖性要求,"如果我知道' X'的一个值,我是否知道' Y'?"中的一个且只有一个值,在哪里' X'和' Y'是关系的属性。 (' X'和' Y'参考属性的集。)
如果属性的值"时间"实际上是唯一的,然后知道"时间"意味着你知道" msg"中只有一个值。这意味着该关系的函数依赖时间 - > msg成立。
相反,功能依赖" - " - >" msg"不知道这个关系,因为知道价值"乔"意味着我知道" msg":' hello'的两个值,并且' im doin great'。它并不适用于这种关系,所以我们说" - " - >" msg"在这种关系中不是功能依赖。
出于完全相同的原因,"来自" - >" msg"在这种关系中并不成立。所以"来自" - >" msg"在这种关系中不是功能依赖。
另外,我想添加一个消息ID列。那是好事吗?
添加不在原始关系中的属性与数据压缩有关,而与规范化无关。规范化从不引入新属性或新依赖项。添加" msg_id"作为一个属性引入了两个新的功能依赖(取决于" msg_id"意味着):" msg_id" - >" msg"和"时间&# 34; - >" MSG_ID"
。所以添加" msg_id"属性有时可能是一个好主意(比你想象的少),但它与规范化无关。假设您打算投射" msg_id,msg"作为一个新表并删除" msg"从原始关系来看,你需要声明" msg"同样独特。