2

我们有一个通用的数据库模式,用于系统中的某些表。他们的主要原因是我们正在运行一个多租户数据库,因此并非所有用户都需要相同的字段。但是,我不知道这种模式的“正确”名称是什么。

这是我们的一张表可能看起来的示例:

客户ID | 调查ID | 答案键 | 答案值
------------------------------------------
1 | 1 | 姓名 | 弗雷德
1 | 1 | 名称 | 弗林松
1 | 1 | 电子邮件 | Fred@flintstone.com
1 | 2 | 姓名 | 米奇
1 | 2 | 名称 | 鼠
1 | 2 | 电话 | 555-3343

我们一直称它们为“垂直表”,但我不知道这是否正确。

4

6 回答 6

7

我可能将其称为键值对表

于 2009-10-15T15:34:11.887 回答
5

“这个表模式的正确名称是什么?”

废话。

考虑一下您必须做些什么才能对电子邮件字段的 AnswerValue 施加某种类型约束。

考虑执行可能需要的“完整性”约束所涉及的工作,这些约束要求某些特定的字段集全部出现在某些调查中。

考虑生成单行所涉及的工作(我假设可以预先知道需要包含哪些列,因为您知道您正在为哪个用户工作,因此您知道他对哪些字段感兴趣)。

考虑确保任何用户都无法检索或操作他不感兴趣的任何字段所涉及的努力。

而且我敢肯定还有更多...

于 2009-10-16T11:46:50.983 回答
4

实体-属性-值

于 2009-10-17T19:20:21.787 回答
2

I'd call this a Soft-Coding database design. Sorry to be a bit abrasive, but this kind of design just smells like an anti-pattern.

于 2009-10-15T15:46:45.290 回答
1

偶然看到这个问题后,我在这篇文章中找到了答案

实体-属性-值表

http://www.simple-talk.com/sql/database-administration/five-simple--database-design-errors-you-should-avoid/

于 2009-10-17T21:18:29.007 回答
0

抱歉,但您可能需要考虑规范化您的表格......它可以导致可维护的代码(并且更容易理解)。使用关系表的力量!

于 2009-10-15T16:12:50.313 回答