怎样让计算机理解每个文本的语义?怎样让信息检索更高效?Web 3.0 时代距离我们有多遥远?
问题引入
现有餐馆信息表
如下:
ID | Name | Address | Cuisine | Fruits |
---|---|---|---|---|
1 | 老北京饭店 | 北京王府井大街 | 北京菜 | YES |
2 | 沂蒙炒鸡 | 临沂北京路 | 鲁菜 | YES |
3 | 麻婆豆腐 | 成都万福桥边 | 川菜 | NO |
看起来很规范,但现在我又有了一组新数据:酒吧信息表
ID | Name | Address | Drink | DJ |
---|---|---|---|---|
1 | The Bitter End | U.S.A | Whisky | YES |
2 | 小酒馆的门口 | 成都玉林路 | 孟婆汤 | NO |
对于之前的结构,我们不再与新数据合并,为了接口统一,将两个表连接起来,关系数据库中的思想就是新建 场所表
:
PlaceID | RestaurantID | BarID |
---|---|---|
1 | 1 | Null |
2 | 2 | Null |
3 | 3 | Null |
4 | Null | 1 |
5 | Null | 2 |
这时我们就可以解决一些简单的需求了——
- 查询 提供孟婆汤的场所
SELECT * FROM restaurant, bar, place
WHERE restaurant.ID = place.ID
AND bar.ID = place.ID
AND Drink = '孟婆汤'
- 查询 北京的所有场所
SELECT * FROM restaurant, bar, place
WHERE restaurant.ID = place.ID
AND bar.ID = place.ID
AND Address like '北京%'
- 查询 所有提供水果的场所
SELECT * restaurant, bar, place
WHERE restaurant.ID = place.ID
AND bar.ID = place.ID
AND Fruits = 'YES'
还不错,对吧?
你可能已经习惯了这些,但第二个和第三个需求的实现,有很多冗余操作
第二个实现,想查询所有在北京的场所,就必须将两个表连接,才能拿到所有地址。
解决办法就是在场所表
中添加 address 字段,这样每次就不用连接,查到 id 直接去拿信息。
第三个实现,查询提供水果的场所,因为只有餐馆才可能提供水果,酒吧完全可以忽略掉。
解决了吗?
没有,反而越来越乱,哪一天公司扩大势力范围,再新增了早餐店表
,难道又要对之前的结构做一次抽象?
关系型数据库添加新字段极其繁琐,随着项目越来越大,数据的管理问题将变得难以解决,甚至完全无法解决。
怎么办?
通常,想要把一件事说明白,并且说的清楚,最高效的方式就是采用 主-谓-宾
结构,即 主语 + 谓语 + 宾语。
如:
- 小明喜欢蘑菇
- 蘑菇吓到小红
上面的每一句话都代表一条信息,“小明”和“小红”是指特定的人,“蘑菇”是指一类有机菌类,而“喜欢”和“吓到”告诉你人和有机菌类之间的关系。现在,使用从这两个句子中得出的含义,你就能回答一些简单的问题,例如 ”谁喜欢蘑菇?“
既然如此,是否可以定义一个模式,它足够灵活,能处理各种不断变化的类型,同时仍然保持一定的可读性?
也许可以将模式设计为对新场所目的概念开发,并为他们提供自定义字段,如图所示,该模式完全去掉了酒吧和餐馆的概念,现在只包含场所列表和对应的自定义属性。
Properties表
PlaceID | Field | Value |
---|---|---|
1 | Name | 老北京饭店 |
1 | Address | 北京王府井大街 |
1 | Cuisine | 北京菜 |
1 | Fruits | YES |
2 | Name | 沂蒙炒鸡 |
2 | Address | 临沂北京路 |
… | … | … |
有没有发现,表中的每一条记录正好对应 主-谓-宾
结构
Place1 - Name - 老北京饭店
Place1 - Address - 王府井大街
看!每个数据都与定义它的属性一起描述。在此过程中,我们使用了先前从表和列中推断出来的语义关系,并使它们成为表中的数据。这就是语义数据建模的本质:
灵活的模式,数据自身描述模式关系
不仅仅如此,对场所数据进行参数化使得模型非常灵活。当我们了解到场所的新特性(增加新的字段)时,只需要在表格里添加一行。对场所数据进行参数化的处理也非常简单,要利用数据,几乎不需要了解数据的组织,一旦知道共享相同的 PlaceID 的行彼此相关,就可以选择相同的 PlaceID 的所有行来了解该场所的所有知识,这极大地方便了数据的检索。
总结
对于 主-谓-宾
这种结构,有个统一的叫法:三元组
这种结构适用于信息检索,下篇文章继续聊。