如何设计一对多,同时多又对多的数据表?
我想做一个通过拼音的声母查找词语的词库,比如我只知道W就可以查询到带W这个声母的“向往”这个词。
再比如,我通过W可以找到所有以W为声母的拼音,比如wang,wen等,再通过wang找到所有带wang的词语,比如“向往”,“成者为王”等。
这些数据是一对多,同时多又对多的类型,比如w对应所有的w是声母的拼音,如wang,wen等,然后wang又对应所有的带wang的词语。那么问题来了,如何设计这个数据表呢?
方案一,建一张表,类似下面所示:
ID,ShengMu,Pinyin,Words
1, W ,wang ,向往
2, W ,wang ,大王
3, W ,wan ,今晚
……
101,T ,tan ,交谈
102,T ,tan ,商谈
但缺点就是,表会非常非常长,查询速度会不会很慢?
方案二,建两张表,一张存w和wang,wan等,一张存wang和“向往”,“大王”等。
但缺点就是,我需要先到第一张表查询,得到结果了再去第二张表进行查询,很麻烦。
目前我想到的方案就是这两个,跪求高手给指点,有没有更好的办法?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
第一, 你的方案一 的表 和方案二的 表二 里的记录数是一样多的. 方案一不过是做了个冗余, 加了字母字段.
第二, 方案一. shengmu 字段是不需要的. 你可以在pingyin 字段建一个前缀索引.
https://dev.mysql.com/doc/refman/5.7/en/create-index.html
查询用:
第三, 如果你的需要仅仅是 "通过拼音的声母查找词语的词库,比如我只知道W就可以查询到带W这个声母的“向往”这个词". 那你不需要 pingin 这个字段, 也许这样就够了吧.
首先,一对多只需要两张表就可以了。而多对多必然要有一个中间表。
建议你找个插件,自动把汉字转成拼音。
https://github.com/hotoo/pinyin