代码之家  ›  专栏  ›  技术社区  ›  Benjamin Ortuzar

这个数据库设计我能走多远?

  •  5
  • Benjamin Ortuzar  · 技术社区  · 16 年前

    我想知道创建一个由如下所述的数据库支持的自定义系统的利弊:

    它有6张桌子支持它。

    实体: 让我们说,任何“物理”可以存在,并有详细的存储反对它。 (希尔顿大酒店,Tony Taxi,一个酒吧)

    实体类型: 实体的分组/类型 (酒吧、酒店、餐厅)

    元数据: 描述或属于实体项的任何细节 (IR232PH,foo@bar.com,555-555-555)

    元数据类型: 元数据的分组/类型 (邮政编码、电话、电子邮件、地址)

    实体关系: 将任何实体项分组到另一个实体项的能力 (实体1-实体2,实体3)

    实体关系类型: 实体关系的分组/类型。

    我可以看到这个模型对于相似但属性数量并不总是相同的实体是多么的好。

    对于所描述的实体,使用它的优点/缺点是什么?

    • 艺术家可以在场地上表演(关系类型)。
    • 一个艺术家可以支持(关系型)另一个艺术家

    使用它存储更多标准实体(如系统用户)的优点/缺点是什么?

    • 用户可以拥有自己喜欢的(关系型)场所/艺术家/酒吧等
    • 用户可以参加(关系类型)事件

    你会把它当作有新闻和博客文章在里面吗?

    3 回复  |  直到 16 年前
        1
  •  3
  •   Jonathan Leffler    16 年前

    这是非常主观的,但是在我走上抽象阶梯之前,我宁愿编写我的应用程序,使用DDL修改数据库模式,以匹配它正在使用的实际实体的具体方面,而不是抽象静态模式,以便能够存储关于任何潜在实体的数据。

    在某种程度上,有点好笑,嗯,你的建议已经完成了。。。。它被称为关系数据库。每一个RDBMS都是一个软件工具,旨在能够对任何可能的实体集及其属性进行建模,从而准确地建模这些实体及其之间的关系。

        2
  •  3
  •   Jonathan Leffler    16 年前

    虽然您当然可以将数据存储在这样一个数据模型中,但至少存在两个问题。

    第一个问题是控制数据。当描述“hotel”时,必须定义的属性和元数据集是什么?酒店可以合法地输入哪些元数据类型?与此相关的是“当我从列表中删除酒店时,还需要删除什么?”?当我从列表中删除所有酒店(我再也不想存储有关酒店的信息)时,还需要删除什么?它是可怕的(可怕的?)很容易把各种无关的、未被引用的数据输入数据库。

    第二个问题是检索数据。假设我想知道某个酒店的所有信息?我该如何对此编写查询?实际上,即使插入数据也很困难,但是选择它,如果有的话,也很困难。如果我只想要三个属性,那就很容易了——如果酒店真的拥有所有属性。如果酒店只指定了三项中的两项,那就更难了。但假设这家酒店有30份贡品,这并不多。那就非常困难了。

    你所描述的是一个被称为EAV或 Entity-Attribute-Value 数据模型。人们普遍认为这是一个“坏主意”,因为这是一个普遍的想法。

        3
  •  1
  •   M. K.    16 年前

    你所描述的也被称为三孔。三元组是主宾谓词(Hotel有房间,Joe喜欢HotelX等)。有运行这些东西的机制(TrimPestReor实现)、控制数据(如本体)和查询它们(例如SPARQL语言)。然而,这都是相当前沿的东西,并且已知有可伸缩性问题。然而,结合NoSQL方法(在一个大型文档商店中索引所有酒店等),这是一个值得关注的有趣领域。

    见: http://en.wikipedia.org/wiki/Triplestore .