用户消息关系的功能依赖性

时间:2016-10-02 13:09:49

标签: database unique relation instances functional-dependencies

更新:关系模型可能无法按我希望的方式工作,请参阅: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列。那是好事吗?

1 个答案:

答案 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"同样独特。