我想做一个通过拼音的声母查找词语的词库,比如我只知道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和“向往”,“大王”等。
但缺点就是,我需要先到第一张表查询,得到结果了再去第二张表进行查询,很麻烦。
目前我想到的方案就是这两个,跪求高手给指点,有没有更好的办法?
第一, 你的方案一 的表 和方案二的 表二 里的记录数是一样多的. 方案一不过是做了个冗余, 加了字母字段.
第二, 方案一. shengmu 字段是不需要的. 你可以在pingyin 字段建一个前缀索引.
https://dev.mysql.com/doc/refman/5.7/en/create-index.html
查询用:
第三, 如果你的需要仅仅是 "通过拼音的声母查找词语的词库,比如我只知道W就可以查询到带W这个声母的“向往”这个词". 那你不需要 pingin 这个字段, 也许这样就够了吧.