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日,她最喜欢的颜色是红色,她是亚伯拉罕·林肯的第二个表妹
- 用户A 90%相信Susan B.Anthony出生于1820年2月15日;75%的人相信她最喜欢的颜色是蓝色,30%的人相信她是亚伯拉罕林肯的表亲
- 用户B有30%的信心Susan B.Anthony出生于1820年2月12日;60%的人相信她最喜欢的颜色是蓝色,10%的人相信她是亚伯拉罕林肯的表亲
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、姓名不为空、颜色为空、亲属关系为空、生日为空) 每个索赔都有一个来源、人员、用户和详细信息