使用schema.org作为合理的数据库架构?

卢卡斯·斯蒂芬奴(Lucas Stephanou)

在一个针对新闻/内容平台的项目中,我们的团队正在讨论使用schema.org词汇表作为直接资源来对数据库和域逻辑进行建模。

示例:NewsArticle实体在schema.org上具有以下层次结构:

Thing > CreativeWork > Article > NewsArticle 

我们的域对每个域都有一个类,并使用扩展来构成层次结构。将相同的模式放置在数据库上,这意味着我们将创建四个表(或者可能使用文档数据库)。

每个级别中的字段都将放在“正确的”类/表上,这意味着NewsArticle实例将需要获取所有以前的层次结构内容以构成其完整表示形式。

甚至认为schema.org将是帮助我们进行域模型设计,如何命名字段等的良好参考,直接匹配似乎很幼稚甚至有害,没有明显的好处来补偿应有的投资和膨胀。

您看到这个附属程序有好处吗?你看到问题了吗?

ps:这与使用schema.org和相关词汇表(rdf / a,rNews)标记网页(我鼓励)无关。

FrobberOfBits

tl; dr,不要将这些模式作为数据库模型或逻辑的基础,而是要保持与您所做的工作之间的清晰映射,以及这些模式对您而言很重要。

(以下为长版)

在编写复杂的Web应用程序时,您将无法避免需要多个模型。可能有一个RDBMS物理模型,可能有一个OOP“对象模型”,并且可能会有一个Web前端数据模型(无论是JSON还是使用schema.org的东西在HTML DOM中)。这些模型将采用不同的形式主义,并且具有不同的优点和缺点。

在RDBMS和对象层次结构之间,无论您做什么,都会遇到对象关系阻抗不匹配的情况。这是一个非常困难的问题,为此存在各种MVC框架和数据绑定工具来帮助您将OOP对象与数据库结构配对。

现在,如果您直接在数据库中使用schema.org的结构,它将出现好像这将使您的生活更轻松,因为每个地方的模型都是相同的。但是由于阻抗不匹配,根本不会。当您在数据库中执行此操作时,首先要定义主键/外键关系,以在schema.org定义的实体之间进行访问(由于它不是关系模型,因此不提供它们)。那仅仅是从他们的模型向本质上必须具有关系的事物过渡的开始。在对象模型中,将没有PK / FK,而将具有对象引用。从物理模型开始将使重用其他工具包变得更加困难。最后,如果没有大量额外的代码,您的自定义对象堆栈将不会轻易地序列化为HTML中的schema.org的结构。

不同的形式主义要求不同的模型。理解这些之间的映射(以及数据需求可追溯性)确实很重要,但是我认为您应该放弃这样的想法,即按原样重用那些模型,因为这可能不会发生。阻抗不匹配是您无法消除的。您只能根据自己的最佳方式做出明智的决定,以应对/管理这些决定。

随意窃取他们的命名约定,结构和思想,但我会放弃逐字重用。此外,他们的模型最适合您的查询负载的机会是什么?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Terraform创建数据库架构

来自分类Dev

使用memcached作为内存数据库?

来自分类Dev

使用OOPS设计数据库表架构?

来自分类Dev

使用Datagrip的整个数据库的脚本架构

来自分类Dev

更改Spring Boot使用的数据库架构

来自分类Dev

使用代码从架构创建新数据库

来自分类Dev

如何在PHP中使用数据库架构?

来自分类Dev

使用MySQL Workbench修改数据库架构

来自分类Dev

使用Spring JDBC创建多个数据库或架构

来自分类Dev

Android使用旧架构创建数据库

来自分类Dev

如何使用NHibernate更新数据库架构

来自分类Dev

使用企业库数据访问块获取数据库架构

来自分类Dev

使用DashDB作为数据库(而不是数据仓库)

来自分类Dev

使用php从数据库获取数据作为范围

来自分类Dev

使用DashDB作为数据库(而不是数据仓库)

来自分类Dev

如何在/作为phonegap数据库使用android数据库

来自分类Dev

使用myBatis从数据库中将blob作为字节[]获取

来自分类Dev

如何使用文本文件作为数据库?

来自分类Dev

在Django中使用弹性搜索作为数据库

来自分类Dev

在Ring网站中使用Atom作为内存数据库

来自分类Dev

使用javaScript从WebSQL数据库返回多行作为数组

来自分类Dev

使用Android数据库作为待办事项

来自分类Dev

C-使用文件作为数据库

来自分类Dev

使用sysdate作为参数插入数据库

来自分类Dev

使用Laravel从数据库返回嵌套Json作为数组

来自分类Dev

使用sqlite作为角度v7的数据库

来自分类Dev

保持简单或使用数据库作为照相馆?

来自分类Dev

使用数据库中的图像作为工具提示

来自分类Dev

使用CSV文件作为数据库的效率