0

我有一个用户 ruby​​ on rails 模型,带有用户名、密码字段。我想在该图像上添加类似的编辑配置文件表单

图片链接

任何字段都应该有一个额外的共享框(布尔值),或者用户是否希望根据字段共享他的个人资料信息。

组织这种模型的最佳方式是什么?理想情况下,这应该是类似表的键值对,用于单独存储每个字段信息。就像是

关键、价值、份额?

Firstname, John, true
Lastname, Smith, true
Gender, male, false
Brithday, 19.01.1985, true

组织这种模型结构的最佳方法是什么。

4

2 回答 2

0

您的问题看起来像:“我应该使用 EAV 吗?”

您应该在这里寻找有关此主题的良好论坛讨论: http ://www.dbforums.com/database-concepts-design/1619660-otlt-eav-design-why-do-people-hate.html

大多数时候我猜答案是否定的(只是谷歌“SQL反模式EAV”到一堆关于这个主题的资源)。为什么不使用包含所有字段的普通表?有这么多属性吗?如果字段不是常量(以避免 EAV),您还可以将数据存储在 Blob 列中。

于 2013-10-02T07:11:48.413 回答
0

EAV结构的一些问题:

  • 您将失去使用 SQL 数据类型的能力(每个值都必须是 TEXT)。

  • 您将失去使用 UNIQUE 或 FOREIGN KEY 甚至 NOT NULL 等 SQL 约束的能力。

  • 您将失去将一行数据作为一行进行查询的能力,而无需编写一个庞大的查询来执行与您的属性一样多次的自联接。

  • 每次使用时都存储“键”或属性名称是非常浪费的。

够了吗?

阅读这篇关于一家公司几乎关闭的文章,因为有人认为这将是一种“通用”的数据存储方式:Bad CarRMa

我在 StackOverflow 上讨论了很多EAV FAIL和我的书SQL Antipatterns: Avoiding the Pitfalls of Database Programming中。

关系数据库更好的解决方案是为每个属性定义一列。

  • 您可以为列赋予有意义的名称,并且这会作为元数据存储一次,而不是存储在每一行上。

  • 您可以使用适当的 SQL 数据类型来帮助实施适当的数据验证。

  • 您还可以使用 SQL 约束来帮助数据完整性。否则你必须通过在你的应用程序中编写大量代码来实现数据规则,我希望你有更好的事情要做。

于 2013-10-10T22:24:14.393 回答