发表于: 2018-02-22 07:32:19
3 687
春节期间任务完成情况:
任务1:完成学员报名的DB设计并读写数据库
参考修真院线下报名贴(学习资料-线下报名-北京报名)中报名的格式,整理出业务模型,确定需要几个对象,每个对象的属性是什么,对象和对象之间的关系是一对一,还是一对多。
对象表关系
对象名 | 属性 | 对象间关系 |
姓名 | Varchar | 一对一 |
Int | 一对一 | |
修真类型 | Varchar | 一对多 |
预计入学时间 | DateOfTheDay Bigint | 一对多 |
毕业院校 | Varchar | 一对多 |
线上(jnshu.com)学号 | Varchar | 一对一 |
日报链接 | Varchar | 一对一 |
立愿 | Varchar | 一对多 |
辅导师兄 | Varchar | 一对多 |
从何处了解到的修真院 | Varchar | 一对多 |
Table1:报名人表
姓名,QQ,课程ID(PK),预计入学时间,毕业院校,线上(jnshu.com)学号(PK),日报链接,立愿,从何处了解到的修真院
Table2: 修真类型表
课程ID(PK),修真类型
在Mysql语法里,long类型是bigint.
Insert into StudentInfo (sname,QQ,cid,enrolledDay,school,snumber,studynotelink,myword,brother,whereknowus)
Value(“王连喜”,”381144235”,”1”,”20170106”,”保定学院”,”JAVA-2871”,”abc”,”陷阵之志”,”雍金卫”,”知乎”);
UPDATE StudentInfo SET sname = “wanglianxi” where sid = 1;
UPDATE StudentInfo SET myword = “laodazuishuai” where sid = 1;
使用sql查看数据表之前不知道的。
使用Sql导入被删除的表
9. 还需要给报名人信息id,因为主键和外键必须建索引。修真类型和师兄建索引,因为查询需求大。
创建索引
使用普通查询测得查询速度
但是不会使用索引查询测得速度。
Q1:为什么DB的设计中要使用Long来替换掉Date类型?
https://v.qq.com/x/page/g0533h1785c.html
1. DATE有固定格式,不同的地区有不同的时间表示方法。而且国外很多国家使用冬令时和夏令时,比较麻烦
2. BigInt类型也可以清晰的表示时间
3. 大多数时候我们并不关心一个时间点,而是发生一个动作后,需要的时间,BigInt非常方便做减法而不用转化。
Q2:自增ID有什么坏处?什么样的场景下不使用自增ID?https://v.qq.com/x/page/u05032qt6rk.html
自增ID的好处是1.添加数据时不用添加id,系统自动添加id;2.保证单一数据库id唯一。3.相比uuid来的简单。
自增ID的坏处是1.不存在连续性2.数据重复了自增不会处理和提示。3.在面对对象时,不能保证完整性。4.分库的时候id就不唯一了。
解决办法是做uuid,使用uuid在数据库移植,多表多数据库分布式存储时就会比较方便。
4. 在面向对象时,不能保证完整性。4.分库的时候ID就不唯一了。
解决方式:uuid,使用uuid在数据库移植,多表多数据库分布式存储时就会比较方便。
什么场景下不使用自增ID。
若有其他能唯一标识该行数据的列,就不用设置自增ID了;在做分布式数据库的时候,要求同步自增ID就会出现严重的问题。
UUID由以下几部分组合:
1. 当前日期和时间 2.时钟序列 3. 全局唯一的IEEE机器识别号
UUID的缺点:生成的结果串会比较长,是128位长的数字,一般用16进制来表示。没有独特需求的情况下不用UUID。
Java除了面向对象的特点以外,Java语言还有安全性,平台无关性,支持多线程,内存管理等特点。
Q3:什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?http://blog.csdn.net/ning521513/article/details/52330422
A3:在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。多大的数据量下建索引会有性能的差别还不知道。
(1)表的主键、外键必须有索引;
(2)数据量超过300的表应该有索引;
(3)经常与其他表进行连接的表,在连接字段上应该建立索引;
(4)经常出现在Where子句中的字段,特别是大表的字段,应该建立索引
(5)索引应该建在选择性高的字段上;
(6)索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
(7)复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
8、频繁进行数据操作的表,不要建立太多的索引;
9、删除无用的索引,避免对执行计划造成负面影响;
Q4:唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。
普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。
如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。
Q5: 修真类型应该是直接存储Varchar,还是应该存储int?
A5: 字符型应该使用Varchar。
Q6: varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
A6:
varchar长度可变,在255个字符内。
在字符超过255时,转变为text。
text和longtext区别在于text最大2^16,longtext达到2^32个字符
Q7:为什么不可以用Select * from table?
A7:打印全表,慢且没有必要。
下载Java 7,并配置环境变量,百度搜索一下JDK和JRE的区别,并将结论用自己的话写在日报中。
JDK是java应用程序开发包,JRE是java运行环境
13.下载Maven3,并配置好环境变量。
14.下载Eclipse或者是IDEA,配置好Maven。IDEA不用配置Maven,Eclipse也分自带或者外部,推荐使用外部Maven。
15.创建一个新的maven项目
16.在src/main/java下随便创建一个java文件,clean,install.查看本地的.m2下是否成功看到有Jar包。
https://www.jianshu.com/p/49805dddd709
17.编写DAO,分别JdbcTemplate和Mybatis连接数据库,注意使用JDBCTemplate的时候分离Interface和Imple,使用Mybatis的时候注意理解为什么不需要Impl,注意遵守命名规范。
昨天先进行到这儿,学到DAO的时候卡住了,不知道从何处入手。了解到DAO的背景,是数据访问层,提供增删改查的操作。DAO的意义在于可以自动连接数据库并且可以在Java应用程序中实现增删改查操作。http://blog.csdn.net/action_learning/article/details/43315031
目前遇到的问题是:创建DAO的步骤以及DAO怎么写,要达到什么样的效果。以及如何使用索引查询。
做过的行动是百度编写DAO jdbctemplate mybatis看了几篇博客
明天计划的事情是从查看官方文档上来理解DAO,查看mybatis, 以及 jdbctemplate。准备把我的理解想法写下来请各位指正。
收获:通过这几天的学习,我学到了Mysql的增改查语句,创建索引,普通索引和唯一索引,什么情况下需要创建索引。回顾了设计表和自增id的好处坏处使用情形,以及初步了解了Maven。
评论