SQL Server数据库学习笔记-设计表时应该考虑的因素
设计数据库其实就是设计数据库中的表。到底要注意些什么才能够设计好一个数据库呢?一个宗旨,8个建议。
一个宗旨“尽量少的表,每个表中尽量少的列,合理的表结构”。
8个建议:
第一个,首先要考虑的是咱们这个数据库的主要作用是什么?至少包含哪些数据?这些数据又分别属于哪些实体对象?对象之间又存在什么样的关系?比如说新闻文章管理系统的数据库,它要存放的数据至少包括:文章分类、文章标题、发文时间、作者;而既然是管理系统,那么肯定会有人要添加、删除或修改文章,那么就延伸出管理员,有管理员了就存在账号、密码;如果还要有对文章的评论功能,那就还得有评论的标题、评论的内容、评论人姓名、评论时间等。这么多需要存放的数据,如何归类?归类后又如何整理相互之间的关系呢?这就需要用到工具。
第二,E-R模型。建立E-R模型的工具很多,甚至纸、笔也算是一种工具。E-R图的画法很多,它的主要作用是将所有要存入数据库的数据归类、整理成一个个的分类,这个分类被称为实体,而被归入这个分类的数据则被称之为实体的属性。不同的实体之间存在关联,比如文章和管理员之间就存在谁发布了文章,文章和评论之间存在某条评论是属于哪篇文章这样的关系,在E-R模型上就必须把这些关系体现出来。
第三,每个实体就是一个表,而实体的属性就是这个表的列,那么问题就出来了,到底什么样的列该用什么样的数据类型,比如文章的标题就该用什么数据类型呢?假如说用NChar(50),接着来看文章标题用NChar(50)保存有没有问题。首先我们说什么情况下用NChar类型呢?一是在在Unicode字符的时候用N开头的类型,其次只有在数据长度基本差不多的情况下采用。但是文章的标题每一个都会是固定长度吗?而且char类型最致命的一个却显示,只要用他的数据、只要长度不够,就自动填充空格。问题就出来了,如果连续10万行数据的这一列都只有40个字符,那么每行增加10个空格,这样下来10万*10字符的空间实际上就白白地被占用了。数据库的体积越大,处理数据的效率必然受影响。再比如说用户注册年龄的问题,肯定首选tinyint,因为目前的人类的年龄不可能超过255岁,而这个类型只占1字节的空间,如果习惯性地用int类型,咋一看也没有问题,只是白白浪费了3个字节的空间,因为int是4字节的长度。总结一下,不浪费空间,也不过分节约空间,适量而行。
第四,允许为空和默认值。这是什么意思呢?首先要明确什么是空值,什么是默认值。这里的空值既不是0也不是空字符,而表示未知,用null表示。这就有问题了,首先,如果处在变长类型列中的null值本身虽然不占空间,但是它所在的列却实实在在地占用空间的。再则null比较特殊,数据库要对null字段进行额外的操作,所以如果表中有较多的null字段时会影响数据库的性能;还有一点是我们现在想不到但将来一定遇到的,null字段会给编程带来一些不大不小的麻烦,比如制造一些bug。所以,一句话,尽量少用允许列为空,如果一定要允许也尽量将之靠后。遇到用户可能不愿意填或乱填的情况,就要用到默认值。比如说用户的注册时间。
第五,主键的问题。每张表都需要一个主键,用来标识唯一的一条数据。
第六,约束和规则。用于确保数据的完整有效性,一旦定义了约束的规则,那么中有满足这些条件的数据才可以插入数据库。比如要求注册会员的性别要么是男,要么是女,绝对不允许第三种情况,再比如年龄只能是18~80岁,其他注册不了。
第七,外键关系。设置外键可以节省空间,方便编程和程序的扩展。
第八,考虑是否使用索引。索引也是一种数据库对象,于是在哪些列上使用索引,对哪些列不适用索引;是使用聚簇索引还是非聚簇索引;是否使用全文索引等等。很多问题需要认真地思考。
SQL Server数据库学习笔记-设计表时应该考虑的因素的更多相关文章
- SQL Server数据库学习笔记-概念数据模型
概念数据模型(Conceptual Data Model)也称为信息模型.它是对客观事物及其联系的抽象,用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具. ...
- SQL Server数据库学习笔记-E-R模型
实体(Entities)联系(Relationships)模型简称E-R模型也称E-R方法,是由P.P.Chen于1976年首先提出的.还有一个关键元素Attributes-属性,它提供不受任何数据库 ...
- SQL Server数据库学习笔记-三大范式
第一范式(First Normal Form,简称1NF):数据库表中的字段都是单一属性的,不可再分.这个单一属性由基本类型构成,包括整型.实数.字符型.逻辑型.日期型等.要求一个属性只包含一个值,多 ...
- SQL Server数据库学习笔记-外键
关于主键的话大家很好理解,主键的主要作用就是用来标识一条数据是唯一的,也就是保证数据的实体完整性.防止数据重复.但是外键的话就有许多的疑问了,那外键是咋回事儿呢? 1. 外键的定义: 外键(FK)是用 ...
- C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用
C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备) https://blog.csdn.net/u013519551/article/details/51220841 1. . ...
- 关于SQL SERVER数据库学习总结
对于SQL SERFVER数据库也学了有一阵子了,自己也对自己所学做了一些总结. 我们首先学习数据库设计的一些知识点和用SQL语句建库. 设计数据库步骤:需求分析阶段,概要设计阶段,详细设计阶段, 建 ...
- SQL Server数据库学习总结
经过一段时间的学习,也对数据库有了一些认识,数据库基本是由表,关系,操作组成:对于初学者首先要学的 一图胜“十”言:SQL Server 数据库总结 一个大概的总结 经过一段时间的学习,也对数 ...
- SQL Server 数据库基础笔记分享(下)
前言 本文是个人学习SQL Server 数据库时的以往笔记的整理,内容主要是对数据库的基本增删改查的SQL语句操作和约束,视图,存储过程,触发器的基本了解. 注:内容比较基础,适合入门者对SQL S ...
- SQL Server 数据库基础笔记分享(上)
前言 本文是个人学习SQL Server 数据库时的以往笔记的整理,内容主要是对数据库的基本增删改查的SQL语句操作和约束,视图,存储过程,触发器的基本了解. 注:内容比较基础,适合入门者对SQL S ...
随机推荐
- python发邮件遇到的端口号问题
在学习使用python发邮件的过程中, 遇到了一个问题:由于测试的时候使用的是QQ邮箱,要求必须使用SSL/TLS加密,所以有了下面的代码, from email.mime.text import M ...
- 百度地图API示例之小实践 添加代理商标注
地图坐标无非是经度纬度. 每个代理商都有他的经度纬度参数,就能够在地图上标注出来了. 效果如下: 功能包括 标记代理商 显示导航 显示距离 测量距离 点击选中等 其中测距用到的是自定义控件 地图根据城 ...
- vs2008 连接 VSS不提示输入密码
之前使用的vs2005,每次登录的时候会有vss帐号输入框,如上图. 后来安装了vs2008,再打开源代码的时候输入框就不见了,下面是解决办法. --------------------------- ...
- Objective-C介绍
概述 2007年苹果公司推出了Objective—C 2.0,它是Mac OS X和iOS开发的基础语言.
- sqlserver 保留小数方法
1. 使用 Round() 函数,如 Round(@num,2) 参数 2 表示 保留两位有效数字. 2. 更好的方法是使用 Convert(decimal(18,2),@num) 实现转换,dec ...
- PHPExcel操作sae的storage上的文件
在用PHPexcel操作excel的时候,在本地是好使的,但是把代码部署到sae就不好使了.会遇到如下问题: 文件的操作被拒绝. 这个原因就是sae上的应用文件是不允许改动的.sae提供的文件方案是使 ...
- canvas 绘圆加边框
HTML5中canvas元素,绘制圆形需要使用路径,开始时要取得图形上下文,首先使用路径来勾勒图形的轮廓,然后设置颜色,进行绘制. arc(cx,cy,radius,start_angle,end_a ...
- Mysql导入导出 改密命令总结(笔记三)
一.从数据库导出数据 注意这些语句的执行是在在没进入mysql命令行之前,在mysql命令行不行 C:\Windows\system32>导出命令 而不是 Mysql>导出命令 1.导出整 ...
- 透过c的编程原则,来规范自己现在的一些编程习惯
1.合理的使用注释 注释为:/*…………*/ 注释有以下几种情况: 1) 版本.版权声明. 2) 函数接口说明. 3) 重要的代码或者段落显示. 注释注意: 1) 注释是对代码的解释,不是对文档.注释 ...
- onClick事件实现方式(打电话为例子)
1.在button 中 android:onclick="call" 注意事项:①.方法的名字必须是call ②.区别大小写 ③.call方法必须接收一个View类型的参数 ④.方 ...