第三范式是第二范式的子集,即满足第三范式必须先要满足第二范式。
在一个关系中,不包含其他关系中的非主关键字信息。
例如:部门表包含:部门id、部门名称、部门简介等,在员工表中只能包含部门id,部门名称等非主关键字信息就不能包含了。
如果只有员工表,没有部门表时,在员工表中给出部门名称等属性,也不应该,而是应该把部门名称等信息提取出来,形成部门表。
4.某某模块都有什么功能!
4.1前台:
1).用户模块功能有:
*用户注册:
>表单页面是jQuery做校验(包含了ajax异步请求)
#在输入框失去焦点时进行校验;
#在提交时对所有输入框进行校验;
#在输入框得到焦点时,隐藏错误信息。
>表单页面使用一次性图形验证码;
>在servlet中再次做了表单校验。
>注册成功时,使用javaMail给注册用户发送激活邮件,邮件中包含用于激活的链接,链接包含激活码参数;
*用户激活:通过激活码查询用户,如果查询不到用户,那么无效激活码!激活码使用uuid生成!
>表单校验与注册功能相同;
*用户退出:销毁session
2).分类模块
*查询所有分类:
>有1级和2级分类
>在页面中使用手风琴式菜单(Java组件)显示分类。
3).图书模块:
*按分类查询
*按作者查询
*按出版社查询
*按书名模糊查询
*多条件组合查询
*按id查询
除按id查询外,其他都是分页查询。
技术难点:
>组合查询:根据多个条件拼凑sql语句。
>带条件分页查询:条件可能会丢失。使用自定义的PageBean来传递分页数据!
>页面上的分页导航:页码列表的显示不好计算!
4).购物车模块:
*添加条目
*修改条目数量
*删除条目
*批量删除条目
*我的购物车
*查询被勾选条目
购物车没有使用sesson或cookie,而是存储到数据库中。
>添加条目时,如果两次添加针对同一本书的条目,不是添加,而是合并;
>修改数量时使用ajax时请求服务器端,服务器端返回json。
>大量js代码
5).订单模块:
*生成订单
*我的订单
*查看订单详细
*订单支付
*订单确认收货
*取消订单
>使用易宝在线支付平台:
#按照易宝支付范围与易宝支付网关对接。
#接收易宝的两种应答机制,针对点对点应答给予回复。
#处理多次应答照成的数据库重复确认。
4.2后台
1).管理员
2).分类管理
*添加1级分类
*添加2级分类:需要为2级分类指定所属1级分类
*编辑1级分类
*编辑2级分类:可以修改所属1级分类
*删除1级分类:存在子分类时,不能删除
*删除2级分类:当前2级分类下存在图书时不能删除
*查看所有分类
3).图书管理
*各种查询:与前台相同
*添加图书:
>上传图片
>页面中使用动态下拉列表显示2级分类,当指定1级分类后,2级分类下拉列表中动态显示该1级分类下所有2级分类名称