发表于: 2017-08-30 23:49:05
1 929
今天完成的事情:
深度思考:
1.为什么DB的设计中要使用Long来替换掉Date类型?
date类型和bigint类型之间的互相转换只是简单的计算,并不影响选择。但是bigint时间戳可以表达更为准确、恒定的时间,是这些字面时间所不能达到的。所以在程序设计中的为了提供便利,一般坚持使用bigint时间戳总会好一点。
2.自增ID有什么坏处?什么样的场景下不使用自增ID?
坏处:(1)不存在连续性。
(2)数据重复了自增不会处理和提示。
(3)在面向对象时,不能保证完整性。(由于ID自增后有系统处理该字段,所以在调用对象时,找不到ID值。)
(4)分库的时候ID就不唯一了。(第二个数据库的ID值会从0开始递增,则无法保证ID值唯一。)
不使用自增ID的情况:
(1)自增ID的作用是唯一的标识表中某一条记录,如果有其他能标识该行数据的列,就不用自增ID了。
(2)在做分布式数据库的时候,要求同步自增ID就会出现严重的问题。(不懂)
3.什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?
(http://www.jnshu.com/daily/32447 8月28号的日志中有总结过。)
DB的索引:对数据库表中一个或多个列进行排序的一个结构。
4.唯一索引和普通索引的区别是什么,什么时候需要建唯一索引?
区别:唯一索引要求索引列的值唯一。而普通索引没有任何限制。
一般创建唯一索引的目的在于避免数据的重复,所以如果在一个数据表中,有数据重复出现,则需要在包含彼此各不相同值的一列建立唯一索引,以此来简化mysql的索引管理工作,也可以在新数据在插入时检测表中是否已经存在。
5.如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?
人为不需要判断,唯一索引会自动检测。这就是唯一索引的作用。
6.CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?
不懂
7.修真类型应该是直接存储Varchar,还是应该存储int?
由于我所知修真类型判断,比如java、前端工程师等字段不长,所以我选择用了char.
如果要选择的话,我感觉应该是varchar,因为我不知道mysql里面的数据类型和java程序里的一样,若一样的话,int类型是不可以存储字符串的。
8.varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
根据实际业务数据内容来确定其长度。
区别:(1)长度不同。
(2)运行效率,varchar比text要快。
(3)varchar可以有默认值,而text不可以有默认值。
明天计划的事情:
任务一步骤12和13
遇到的问题:
1.涉及到一些关于分库多库的问题。
2.问题6,关于CreateAt和UpdateAt的赋值和调用接口问题。
收获:
1.时间戳:
指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。
2.在不能使用ID自增的情况下,可以用uuid来解决。
3.Mysql索引主要有两种结构:B+树和hash
hash:hsah索引在mysql比较少用,他以把数据的索引以hash形式组织起来,因此当查找某一条记录的时候,速度非常快.当时因为是hash结构,每个键只对应一个值,而且是散列的方式分布.所以他并不支持范围查找和排序等功能.
B+树:b+tree是mysql使用最频繁的一个索引数据结构,数据结构以平衡树的形式来组织,因为是树型结构,所以更适合用来处理排序,范围查找等功能.相对hash索引,B+树在查找单条记录的速度虽然比不上hash索引,但是因为更适合排序等操作,所以他更受用户的欢迎.毕竟不可能只对数据库进行单条记录的操作.
评论