【问题标题】:What kind of data model is this这是什么数据模型
【发布时间】:2017-03-15 16:30:41
【问题描述】:

我查看了一个“数据库应用程序”,发现它由包含名称-值对的平面表组成。关系不作为 DDL 存在,而是通过使用帮助表提供“指针”到提供参考信息的其他表和列名。这些关系在运行时通过泛型函数解析。

简化示例

提供实体之间“关系”的通用函数的元代码如下所示

FUNCTION Translate (Element)

    LOCAL c, t, r

    SELECT Table, Column
    INTO   t, c
    FROM   Translator
    WHERE  Item = $Element

    SELECT $c
    INTO   $r
    FROM   $t
    WHERE  Name = $Element

    RETURN $r

END FUNCTION

在上面的例子中,将被解析为

Translate "Ele1" ==> "Bar"
Translate "Ele2" ==> NULL
Translate "Ele3" ==> "Bar2"

这些“关系”当然是不完整的,因为并非表“目录”的所有“值”都被引用,另一方面,可以轻松地将行添加到目录中,并通过创建新的引用表并将其链接到应用程序中" 将表名和列名添加到“Translator”表中。不用说,我无法为此应用程序开发 ER 模型,我认为这根本没有意义。

问题:

  • 文献中有关于这种方法/概念的技术术语吗?

  • 是否存在描述这种存储数据和创建“功能/即席/间接”依赖关系的方式的理论概念? (我可能不想称之为“关系”)

  • 用“设计模式”来描述上述内容会更好吗?

【问题讨论】:

  • 我不知道这种模式的名称,但我会指出它的一个特点。存储在用户表中的值是数据和元数据的混合体。在传统的关系模型中,DDL 定义数据,DDL 产生的元数据全部存储在系统表中,即数据字典中。用户表不包含元数据。
  • 一些设计师喜欢这种东西的原因很简单。它允许即时对数据模型进行一些更改,而无需执行任何 DDL。这允许应用程序程序员在不通过 DBA 运行它们的情况下进行更改,并减慢进程。缺点是它会导致未记录的数据。
  • 上述进一步的研究结果有时被描述为“多态关联,有时被归为反模式”

标签: database-design entity relational-database relationship


【解决方案1】:

它是EAV 实体-属性-值的变体,具有从实际 DBMS 表到它们所代表的概念表的更复杂的映射。这是一个encoding of the tables and metadata tables of a DBMS,不幸的是它没有提供或使用正在执行的实际 DBMS 的元数据和功能。 (观察如何在函数中封装 EAV 翻译是做错事的正确方法。)它是 anti-pattern,原因与 EAV 完全相同。

【讨论】:

    猜你喜欢
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 2020-01-19
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    相关资源
    最近更新 更多