这是什么样的数据模型

时间:2016-11-02 11:19:05

标签: database-design entity relational-database relationship

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

简化示例 enter image description here

提供"关系的通用函数的元代码"实体之间看起来像

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模型,也不认为这样做会有意义。

问题:

  • 这种方法/概念的文献中是否有技术术语?

  • 是否有一个理论概念描述了这种存储数据的方式广告创建" functional / adhoc / indirect"依赖呢? (我可能不想称之为"关系")

  • 最好用"设计模式来描述上述内容"?

1 个答案:

答案 0 :(得分:1)

它是EAV,Entity-Attribute-Value的变体,具有从实际DBMS表到它们所代表的概念表的更复杂映射。遗憾的是,encoding of the tables and metadata tables of a DBMS不提供或使用正在执行的实际DBMS的元数据和功能。 (观察如何在函数中封装EAV转换是做错事的正确方法。)而且它是anti-pattern,其原因与EAV完全相同。