实体属性值 (EAV) 的替代方案?

2023-12-29

我们的数据库是基于EAV(实体-属性-值)模型设计的。那些使用过 EAV 模型的人都知道为了灵活性而带来的所有废话。

我问我的客户为什么使用EAV模型(灵活性),他们的回答是:他们的实体随着时间的推移而改变。因此,今天他们可能有一个包含一些属性的表,但一个月后,可能会添加一些新属性,或者可能会重命名现有属性。他们需要生成报告以及时返回到任何阶段,并根据该阶段实体的形状查询数据。

我知道这对于传统的关系模型来说是不可行的,但我个人认为 EAV 是反模式。是否有任何其他替代模型使我们能够捕获实体和实例变化的时间维度?

干杯, 莫什


EAV 是否​​忠实地完成是有区别的; 5NF 由熟练的人或无知的人完成。

第六范式是不可约范式(不可能进一步标准化)。它消除了许多常见问题,例如空问题,并提供了识别缺失值的终极方法。它是学术和技术上强大的 NF。没有产品支持它,并且不常用。为了正确且一致地实施,需要实施元数据目录。当然,导航所需的 SQL 变得更加麻烦(SQL 重新连接已经很麻烦),但是通过从元数据自动生成 SQL 可以轻松克服这一点。

EAV 是 6NF 的部分集或子集。问题是,通常这样做是有目的的(允许添加列而不必进行 DDL 更改),并且由不了解 6NF 且不实现元数据的人完成。关键是,6NF 和 EAV 作为原则和概念提供了实质性的好处,并且性能得到提高;但通常情况下,它没有得到适当的实施,其好处也没有实现。相当多的 EAV 实施都是灾难,不是因为 EAV 不好,而是因为实施很差。

例如。有些人认为从 6NF/EAV 数据库构造 3NF 行所需的 SQL 很复杂:不,它很麻烦但并不复杂。更重要的是,可以提供普通的SQL VIEW,以便所有用户和报表工具只能看到直接的3NF VIEW,而6NF/EAV问题对他们来说是透明的。最后,所需的SQL可以自动化,因此许多人承受的劳动力成本是完全不必要的。

所以答案确实是,第六范式作为 EAV 之父,也是一种更纯粹的形式,是它的替代品。警告是,确保正确完成。我有一个大型 6NF 数据库,它没有遇到人们发布的任何问题,它的性能非常好,客户非常满意(没有进一步的工作是功能完全满意的标志)。

我已经发布了另一个问题的非常详细的答案,该答案也适用于您的问题,您可能对此感兴趣。

其他 EAV 问题 https://stackoverflow.com/questions/4011956/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体属性值 (EAV) 的替代方案? 的相关文章

  • Spring RESTful控制器方法改进建议

    我是 Spring REST 和 Hibernate 的新手 也就是说 我尝试组合一个企业级控制器方法 我计划将其用作未来开发的模式 您认为可以通过哪些方法来改进 我确信有很多 RequestMapping value user metho
  • 从脚本内更改自动热键托盘图标

    如何从 Autohotkey 脚本中将托盘图标更改为 my ico 例如 当脚本暂停时 为此 我在托盘菜单中提出了自己的 暂停脚本 菜单项 SingleInstance ignore Menu Tray Tip AutoCase 0 11
  • IE9-11 检测变换样式:preserve-3d

    我为一个项目制作了一个 3d 类型的菜单 自然 IE 会引起问题 因为 IE10 即使 3d 变换工作 也不支持变换样式 preserve 3d 我尝试了解决方法 通过对 3d 菜单容器的每个子元素应用变换 但至少可以说 动画看起来很糟糕
  • 文本溢出:省略号显示不同的字符

    我这里遇到了一些 CSS 问题 看这张图片 https www flickr com photos 125543025 N07 saved 1 在此图像中 我为文本 INTENSE TRAINING 添加了 CSS 样式 sample st
  • 我们什么时候应该在 Django 中使用“db_index=True”?

    当我们应该定义db index True在模型字段上 我正在尝试优化应用程序并且我想了解更多信息db index 什么情况下我们应该使用它 文档说使用db index True在模型字段上用于加速查找 但在存储和内存方面略有缺点 我们应该使
  • 如何制作过期/签名视频嵌入网址

    我是新来的 正在学习网络开发等等 我只知道如何将我的视频嵌入网站中 任何菜鸟都可以轻松获得源代码 他们也可以嵌入它 但在许多网站中 视频 src 均使用重定向器链接进行编码 例如 它会在一段时间后过期 在本例中是一天 我了解到这是一个签名网
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959
  • Android Espresso 单击按钮时出现错误

    我正在尝试使用 espresso 框架为 Android 应用程序编写一些 UI 测试 现在我只是检查启动屏幕上是否存在所有元素 然后尝试单击登录按钮 单击按钮时 测试由于错误而失败 我似乎无法理解为什么会发生这种情况 我的测试代码是 Ru
  • Python 中的字符串slugification

    我正在寻找 slugify 字符串的最佳方法 蛞蝓 是什么 https stackoverflow com questions 427102 in django what is a slug 我当前的解决方案基于这个食谱 http code
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行
  • 一些基本的 PHP 问题 [已关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我只是有一些基本的 php 问题来加深我对学习的理解 但我找不到简单的答案 我有一个 php ajax 应用程序 它生成 mysql
  • Azure Functions 计时器触发器线程安全

    我想知道是否有人知道如果您在 Azure 函数上设置了 Cron 设置 如果其任务执行时间超过 5 分钟 则每 5 分钟运行一次 会发生什么情况 它备份吗 或者我应该实现一个锁定功能 以防止某些东西 例如在循环中 处理先前调用已经处理的数据
  • svn 强制迁移

    我正在考虑将我们的 svn 代码库迁移到 perforce 看看谷歌搜索结果 我确实找到了两个具有相同功能的工具 P4转换ftp ftp perforce com pub perforce tools p4convert docs inde
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于
  • React 错误:目标容器不是 DOM 元素

    我刚刚开始使用 React 所以这可能是一个非常简单的错误 但我们开始吧 我的html代码非常简单 load staticfiles
  • PLS-00103:遇到符号“;”当预期出现以下情况之一时:

    我正在尝试插入用户安全问题的答案 以用于密码重置功能 Ellucian 横幅 v8 提供了一个用于运行此 API 的 API 我对他们的 API 非常陌生 从下面的错误消息来看 我还远远没有正确运行它 任何帮助表示赞赏 我尝试在 Oracl
  • 自定义字符串查询操作的 Linq to NHibernate 可扩展性?

    我希望能够在 NHibernate Linq 表达式中使用自定义字符串查询 举例来说 这只是一个例子 我希望能够选择包含属性的实体 该属性是特定字符串的字谜 var myEntities EntityRepository AllEntiti
  • 计算包含字母/数字的行数

    我想要实现的目标很简单 但是解释起来有点困难 我不知道在 postgres 中这是否真的可能 我处于相当基础的水平 SELECT FROM WHERE LEFT JOIN ON HAVING 等等基本的东西 我正在尝试计算包含特定字母 数字
  • 如何使用 dql 从数据表中获取唯一值?

    我有一个表 其中有一列存储了各种值 我想使用 dql 从该表中检索唯一值 Doctrine Query create gt select rec school gt from Records rec gt where rec city ci

随机推荐

  • UITableView 的第一行在顶部栏下被截断

    我有一个UITabBarController有两个UITableViews 全部都是在故事板中创建的 问题是 在第二个表视图中 表的前几行位于顶栏下方 第一个表视图不会发生这种情况 即使我更改视图的顺序 第一个视图将完美工作 第二个视图将呈
  • 派生类构造函数在 python 中如何工作?

    我有以下基类 class NeuralNetworkBase def init self numberOfInputs numberOfHiddenNeurons numberOfOutputs self inputLayer numpy
  • R:使用 spplot 地图中的自定义调色板

    我正在努力使用在多个多边形上引入自定义调色板spplot来自sp包裹 我正在绘制几个字段并希望显示我的评级 其值可以为 0 1 2 4 或 5 我需要为此使用自定义颜色 我尝试的是 spplot Map zcol Rating col re
  • 仅在现有 iOS 应用程序中对某些视图使用 React Native

    是否可以仅对项目中的一个视图使用 React Native 我已经成功为特定的 iOS 应用程序屏幕添加了 React 视图 使用 与现有 iOS 项目集成 文档中的说明 但我不知道如何从该屏幕获取数据并调用其他 objective c 代
  • VB.Net Xml 反序列化为类

    我在尝试将一些 XML 反序列化到我创建的类中时遇到了一些问题 我得到的错误是 There is an error in XML document 1 2 at System Xml Serialization XmlSerializer
  • MongoDB索引/RAM关系

    我即将在一个新项目中采用 MongoDB 我选择它是为了灵活性 而不是可扩展性 因此将在一台机器上运行它 从文档和网络帖子中我一直读到所有索引都在 RAM 中 这对我来说没有意义 因为我的索引很容易大于可用 RAM 的量 谁能分享一些关于索
  • 如何使用java获取xml节点的属性值

    我有一个 xml 如下所示
  • 我怎样才能让 Modelsim 警告我有关“X”信号的信息?

    我正在使用 Modelsim 进行大型设计 我已经了解了 modelsim 模拟的工作方式 我想知道 是否有一种方法可以在 modelsim 在仿真阶段评估信号并发现它是红色信号 即 X 时向我发出警告 要知道 不可能列出设计的所有信号并一
  • Rails 4:SQLException:没有这样的表:

    我在 Rails4 中运行以下命令 bundle exec rake db migrate 201405270646 AddAttachmentImageToPins 迁移 change table pins 耙子中止 StandardEr
  • 通过扬声器的 AVAudioPlayer

    我得到以下代码 id init if self super init UInt32 sessionCategory kAudioSessionCategory MediaPlayback AudioSessionSetProperty kA
  • 选中复选框时动态更改引导程序进度条值

    我正在尝试制作一个带有引导进度条的动态清单 这是我的标记代码 div class progress progress striped active div class progress bar div div div class row t
  • 如何在TF2.0中创建具有自定义渐变的keras层?

    由于在 TensorFlow 2 0 中 他们计划统一 keras 下的所有高级 API 我不太熟悉 并完全删除会话 我想知道 如何创建具有自定义渐变的自定义 keras 层 我见过 相当有限 guide https keras io la
  • UISearchBar 横向宽度错误

    当您以横向模式启动时 我的搜索栏稍微向右拉伸得太远 如果您随后旋转到纵向模式 它仍然有点太宽 但是 如果您以纵向模式开始 然后将其旋转为横向模式 也可以 这是我的代码 sBar UISearchBar alloc initWithFrame
  • 如何使用 php 生成带有肥皂信封和正文标记的 XML

    我无法使用 Soap Envelope 和 Body Tag 生成 XMl 这是代码 rootElement XMLDoc gt createElement AddDetails rootNode XMLDoc gt appendChild
  • 如何对使用 Popen 的函数进行单元测试?

    我正在编写一个包含大量文件操作的程序 一些操作是通过调用来完成的subprocess Popen eg split l 50000 filename gzip d f filename filename 现在我想对程序的功能进行单元测试 但
  • 递归函数的产量

    我正在尝试对给定路径下的所有文件执行某些操作 我不想事先收集所有文件名然后对它们执行某些操作 所以我尝试了以下方法 import os import stat def explore p s list os listdir p for a
  • 如何进行MultiLabel分层抽样?

    我正在处理多标签数据 我想使用分层采样 假设我有 10 个类 我们将它们称为 ABCDEFGHIJ 我有一个包含 10 列的数据框 对应于每个标签 其中包含有关条目的其余信息 我可以在 n entry 10 矩阵中提取这 10 列 我将其称
  • 如何设置不同的列表选择器

    mainListView setOnItemClickListener new AdapterView OnItemClickListener Override public void onItemClick AdapterView
  • 通过 winreg 查找 perfmon 计数器 id

    我有一个通过 winreg h 中公开的 API 收集 Perfmon 计数器值的应用程序 为了收集 Perfmon 计数器值 我必须调用RegQueryValueExW传递我感兴趣的 Perfmon 计数器的 id 为了获取该 ID 我需
  • 实体属性值 (EAV) 的替代方案?

    我们的数据库是基于EAV 实体 属性 值 模型设计的 那些使用过 EAV 模型的人都知道为了灵活性而带来的所有废话 我问我的客户为什么使用EAV模型 灵活性 他们的回答是 他们的实体随着时间的推移而改变 因此 今天他们可能有一个包含一些属性