【发布时间】:2013-02-20 00:00:26
【问题描述】:
我计划使用 EAV 设计开发一个应用程序。我对EAV和第六范式做了很多研究。我什至与工作中的人交谈过,他们说如果你关心自己的理智,请避免这两种方法。我有创建包含一千多列的表的想法,但根据question,这可能不是一个好主意。所以我想做的不是在一个表中创建一千列,而是创建一千个“一列”表。这将使我能够将所有列分成“一列”表。这会给我最大的灵活性,但我担心性能会受到很大影响。
- 我的问题是:使用 50 个内部联接(一个 到一个)?该数据库将为公共网站提供支持。
【问题讨论】:
-
是的,我认为超过七个的查询会被认为太大。一千个一列的表?不。您需要学习如何设计关系数据库。找人来帮助你 - 听起来你有点不知所措。
-
你需要学习如何设计一个关系数据库,如果你准备1列1000个表,你可能没有使用任何relation,那为什么还需要join呢?如果所有元素都是相关的,那么您应该仔细关注关系,这就是关系数据库的用途
-
通过适当的索引加入 50 个表可能很有效,但单列表听起来不像 EAV。
-
@Luke101 您可以按使用 xpath 提取的值进行分组。像这样:sqlfiddle.com/#!12/af4e2/2/0
-
@ypercubeᵀᴹ 大概是“一列”表,它们的意思是 CK 加一列 (6NF) 的表,大概 CK 是 {user, entity}。 6NF 的使用是表示可空列的规范(无 NULL)关系方式。它并不意味着是 EAV,而是意味着代替 EAV。所以事实证明,它是every EAV 设计的(无NULL)关系设计替代方案。 (缺少嵌套关系和元组,允许将用户作为 CK 并将其 dbms/表的状态作为列的表。巧合的是,它也使用 6NF。)
标签: sql sql-server oracle postgresql