一、数据库创建注意事项
1、在数据库概念模型设计转换到数据库逻辑模型设计过程中,中有一对一,一对多,多对多的关系:
如(1)用户与mac地址,(2)用户与添加事件,(3)用户与景点,
这时要将他们合理的拆分成多个表,(1)其中一个表设置外键,关联另一个表的主键;(2)事件表中添加外键,关联用户表的主键;(3)用户与景点之间存在评论表,这时用户表与景点表分别单独存储,评论表中设置两个外键,分别关联用户表的主键和景点表的主键;
捎带插一句,进行连接查询的时候也经常会根据上述三种情况分别查询(1)一对一和一对多的情况类似,参考一对多使用;(2)一对多select * from student cross join course wherestudent.ID=course.ID(3)多对多select s.Name,C.Cname from student_course as scleft join student as s on s.Sno=sc.Sno left join course as c on c.Cno=sc.Cno。
2、数据库逻辑模型设计
每个表的结构要与程序中的model一致,但是这样做的话在使用webAPI返回数据需要数据库联合查询时就会不方便(如果返回的数据涉及到两个表中的数据,事件内容和用户名字,因为事件表中只存储了用户ID用来关联事件表)。这里注意一下概念模型(实体关系模型)-逻辑模型-类图-接受数据类与返数据类的关系,实体关系与类关系的区别。
解决方案:(1)自定义返回类,对应返回数据结构,返回数据类同时能够接受提交数据;(2)用类拼接,接受返回都有冗余
3、索引、外键、触发器
在指定外键时改表字段默认会创建索引,其中索引会有normal、unique、fulltext,normal为正常索引,unique不能重复,fulltext一般为文本设置;
外键删除更新时有如下设置:(1)cascade方式在父表上update/delete记录时,同步update/delete掉子表的匹配记录;(2)set null方式在父表上update/delete记录时,将子表上匹配记录的列设为null,要注意子表的外键列不能为not null;(3)No action方式如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作;(4)Restrict方式同no action, 都是立即检查外键约束。
触发器,当插入表中一条记录,更新另外一张表中记录改表的数量时会用到。有before和after设置,还有插入、删除、更新设置。
4、数据库事务
用来将数据库操作原子化,防止出现意外,错误后回滚。
5、mysql中那些乱七八糟的字段
Float、double、decimal、numerical总长度和小数长度;tinyint1、smallint2、mediumint、int4、bigint8大小不同,定了总长度只是为了补齐,对实际大小没影响;numeric与decimal区别,貌似差不多,但是其他数据库中的numeric是个整数decimal是小数,sql标准型。什么时候用blob与binary还不太清楚。
武大游下载链接点击打开链接