我希望在表格中保存一些有关数据的语义信息。如何在MySQL中保存此信息,以便我可以访问数据并使用语义数据搜索文章。
例如,我有一篇关于Apple和Microsoft的文章。语义数据就像是
人:史蒂夫乔布斯
人:史蒂夫鲍尔默
公司:Apple
公司:微软
我想保存信息而不会丢失史蒂夫乔布斯和史蒂夫鲍尔默是人,而苹果和微软是公司的信息。我也想搜索有关史蒂夫乔布斯/苹果的文章。
人和公司不是唯一可能的类型,因此添加新字段是不可行的。由于要保存数据类型,我不能直接使用FullText字段类型。
更新 - 这是我正在考虑的两个选项。
-
--------------------------------
| id | subject | object |
--------------------------------
| 1 | Person | Steve Ballmer |
| 1 | Person | Steve Jobs |
| 1 | Company | Microsoft |
| 1 | Company | Apple |
| 2 | Person | Obama |
| 2 | Country | US |
--------------------------------
答案 0 :(得分:2)
你正在努力解决一个棘手而有趣的问题!您可以通过查看都柏林核心元数据计划获得一些有趣的想法。
http://dublincore.org/metadata-basics/
为简单起见,请将您的元数据项视为一个表中的所有内容。
e.g。
Ballmer employed-by Microsoft
Ballmer is-a Person
Microsoft is-a Organization
Microsoft run-by Ballmer
SoftImage acquired-by Microsoft
SoftImage is-a Organization
Joel Spolsky is-a Person
Joel Spolsky formerly-employed-by Microsoft
Spolsky, Joel dreamed-up StackOverflow
StackOverflow is-a Website
Socrates is-a Person
Socrates died-on (some date)
这里的诀窍是,你的第一和第三列值中的一些(但不是全部)需要是任意文本并且作为第一列和第三列的索引。然后,如果你想弄清楚你的数据库在Spolsky上有什么,你可以全文搜索你的第一和第三列的名字。你会得到一堆三胞胎。你找到的价值会告诉你很多。如果您想了解更多信息,可以再次搜索。
要解决此问题,您可能需要有五列,如下所示:
Full text subject (whatever your user puts in)
Canonical subject (what your user puts in, massaged into a standard form)
Relation (is-a etc)
Full text object
Canonical object
您的主题和客体的规范形式的重点是允许这样的查询工作,即使您的用户在两个不同的地方放入“Joel Spolsky”和“Spolsky,Joel”,即使他们的意思是同一个人
SELECT *
FROM relationships a
JOIN relationships b (ON a.canonical_object = b.canonical_subject)
WHERE MATCH (subject,object) AGAINST ('Spolsky')
答案 1 :(得分:2)
您可能希望通过制作2个表来规范化数据表。
----------------
| id | subject |
----------------
| 1 | Person |
| 2 | Company |
| 3 | Country |
----------------
-----------------------------------
| id | subject-id | object |
-----------------------------------
| 1 | 1 | Steve Ballmer |
| 2 | 1 | Steve Jobs |
| 3 | 2 | Microsoft |
| 4 | 2 | Apple |
| 5 | 1 | Obama |
| 6 | 3 | US |
-----------------------------------
这使您可以更轻松地查看已定义的所有不同主题类型。