1006Java面试知识点准备

数据库表设计需要注意哪些方面?参考文章
设计工具:powerdesigner(适用于不同类型的数据库)

  1. 实用设计规则:(之前设计表的时候考虑SQL语句查询的便捷性上,也就是用空间换时间的做法,数据冗余可能比较多)
    1.综合考虑空间冗余和处理速度2方面的因素。
    2.在书写SQL语句的时候综合考虑,该合并合并,该拆分拆分
  2. 表设计规范
    1.保证字段的原子性,即字段含义明确,不可拆分
    2.同时在保证第三范式的基础上适当冗余,保证处理速度.(如商品下单表中下单金额等数字.用空间来换时间)(所谓三范式则是字段意义明确不可拆分,一条行记录可以被唯一区分,一张表中的非主键信息不能出现在2张表中关于三范式参考文章)
  3. 表关系设计
    1.做好静态表和动态表之间的区别,静态表如地区码静态表与频繁数据改动的表
    2.不要由null值,因为null的值出现索引是无法使用的.可以利用“”“”设置为默认值。
    比如电站建站的申请状态不要设置空值,否则没有办法使用索引.
    3.2张关联表如果存在多对多关联关系的话,可以考虑设计中间表,如以往项目中的模块表,按钮表.模块与按钮表之间的关系就是多对多的关系.所以出现了模块按钮中间表,将原来的多个模块对应多个按钮,改为一个模块对应多个按钮关系
    4.建表的时候字段长度设置的时候要比实际业务长度超过3~5个字节,考虑到业务的伸缩性和扩展性.字段长度如公告标题 一般20个字就够了,转换varchar2可变长度字符要50个差不多了.
    5.对于频繁修改的字段值,最好用字母或数字去替代,而不要采用中文或者英文的方式.比如公告启用和停用采用00或者01的方式.而不要用中文启用停用.
    6.数据库中不要存储任何资源,如图片/视屏/网站等.通过外部链接的方式存储位置.
    即使有blob数据类型也不要存储,以前的时候合作方机构有各类资质证件就很不合理.
    7.预留备用字段,方便表进行扩展。这点今年有一段时间我做的还是不错的.设计新的表的时候我都会考虑到多放2~3个备用字段,方便业务的快速扩展.
    所以在表设计这个大难题上结合平时的经验得出7点意见:静态表+动态表/设置默认值 方便索引使用/多对多关系表设计中间表/字段长度加4个字节左右/状态等频繁修改的值设置为字母或者数字/资源路径不要存储 采用外部链接的方式/每张表设计的时候多放2~3个备用字段

主键的使用注意事项
主键的使用尽量与业务逻辑无关,如mysql中使用自增序列id的方式,同时由于主键id可能作为外键使用,所以长度越短越好,像以前那种采用年月日时分秒毫秒+6位随机数的方式可以考虑作为业务id,而不作为主键id

提高数据库运行效率的方式?(并非SQL语句优化的方式)
1.通过降低范式,提高冗余的方式提高运行效率,减少使用触发器,多用存储过程.(虽然没怎么用过)
2.当数据库中的计算非常复杂的时候,通过外部c++计算后再将数据放入到数据库中.
3.如果数据库表中数据量过大,考虑水平拆分,就是根据行记录主键,在某一个时间点或者月份前后,将数据拆分为多张表.(可以参考用户登录日志表,记录的数据量过多一千万条).还有一种拆分方式为垂直拆分,意思就是当一张表里面的字段过多的时候进行表拆分 为2张40个字段的表.(实际之前最多的时候一张表也就是60个字段吧)

总之要提高数据库的运行效率,要从数据库系统级,数据库设计级,程序实现级三个层面来整.系统级别一般来讲应该我们顶多在安装数据库的时候注意类型,版本.而数据库设计级别也就是上面讲的这么多,从数据冗余和处理速度两方面找到最优解,通过设计出满足第三范式的表结构,如静态动态分离/设置非空字段利用索引/字段长度大哥3~5个字节/频繁修改的字段使用数字或者字母代替/通过连接的方式存储资源/设置备用字段.设置垂直分离和水平分离来提高数据库运行效率.

结合以往项目理解三范式设计理念参考链接

  1. 第一范式:指数据库中每一个字段只能有一个值.如课程字段,只能是语文或者数学,而不能是语文+数学这种出现,比如以往中出现的系统用户,角色,权限表中设计的时候.一个用户可以对应多个角色,但是必须通过多条记录的方式记录,不能直接在一条记录里面绑定多个角色.
    在这里插入图片描述
    1006Java面试知识点准备_第1张图片1006Java面试知识点准备_第2张图片
  2. 第二范式:第二范式是在满足第一范式的基础上,每一条记录可以被唯一标识(其实就是表添加主键的必要性,通过数据拆分可以发现非主键信息系统+宿舍楼 /课程/分数 都依赖于主键学号 所以可以拆分为2个)
    在这里插入图片描述
    1006Java面试知识点准备_第3张图片
  3. 第三范式:第三范式是在满足第二范式基础上,表中的非主键信息不能出现在多个地方,防止造成数据的大量冗余.

你可能感兴趣的:(面试宝典)