所有源码都在github上(https://github.com/seasonyao/24languages-words-meanings-web)
1.配置介绍:
Windows8环境下Java(1.8.0_121)+mysql+tomcat8.5.24
用的软件intellij idea2017和navicat premium
2.需求
为以上20种语言的60个英文单词(I,you,one等等)构造一个普通的网站,满足增删改查的基本功能以及对义项的一些平均、最大、最小数量求取的一些操作。
Excel表格大致为上图所示,包括的信息有英文单词、语言、该英文单词在该语言下的单词以及改语言中该单词有的所有义项(用英文表达)。
3.大致思路
主体分为两大块,一块为数据库的建立,为了满足BCNF或者3NF的范式要求,需要对language,englishword,word,meaning这四者进行相应的数据库的使得我们的数据库不会有冗余的信息。构建完数据库的结构那么对于数据的录入(20种语言,每种语言对应60个英文单词的单词,每个单词又有好几个义项,构建的数据库一定是用各种ID值来作为主键和外键与其他值联系的,所以还算是一个很浩大的工程),大致有两个想法:
(1) 把excel内容全部转成一个txt文档后(两个单词的信息之间用特殊字母(我用yao)隔开),我用python写了一套代码,实现从txt转为各种sql的insert语句的功能。有几点问题大致提一下,首先格式问题挺难办的,我得到的这一堆excel表格格式并不是完全严格,总会有一些奇怪的格式出现,导致大批量处理起来要de好的bug再对症下药;其次的问题是,因为我们是用自增的ID作为主键的,所以在插入多对多以及一对多表的时候,外键都是ID而不是具体的这些单词,然而通过python文件只能把txt处理成insert语句的value是单词的,所以这里还有一个难点在于要根据已经建立好的几张没有外键依赖的表建立出对应的ID和单词的映射关系,需要进行替换才能得到最终正确的sql语句。
(2) 就是因为上述的问题,所以用方法1我只是对两种语言的所有单词用这一套处理了一遍,插入到数据库中(保证数据库有东西给java代码做测试)。那么剩下18种了?我给出的第二个想法就是,根据已有的两种语言可以把网站需要的增删改查所有功能都完成(主要必须是至少两种语言才好debug,毕竟从2到3甚至到20都是一个问题,然而从1到2则是完全不同的两个问题),然后就可以和录入进excel一样方便快捷的运行网站进行insert操作了(如下图),这样一套录入因为java代码帮你构建了复杂的逻辑去按顺序insert对应的表,所以只要把excel上的内容几乎照搬一遍即可,无需考虑逻辑问题。
4.数据库搭建
ER图:
根据语言、英语单词、单词、义项之间的关系,我们可以画出数据库的ER图。其中,每个单词和它对应的语言和英语单词都是多对一的关系,所以我们将englishword和language的主键(englishwordID和languageID)作为外键添加到word表中;每个单词和各个义项是一个多对多的关系,所以我们需要建立一张中间表word_meaning表,其中的两个外键wordID和meaningID来自word表和meaning表的主键。另外我们建了一张用户表来储存我们的用户信息。
建表: