问一个数据库设计的基本问题(null)

问一个数据库设计的基本问题(null),第1张

备注、描述、Comment 之类的可以设置为 NULL,其他的,最好不要。

如果是有唯一性索引的列,则最好不要设 NULL;NULL 和 NOT NULL 是用于数据完整性约束的,至于性能,从 Oracle 角度说,当然是 NOT NULL 好,但是 NOT NULL,占用空间大一点,其实如果不是必须,完全可以不要设成 NOT NULL。你要知道,需求来自 User,而不是 IT。

一、整型:

1、tinyint:tinyint 是-128到128 。当属性设置为unsigned的时候。最大值就是255了。现在知道为什么需要设置为unsigned属性了。原来是为了最大限度的使用给予的存储空间。如果不设置。那么假如你的值都是正数的。那么-128这一百多个数字就相当于是浪费了。默认tinyint会自动设置为tinyint(3)

2、int,占四个字节,取值范围是-2^31到2^31-1(大约正负二十亿)int 类型phpmyadmin默认会设置int(10)

3、bigint,占八个字节,取值范围是-2^63到2^63-1

二、时间类型

1、Date:用来存储没有时间的日期。Mysql获取和显示这个类型的格式为“YYYY-MM-DD”。支持的时间范围为“1000-00-00”到“9999-12-31”;

2、TimeStamp:存储既有日期又有时间的数据。存储和显示的格式为 “YYYY-MM-DD HH:MM:SS”。支持的时间范围是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”;

3、DateTime:也是存储既有日期又有时间的数据。存储和显示的格式跟TimeStamp一样。支持的时间范围是“1970-01-01 00:00:01”到“2038-01-19 03:14:07”; (一般用这个)

1、尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED

2、大小(VARCHAR的长度只分配真正需要的空间)

3、使用枚举或整数代替字符串类型

4、类型(尽量使用TIMESTAMP而非DATETIME,在精度要求高的应用中,建议使用定点数来存储数值,以保证结果的准确性。能用decimal就不要用float)

5、单表不要有太多字段,建议在20以内

6、值(是否允许为空、是否有默认值,尽量避免使用NULL字段,很难查询优化且占用额外索引空间)

7、用整型来存IP

8、合理的字段名(符合3NF,避免不必要的数据冗余,参考 3NF)

9、创建并使用正确的索引

10、将字段设置为not null 还出于另外一种考虑:mysql表的列中包含null的话,那么该列不会包含在所有中。也就是使用索引是无效的。所有,考虑今后会使用索引的字段,就要设置字段属性是not null。

11、如果你要保存NULL,手动去设置它,而不是把它设为默认值。

12、考虑到这个字段今后会作为查询关键字使用like的形式进行搜索。那么要将该字段定义成索引。这样使用like查询就会更快。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9996121.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存