设计数据库表字段的时候应该遵循哪些规则?
设计数据库表字段时,应该遵循以下规则
命名规范
数据库的表名、字段名、索引名应该具有描述性的名称,能清晰地表达字段所表示的含义,可读性高,可见即所得,避免出现无意义的名称或模棱两可的命名。
- 表名、字段名必须使用小写字母或者数字,禁止使用数字开头,禁止使用拼音,并且一般不使用英文缩写。
- 主键索引名为
pk_字段名
;唯一索引名为uk_字段名
;普通索引名则为idx_字段名
。
选择合适的数据类型
使用合适的数据类型来存储字段的值,确保数据存储的准确性和有效性。例如,使用整数类型存储整数值,日期类型存储日期值,字符串类型存储文本值等。
- 尽可能选择存储空间小的字段类型,就好像数字类型的,从
tinyint、smallint、int、bigint
从左往右开始选择 - 小数类型如金额,则选择
decimal
,禁止使用float
和double
。 - 如果存储的字符串长度几乎相等,使用
char
定长字符串类型。 varchar
是可变长字符串,不预先分配存储空间,长度不要超过5000
。- 如果存储的值太大,建议字段类型修改为
text
,同时抽出单独一张表,用主键与之对应。 - 同一表中,所有
varchar
字段的长度加起来,不能大于65535
. 如果有这样的需求,请使用TEXT/LONGTEXT
类型。
设置合适的字段长度
设置适当的字段长度以确保存储的数据不会超出限制。长度应该根据数据的实际需求进行定义,避免过长或者不足的情况。
选择合适的精度
对于数字类型的字段,应该设置合适的精度和标度,以保证数值的准确性。精度是指数字的总位数,标度是小数点后的位数。
合理建立的约束
选择合适的约束来保证数据的完整性和一致性。常见的约束包括主键约束、唯一约束、外键约束、默认值约束等。
避免在表中存储重复或冗余的数据
避免在表中存储重复或冗余的数据。使用关联表和关联字段来处理多对多关系,避免数据冗余。
考虑数据的更新需求,避免设计过多的冗余字段,以减少数据的冗余更新和维护工作。
但是也可以适当存储冗余数据,避免过多的关联表。
合理的建立索引
考虑数据的查询需求,合理地创建索引来提高查询性能。在设计索引时,需要考虑以下几个原则:
选择合适的字段: 应该选择经常被用于搜索、排序或关联操作的字段来创建索引。这些字段通常是查询的 WHERE 子句中经常出现的字段。
避免过多索引: 不应该为每个字段都创建索引,否则会增加存储空间的消耗并降低写入性能。一般来说,单表索引的数量不宜过多,一般不超过5个。
避免冗余索引: 如果已经创建了一个包含多个字段的索引,那么不需要再单独为这些字段创建单独的索引。冗余的索引会增加维护成本而不提供额外的性能提升。
考虑查询性能: 索引应该能够显著提高常见查询的性能,但是对于很少使用的查询,创建索引可能不会有太大的帮助,甚至可能会影响性能。
最左前缀原则: 当创建联合索引时,应该优先考虑最左前缀原则,即索引可以覆盖查询中最左边的字段,这样可以确保索引在查询中的有效使用。
遵循数据库设计范式的原则
遵循数据库设计范式的原则,确保数据的结构性和一致性。常见的范式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等。
我们设计表及其字段之间的关系, 应尽量满足第三范式。但是有时候,可以适当冗余,来提高效率
禁止使用foreign key
禁止使用外键的原因如下:
- 性能考虑: 、外键的维护可能对性能产生负面影响,特别是在大规模的写入、更新或删除操作频繁的系统中。外键关系的维护可能引入额外的开销,影响数据库的响应速度。
- 灵活性: 有些数据库设计者可能认为,通过在应用层面进行关系维护,可以获得更大的灵活性。
- 数据库迁移和同步: 外键约束可能在数据库迁移和同步时引入一些复杂性。在某些情况下,不使用外键可以简化数据库结构的变更和迁移过程。
表字段不能超过100个,字段的总大小没有特殊原因不要超过8K
表字段数量过多会增加查询的复杂度和执行时间。单行数据量太大,导致InnoDB每个数据页中存放的行数减少,从而影响对页面的缓存。
超过8K会导致行溢出Overflow page InnoDB Row Format,导致IO性能的损耗,每次会去对应的溢出页进行查询,增加页面访问次数,而且这样的查询都是随机IO