数据库设计(三)(选择主键外键,数据库维护拆分,反范式化)

本文介绍了数据库设计中的关键要素,包括主键的选择、避免使用外键约束和触发器、反范式化设计等内容,并详细讲解了数据库维护与优化的方法,如索引管理和表的垂直与水平拆分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何选择主键

    1.区分业务主键合和数据库主键
        业务主键用于标识业务数据,进行表与表之间的关联;
        数据库主键为了优化数据存储(Innodb会生成6个字节的隐含主键)
    2.根据数据库的类型,考虑主键是否要顺序增长
        有些数据库是按住建的顺序逻辑存储的(顺序增长对IO有帮助)
    3.主键的字段类型所占空间要尽可能的小
        对于使用聚集索引方式存储的表,每个索引后都会附加主键信息。

避免使用外键约束

    1.降低数据导入的效率
    2.增加维护成本
    3.虽然不建议使用外键约束,但是相关联的列上一定要建立索引   

避免使用触发器

1.降低数据导入的效率。
2.可能会出现意想不到的数据异常。
3.使业务逻辑变复杂。

关于预留字段

    1.无法准确的知道预留字段的类型
    2.无法准确的指导预留字段中所存储的内容。
    3.后期维护预留字段所要的成本,同增加一个字段所需要的成本是相同的。
    4.严禁使用预留字段。


反范式化设计

    反范式化是针对范式化而言的,就是打破第三范式的规定,
    为了性能和读取效率的考虑而适当的对第三范式的要求进行违反,
    而允许存在少量的数据冗余,换句话来说:反范式化就是实用空间来换取时间。

为什么反范式化

    1.减少表的关联数量
    2.增加数据的读取效率
    3.反范式化一定要适度


数据库维护与优化

    维护和优化要做什么
    1.维护数据字典
    2.维护索引
    3.维护表结构
    4.在适当的时候对表进行水平拆分或垂直拆分

    如何维护数据字典
    1.使用第三方工具对数据字典进行维护
    2.利用数据库本身的备注字段来维护数据字典。以MySQL为例 (COMMENT)增加注释

    如何维护索引
    如何选择合适的列建立索引?
    1.出现在WHERE从句,GROUP BY 从句, ORDER BY 从句中的列

    2.可选择性高的列要放在索引的前面
    3.索引中不要包括太长的数据类型
    注意事项:
    1.索引并不是越多越好,过多的索引不但会降低写效率而且会降低读的效率
    2.定期维护索引碎片
    3.在SQL语句中不要使用强制索引关键字

    维护表结构
    注意事项:

    1.使用在线变更表结构的工具
    2.同时对数据字典进行维护
    3.控制表的宽度和大小
    数据库中适合的操作
    1.批量操作 VS 逐条操作
    2.禁止使用Select * 这样的查询
    3.控制使用用户定义函数
    4.不要使用数据库中的全文索引
    
    表的垂直拆分
    为了控制表的宽度可以进行表的垂直拆分
    好处:优化了I/O读取效率 因为数据库是以页的形式存储的,行越多就越快,
    但是列的增加就会是的宽度增加,行数不多,所以垂直拆分也减小了表的宽度
    1.经常一起查询的列放在一起
    2.text,blob等大字段拆分到附加表中

    表的水平拆分
    为了控制表的大小可以进行表的水平拆分
    解决了数据量大多的问题



 

转载于:https://my.oschina.net/u/2443771/blog/870438

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值