【问题标题】:Represent three way database functional dependency in 5th normal form以第 5 范式表示三路数据库函数依赖
【发布时间】:2010-10-24 17:25:40
【问题描述】:

是否可以用第五范式表示非键列的复合键函数依赖?

我有三张桌子,

users
----------
id
name

events
----------
id
name

events_users
---------------------------
id
user_id
event_id
participation_type (ENUM)

据我所知,第五范式需要用自己的小实体来表示表格。所以我猜 events_users 表中的参与类型不能称为第五范式?

谁能给我一个更好的解决方案?

问题是,我一直在使用 CodeIgniter 的 DataMapper 库,其中每个表都需要独立存在,即第 5 范式。

【问题讨论】:

  • 您对“5NF”的描述和使用与5NF是什么不一致。请参考您要满足的条件的文档。

标签: database-design relational-database database-normalization functional-dependencies


【解决方案1】:

据我所知,您提供的示例已经在 Fifth Normal Form 中。

表格中的列太少了,我看不到任何其他方式来排列它们!

据我所知,'participation_type' 没有违反任何 NF 规则,因为没有其他列与其语义相关。

根据评论进行编辑: 也许正如您所建议的,这是与 5NF 无关的 Datamapper/Codeigniter 的其他问题。

如果您无法将字段添加到它生成的 user_events 表中,那么您可能需要抢占它并创建另一个实体,我们将其称为“出席”(或任何在您的模型中有意义的名称)。出勤将具有以下字段:

出勤率 ---------- ID 参与类型(枚举)

然后告诉 Datamapper,Attendance 与 Users 和 Events 相关,它会生成(或要求您生成,或其他)两个链接表:

用户出席 --------------- ID 用户身份 出勤编号 event_attendance ---------------- ID event_id 出勤编号

如果您按照这些思路进行操作,那么您将拥有一个可以添加字段的出勤实体。

免责声明:我对Datamapper一无所知,我只是在字里行间阅读

【讨论】:

  • 是吗?我猜这个问题可能是 Datamapper 库本身的限制。所以问题是,Datamapper 强制数据库设计为 On 5th Normal Form。所以说有 users 表和 events 表,为了表示两个表之间的任何关系,需要存在一个由 CodeIgniter 和 afaik 自动填充的 events_users 表,我不能在 events_users 表中放置额外的字段。
  • 是的,也许 5NF 不是问题
猜你喜欢
  • 2011-01-30
  • 2013-01-25
  • 1970-01-01
  • 2011-05-21
  • 2013-09-27
  • 1970-01-01
  • 2014-07-20
  • 2011-04-15
  • 1970-01-01
相关资源
最近更新 更多