数据库建表有两种方式,横表和竖表。
我的理解就是 横表就是一个业务对象对应1条记录,比如学生有各科成绩,要设计成横表的话就是表设计就可以是 通过一条记录来存储学生的各科成绩,一般横表需要字段都是确定好的,要不然还需要修改表结构
横表示例:
uid | Chinese | Math | English |
---|---|---|---|
aaa | 90 | 80 | 90 |
纵表就是一个业务对象用多条记录来存储,将业务对象的字段属性拆开,用多条记录来存储的话 可拓展性会比较高.比如还想加其他学科只需要再添加一条记录即可.
纵表示例:
uid | filedName | filedValue |
---|---|---|
aaa | Chinese | 80 |
aaa | Math | 80 |
aaa | English | 90 |
横表是常用的,比较通用的建表方式。
但是有些场景用横表不太合适。
比如问卷调查,存储用户的回答,就不太方便使用横表。因为每一次问卷调查,题目数量都不相同。
又比如,配置选项,就不太适合横表,因为配置项随时都可能变化。
这个时候,就可以考虑使用竖表来存储。
优缺点
横表的优点:横标的有点事显示的较为清晰直观,同时在字段的选择上更为科学合理,具体的字段可以根据具体情况划分字段类型。
横表的缺点:不方便扩展和公用,也就是说设计了一张横标,只能在固定的某一种特定的相对不变的场景下使用,比如加字段,或者类似的业务想公用一张横表,都有局限。
竖表的优点:最大的特点是可以灵活扩展存储的内容,同时具有一定的公用性。因为竖表的存储结构不受字段个数的限制,可以存储具有一定共性的业务数据。
竖表的缺点:竖表的字段类型要兼容,比如横表可以根据具体的值设计成varchar,decimal,datetime等,横表为了兼容以上字段类型,只能设计成varchar的,可能会浪费一定的空间。
本文参考了https://www.cnblogs.com/jiqing9006/p/9908104.html