Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 关系数据库中的原子事实建模_Sql_Database_Database Design_Data Modeling_Relational - Fatal编程技术网

Sql 关系数据库中的原子事实建模

Sql 关系数据库中的原子事实建模,sql,database,database-design,data-modeling,relational,Sql,Database,Database Design,Data Modeling,Relational,我想记录下各种来源对一个历史人物的看法 维基百科网站说苏珊·安东尼生于1820年2月15日,她最喜欢的颜色是蓝色 《奋斗的世纪》一书说苏珊·安东尼生于1820年2月12日,她最喜欢的颜色是红色 《妇女选举权历史》一书说,苏珊·安东尼出生于1820年2月15日,她最喜欢的颜色是红色,她是亚伯拉罕·林肯的第二个表妹 我还希望研究人员能够表达他们的信心,例如,对这些资料来源所作的个人声明,以百分比表示。i、 e 用户A 90%相信Susan B.Anthony出生于1820年2月15日;75%的

我想记录下各种来源对一个历史人物的看法

  • 维基百科网站说苏珊·安东尼生于1820年2月15日,她最喜欢的颜色是蓝色
  • 《奋斗的世纪》一书说苏珊·安东尼生于1820年2月12日,她最喜欢的颜色是红色
  • 《妇女选举权历史》一书说,苏珊·安东尼出生于1820年2月15日,她最喜欢的颜色是红色,她是亚伯拉罕·林肯的第二个表妹
我还希望研究人员能够表达他们的信心,例如,对这些资料来源所作的个人声明,以百分比表示。i、 e

  • 用户A 90%相信Susan B.Anthony出生于1820年2月15日;75%的人相信她最喜欢的颜色是蓝色,30%的人相信她是亚伯拉罕林肯的表亲
  • 用户B有30%的信心Susan B.Anthony出生于1820年2月12日;60%的人相信她最喜欢的颜色是蓝色,10%的人相信她是亚伯拉罕林肯的表亲
然后,我希望每个用户都能看到Susan B.Anthony的照片,显示她的生日、最喜欢的颜色以及用户认为最有可能是真实的关系

我还想使用关系数据库数据存储,我认为这样做的方式是为我希望用户能够表达其信心的每种原子事实类型创建一个单独的表。所以在这个例子中,总共有八个表,三个单独的表代表三个单独的原子事实

Source(id)
Person(id)

Claim(claim_id, source, FOREIGN KEY(source) REFERENCES Source(id) )
Alleged_birth_date(claim_id, person, birth_date, FOREIGN KEY(claim_id) REFERENCES Claim(id), FOREIGN KEY(person) REFERENCES person(id))
Alleged_favorite_color(claim_id, person, color, FOREIGN KEY(claim_id) REFERENCES Claim(id), FOREIGN KEY(person) REFERENCES person(id)) 
Alleged_kinship(claim_id, person, relationship type, kin, FOREIGN KEY(claim_id) REFERENCES Claim(id), FOREIGN KEY(person) REFERENCES Person(id))

User(id)
Confidence_in_claim(user, claim, confidence, FOREIGN KEY(user) REFERENCES User(id), FOREIGN KEY(claim) REFERENCES claim(id))
这感觉它变得非常复杂,非常快,因为实际上需要记录很多类型的原子事实。有更好的方法吗

我认为,这与Martin Fowler所说的是同一个问题。

非常适合这个问题。它通常被描述为元数据的一种格式;但事实上,它是一个关于三元组的“断言”的图形模型

整个“语义网”的想法是在RDF上发布大量事实,搜索引擎将是推理引擎,可以遍历统一的图来查找关系

还有一些机制可以引用一个三元组,所以你可以说一些关于断言的事情,比如它的起源(谁说的?),或者什么时候被断言(他什么时候说的?),或者你认为它是真的,等等

作为一个很好的例子,整个“常识知识库”都可以在RDF中查询。

就是一个很好的例子。它通常被描述为元数据的一种格式;但事实上,它是一个关于三元组的“断言”的图形模型

整个“语义网”的想法是在RDF上发布大量事实,搜索引擎将是推理引擎,可以遍历统一的图来查找关系

还有一些机制可以引用一个三元组,所以你可以说一些关于断言的事情,比如它的起源(谁说的?),或者什么时候被断言(他什么时候说的?),或者你认为它是真的,等等

作为一个大例子,整个“常识知识库”都可以在RDF中查询

这感觉很复杂,很快

你没开玩笑吧。看一下和上的工作

这感觉很复杂,很快


你没开玩笑吧。请看一下和上的工作。

我认为您想要使用的是一个“财产袋”。您希望有一个包含ID、一个“键”(在本例中为指称的信息(如“亲属关系”))和一个“值”(在本例中为指称的值(如“亚伯拉罕·林肯”))的表,而不是为您想要描述的每种类型的事实建模。然后,您需要第二个表,将您的索赔人与该表联系起来,以及他们对该信息的信任程度。该表将只包含来源ID、财产ID以及来源对该信息的信任度。这样,您就可以拥有一个来源,该来源具有大量或大量信息几乎没有信息;您还可以对给定属性中具有不同置信度的不同来源进行建模;您可以存储多少种不同类型的信息也没有限制


这是一个非常标准的解决方案,适用于您需要交叉引用大量可选信息的情况。

我认为您需要使用的是一个“属性包”。您不需要对要描述的每种类型的事实进行建模,而是需要一个包含ID和“键”的表(在本案中,指指称的信息(如“亲属关系”)和“价值”(在本案中,指指称的价值(如“亚伯拉罕·林肯))。然后,您需要第二个表,将您的索赔人与该表联系起来,以及他们对该信息的信任程度。该表将只包含来源ID、财产ID以及来源对该信息的信任度。这样,您就可以拥有一个来源,该来源具有大量或大量信息几乎没有信息;您还可以对给定属性中具有不同置信度的不同来源进行建模;您可以存储多少种不同类型的信息也没有限制


这是一个非常标准的解决方案,适用于您需要交叉引用大量可选信息的情况。

您应该尝试以“事实”表和几个“维度”表为中心的星型模式模型。这是一个经过充分探索的模型,并且有许多数据库优化

索赔事实(来源id、人员id、用户id、详细信息id、重量)

源维度(id、名称)

人员维度(id、姓名)

用户维度(id、名称)

详细信息\u维度(id、姓名不为空、颜色为空、亲属关系为空、生日为空)

每个索赔都有一个来源、人员、用户和详细信息