1

我想记录各种来源对历史人物的看法。IE

  • 维基百科网站说苏珊·B·安东尼出生于 1820 年 2 月 15 日,她最喜欢的颜色是蓝色
  • 《奋斗的世纪》一书中说,苏珊·B·安东尼出生于 1820 年 2 月 12 日,她最喜欢的颜色是红色
  • 《妇女选举权史》一书中说,苏珊·B·安东尼生于 1820 年 2 月 15 日,她最喜欢的颜色是红色,是亚伯拉罕·林肯的第二代堂兄。

我还希望研究人员能够表达他们对这些来源提出的个人主张的信心,例如以百分比表示。IE

  • 用户 A 有 90% 的把握认为苏珊 B.安东尼出生于 1820 年 2 月 15 日;75% 的人相信她最喜欢的颜色是蓝色,30% 的人相信她是亚伯拉罕·林肯的第二表亲
  • 用户 B 有 30% 的把握认为苏珊 B.安东尼出生于 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 所说的矛盾观察相同的问题。

4

4 回答 4

3

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

claim_fact(source_id, person_id, user_id, details_id, weight)

source_dimension(id, name)

Person_dimension(id, name)

用户维度(ID,名称)

details_dimension(id, name NOT NULL, color NULLABLE, 亲属关系 NULLABLE, 生日 NULLABLE)

每个声明都会有来源、人员、用户和详细信息。详细信息的 NAME 值将是诸如“亲属关系”、“生日”之类的值。

请记住,这是一个 OLAP 模式(而不是 OLTP 结构),因此它没有完全规范化。这样做的好处超过了由于冗余而可能遇到的任何问题,因为对星型模式的查询已通过为数据仓库配置的 DBMS 进行了高度优化。

推荐读物:数据仓库工具包(Kimball 等人)

于 2009-05-20T21:30:52.850 回答
2

RDF非常适合这一点。它通常被描述为元数据的格式;但实际上它是三元组上“断言”的图形模型。

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

还有一些机制可以引用三元组,所以你可以说一些关于断言的内容,比如它的起源(谁说的?),或者断言的时间(他什么时候说的?),或者你相信它的程度是真的,等等。

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

于 2009-05-20T21:21:38.173 回答
1

我认为您要使用的是“财产袋”。不是对您要描述的每种单独的事实类型进行建模,而是希望有一个包含 ID、“键”(在本例中是指称的信息(例如“亲属关系”))和“值”的表”(在这种情况下,指称的价值(例如“Abraham Lincoln)”)。然后您希望有第二张表格将您的索赔人与该表格联系起来,以及他们对该信息的信心水平。该表格将只需拥有来源的 ID、属性的 ID 以及来源​​对信息的置信度。这样,您可以拥有包含大量或少量信息的来源;您还可以对不同的来源进行建模对给定属性具有不同程度的置信度;

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

于 2009-05-20T21:22:42.833 回答
0

这感觉就像它很快变得非常复杂

你不是在开玩笑。看看关于本体知识表示的工作。

于 2009-05-20T21:22:07.470 回答