V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
y051313
V2EX  ›  MySQL

求助:同义词/反义词数据库设计

  •  
  •   y051313 · 2013-02-16 23:00:06 +08:00 · 4960 次点击
    这是一个创建于 4317 天前的主题,其中的信息可能已经有所发展或是发生改变。
    要做一个同义词,反义词查询数据库。

    同义词部分,我准备把每组同义词都放在一个字段里面,用特殊字符分开,类似“首脑~~~领袖~~~首长~~~首领”,然后根据用户输入,去掉当前查询关键词,把剩下的部分显示出来

    但是反义词部分,有点问题,我手头的数据是类似下面这种:
    "左右为难= 应付自如 得心应手 左右逢源"

    等号左边始终是一个词,等号右边是对应的1个或多个反义词。我希望用户不论是查左右为难,还是应付自如都能得到反应词。这样的话应该如果设计表结构?

    目前想到的方法还是放到一个字段,形成类似“左右为难|||应付自如~~~得心应手~~~左右逢源"的结构,然后用户查询的时候先判断是在|||左边还是右边,然后取对应的部分显示出来。

    大家有别的什么方案吗?同义词和反义词可以分开成两个表,当然最好是一个表

    谢谢
    8 条回复    1970-01-01 08:00:00 +08:00
    wog
        1
    wog  
       2013-02-17 01:28:20 +08:00
    弄成两列,“左右为难”作主键,跟“应付自如~~~得心应手~~~左右逢源”分开
    napoleonu
        2
    napoleonu  
       2013-02-17 01:52:26 +08:00
    我建议你还是想办法把这些数据做成一对多,多对多形式的“源关系数据”,可能很大,但不一定要实时查询。

    之后如果为了查询速度可以在“源关系数据”基础上跑一遍对“词语表”生成两个冗余列,一列存所有近义词,一列存所有的反义词。或者使用mc,redis什么的缓存起来。

    随着你词库越来越大,这样的“源关系数据”维护起来方便还干净,重新生成冗余列或者缓存也方便。
    alexrezit
        3
    alexrezit  
       2013-02-17 09:09:43 +08:00 via iPhone
    都是多对多吧...
    ergatea
        4
    ergatea  
       2013-02-17 10:22:49 +08:00
    tags
    est
        5
    est  
       2013-02-17 11:45:17 +08:00
    其实这个用bitset做很方便,可惜没有对bitset优化的数据库。。。
    ljbha007
        6
    ljbha007  
       2013-02-17 12:12:41 +08:00 via Android
    两张表 表1 words: word_id, word, group_id
    表2 antonyms: antonyms_id, group_id1, group_id2
    表3(可选) groups: group_id

    每个词都有一个对应的近义词组 意思相反的词组之间一一对应 对应关系在表2中体现
    y051313
        7
    y051313  
    OP
       2013-02-17 14:09:43 +08:00
    @ljbha007
    等于说你把每个词都放在words表里面,然后里面记录它属于哪个group_id,也就是同义词组。然后在antonyms表里面记录反义词组对,对吗?

    group和words是1:1还是1:N?
    ljbha007
        8
    ljbha007  
       2013-02-20 20:33:43 +08:00
    @y051313 几天没上 刚看到 group 和words是1:N
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1167 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 17:58 · PVG 01:58 · LAX 09:58 · JFK 12:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.