数据库设计问题整理
2015-10-21 11:13
204 查看
l 数据库的主键、外键
关系型数据库中的一条记录中有若干个属性,若其中某一个属性组能唯一标识一条记录,该属性组就可以成为一个主键。
比如:
Student(stuID,name, sex,class)
每个学生的学号(stuID)是唯一的,作为表的主键
课程表(课程号,课程名,学分)
课程号是唯一的,课程号就是一个主键
成绩表(学号,课程号,课程名,成绩)
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号组合才能唯一标识一条记录,属性组学号+课程号作为一个主键。
成绩表中学号不是成绩表的主键,但与学生表中学号相对应,在学生表中学号是主键,则称成绩表中的学号是学生表的外键。
定义主键和外键能确定一条记录的唯一标识;
外键用于与另一张表关联,是能确定另一张表记录的字段,为了保持数据的一致性。
l 设计规则
主键用途:一行的唯一标识、作为一个可以被外键有效引用的对象
主键设计原则:
1、 应当对于用户没有意义
2、 应该是单列的,以便提高连接和筛选操作的效率
l 数据库设计三大范式
范式是关系型数据库中符合某一种设计要求的总结。
1、第一范式
要求数据库表中所有字段值都是不可再分(根据设计系统的实际需求)的原子值。
2、第二范式
在第一范式的基础上,要求数据表里的所有数据都要和该数据表的主键有完全依赖关系。每个非键属性完全依赖于主键。
减少冗余将不同类别分开,例如商品信息和订单信息。
3、第三范式(3NF)
确保每列都和主键列直接相关,而不是间接相关
l Null与空
区分:
1、 NULL表示未知,占用空间,不走索引,DBA建议最好设置字段NOT NULL避免低效率的事情发生。
2、 空(’’)是不占用空间的
官方对于null的解释:
“NULL columns require additional space in therow to record whether their values are NULL. For MyISAM tables, each NULLcolumn takes one bit extra, rounded up to the nearest byte.”
“空列需要额外的空间记录该行其值是否为NULL。对于MyISAM表,每个NULL列需要一个额外的位,四舍五入到最接近的字节。
在使用上的注意事项:
1:在进行count()统计某列的记录数的时候,如果采用的NULL值,会别系统自动忽略掉,但是空值是会进行统计到其中的。
2: 判断NULL 用IS NULL 或者 is not null,SQL 语句函数中可以使用ifnull()函数来进行处理,判断空字符用=''或者 <>''来进行处理
3: 对于MySQL特殊的注意事项,对于timestamp数据类型,如果往这个数据类型插入的列插入NULL值,则出现的值是当前系统时间。插入空值,则会出现 '0000-00-00 00:00:00'
4:对于空值的判断到底是使用is null 还是 =''要根据实际业务来进行区分。
l 主键与索引
主键:惟一地标识一行;作为一个可以被外键有效引用的对象。常常与外键构成参照完整性约束,防止出现数据不一致。
索引:一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。
所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。数据库在设计时,主键起到了很重要的作用。
主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。
2. 一个表中可以有多个唯一性索引,但只能有一个主键。
3. 主键列不允许空值,而唯一性索引列允许空值。
4. 索引可以提高查询的速度。
其实主键和索引都是键,不过主键是逻辑键,索引是物理键,意思就是主键不实际存在,而索引实际存在在数据库中,主键一般都要建,主要是用来避免一张表中有相同的记录,索引一般可以不建,但如果需要对该表进行查询操作,则最好建,这样可以加快检索的速度。
关系型数据库中的一条记录中有若干个属性,若其中某一个属性组能唯一标识一条记录,该属性组就可以成为一个主键。
比如:
Student(stuID,name, sex,class)
每个学生的学号(stuID)是唯一的,作为表的主键
课程表(课程号,课程名,学分)
课程号是唯一的,课程号就是一个主键
成绩表(学号,课程号,课程名,成绩)
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号组合才能唯一标识一条记录,属性组学号+课程号作为一个主键。
成绩表中学号不是成绩表的主键,但与学生表中学号相对应,在学生表中学号是主键,则称成绩表中的学号是学生表的外键。
定义主键和外键能确定一条记录的唯一标识;
外键用于与另一张表关联,是能确定另一张表记录的字段,为了保持数据的一致性。
l 设计规则
主键用途:一行的唯一标识、作为一个可以被外键有效引用的对象
主键设计原则:
1、 应当对于用户没有意义
2、 应该是单列的,以便提高连接和筛选操作的效率
l 数据库设计三大范式
范式是关系型数据库中符合某一种设计要求的总结。
1、第一范式
要求数据库表中所有字段值都是不可再分(根据设计系统的实际需求)的原子值。
2、第二范式
在第一范式的基础上,要求数据表里的所有数据都要和该数据表的主键有完全依赖关系。每个非键属性完全依赖于主键。
减少冗余将不同类别分开,例如商品信息和订单信息。
3、第三范式(3NF)
确保每列都和主键列直接相关,而不是间接相关
l Null与空
区分:
1、 NULL表示未知,占用空间,不走索引,DBA建议最好设置字段NOT NULL避免低效率的事情发生。
2、 空(’’)是不占用空间的
官方对于null的解释:
“NULL columns require additional space in therow to record whether their values are NULL. For MyISAM tables, each NULLcolumn takes one bit extra, rounded up to the nearest byte.”
“空列需要额外的空间记录该行其值是否为NULL。对于MyISAM表,每个NULL列需要一个额外的位,四舍五入到最接近的字节。
在使用上的注意事项:
1:在进行count()统计某列的记录数的时候,如果采用的NULL值,会别系统自动忽略掉,但是空值是会进行统计到其中的。
2: 判断NULL 用IS NULL 或者 is not null,SQL 语句函数中可以使用ifnull()函数来进行处理,判断空字符用=''或者 <>''来进行处理
3: 对于MySQL特殊的注意事项,对于timestamp数据类型,如果往这个数据类型插入的列插入NULL值,则出现的值是当前系统时间。插入空值,则会出现 '0000-00-00 00:00:00'
4:对于空值的判断到底是使用is null 还是 =''要根据实际业务来进行区分。
l 主键与索引
主键:惟一地标识一行;作为一个可以被外键有效引用的对象。常常与外键构成参照完整性约束,防止出现数据不一致。
索引:一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。
所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。数据库在设计时,主键起到了很重要的作用。
主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。
2. 一个表中可以有多个唯一性索引,但只能有一个主键。
3. 主键列不允许空值,而唯一性索引列允许空值。
4. 索引可以提高查询的速度。
其实主键和索引都是键,不过主键是逻辑键,索引是物理键,意思就是主键不实际存在,而索引实际存在在数据库中,主键一般都要建,主要是用来避免一张表中有相同的记录,索引一般可以不建,但如果需要对该表进行查询操作,则最好建,这样可以加快检索的速度。
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马
- 分割超大Redis数据库例子
- 重装主控服务器后,数据库连接失败的解决办法:请正确还原数据库。