数据库
数据库
顾名思义,数据库就比如是一个仓库。仓库里放着很多东西,有不同类别的。也不同地区仓储,怎么来理解。现实生活当中的JD商城,亚马逊都是在仓储这一块做的非常出色。中国有不同的省份,JD物流会在没一个省份安排一个仓库,也有在不同省份下的市级单位也设置仓库。这样一来的目的是为了什么?如果每一个用户在JD商城买的东西,都是从一个仓库里进行发货。那么,在特殊电商节日。这个物流会不会瘫痪!所以在每一个地方设置一个仓储是为了节省配货时间,以最快的速度进发货。但是每一个地方级仓库都是跟一个主仓库进行关联的。比如张三在JD商城里购一个手机。而同时这个手机在地方仓库就已经发货。那么JD商城如何才知道这个商品是否已经发货了呢?因为地方仓库和JD商城的总库是有关联的。那么某种意思来说,我们学习的sqlserver是关系型数据库。
市场上用得比较多的数据有哪一些?
- mysql
- oracle
- sqlserver
注意:上面所说的数据库他们都是关系型数据库。
数据库的基本概念
- 数据库里的基本单位是表组成而每一张表又由行和列组成。
- 数据库中的数据是存放在表当中。
- 数据库又分为二个重要因素一个是数据库系统(DBS)还有一个是数据库管理系统(DBMS)
- 为了方便查询和空间利用,可以适当的使用冗余。
- 数据库要讲究数据唯一性也就是完整性。
注意:表中的行,专业术语称这为记录;表中的列我们称之字段。 DBMS提供了可以操作数据的增删改查。DBS是数据库系统部门,例如:删除表,新建表等
系统数据库和用户数据库
1.系统数据库是当我们创建一个数据库,会自动产一些数据表。主要的作用是来操作用户数据库的一些权限管理,关系管理等。 2.用户数据库,则我们真正的关系数据表。
登录名和数据库用户
SQLServer中的登录名就好比如小区里的大门。而后,数据库用户则是小区业主的大门。那么某种意思来说,进小区大门只是确认是不是本小区的业主。如果是才能说你这个小区有房子。换一句说就是只有访问数据库的权限你才有资格去操作SqlServer里的数据库。
数据库物理文件构成
主要分为二个因素,1.数据文件;2.日志文件
数据文件: 由.mdf|.ndf,也就是你存在数据库里真实数据文件 日志文件: 由.ldf,保存的是操作数据库一些记录。例如:新增数据,删除数据等
注意:数据库里存放的数据放在.mdf或者.ndf文件里。意思就是数据里的还是存放在电脑的硬盘里。
数据表
数据库里数据不管是多少,数据都一定分存在数据表当中。表是数据库一个单位。同时,表也只是一个有规范的硬盘容器。当然,如果说是一个硬盘容器,其实为了效率,数据库也是有内存表的。他们之间一个是把数据存放在硬盘里,一个是存放在内存。硬盘里保存数据是永久,而内存保存数据则是暂时的(电脑一重启数据就为空了)。
为什么说是一个有规范的硬盘容器呢? 因为数据库本身设计就是用存储数据的。为了数据库的发挥出本身的工作效率。那么对于数据库里的表会做一些设置。目标就是为了数据准确不被污染。这样才能发挥出数据库真实作用。那么设置具体是什么东西呢?数据的完整性
数据的完整性 = 可靠性 + 准确性
具体完成这个设置是由以下四种方式来完成?
- 域完整性
- 实体完整性
- 引用完整性
- 自定义完整性
总结:关于表的设计一定根据数据的完整性来设计,具体来实现完整性由上面4种方式来完成。
案例说明一:
员工编号 | 姓名 | 地址 |
---|---|---|
0010016 | 张珊 | 四川成都 |
0010017 | 李思 | 浙江杭州 |
0010018 | 王武 | 山东德州 |
0010019 | 黄琴琴 | 河北石家庄 |
0010020 | 肖宇 | 湖南长沙 |
准备插入一行数据,如果如下:
员工编号 | 姓名 | 地址 |
---|---|---|
0010016 | 张珊 | 四川成都 |
答案: 是不能插入成功的,为什么?因为员工编号重复了。如果能够入成功,那么员工编号为0010016这一行数据就是破坏了数据完整性成了脏数据。
知识点:实体完整性 主要的作用是【1.唯一约束、2.主键约束、3.标识约束】
案例说明二:
员工编号 | 姓名 | 地址 |
---|---|---|
0010016 | 张珊 | 四川成都 |
0010017 | 李思 | 浙江杭州 |
0010018 | 王武 | 山东德州 |
0010019 | 黄琴琴 | 河北石家庄 |
0010020 | 肖宇 | 湖南长沙 |
准备插入一行数据,如果如下:
员工编号 | 姓名 | 地址 |
---|---|---|
8700000001 | 吴彤彤 | 湖北武汉 |
答案: 不能插入成功,因为破坏了数据表的域完整性。
分析: 准备插入行的数据,姓名和地址是符合源数据表的域完整性。但是从源数据表中数据分析得出结论。员工编号是按照一定根据来增长的。同是员工编号的数据长度也是有规定的。但是准备插入的数据行,员工编号匹配不上。第一个是长度,二个没有按照员工编号字段约束进行赋值。所以不能插入成功。
知识点: 域完整性是包括了,字段的数据类型、检查约束、外键约束、默认值约束、非空约束。
注意: 如果一张有十一个字段,那么域完整可以设置多少个?
案例说明三:
员工编号 | 姓名 | 地址 |
---|---|---|
0010016 | 张珊 | 四川成都 |
0010017 | 李思 | 浙江杭州 |
0010018 | 王武 | 山东德州 |
0010019 | 黄琴琴 | 河北石家庄 |
0010020 | 肖宇 | 湖南长沙 |
科目 | 员工编号 | 绩效分数 |
---|---|---|
考勤 | 0010016 | 32 |
考勤 | 0010018 | 65 |
工作效率 | 0010016 | 26 |
工作效率 | 0010018 | 87 |
考勤 | 0010019 | 90 |
准备插入一行数据,如果如下:
科目 | 员工编号 | 绩效分数 |
---|---|---|
考勤 | 0010021 | 78 |
分析: 员工表和成绩表他们是什么关系啊?关联状态,员工编号与成绩表中的员工编号是关系字段。那么,针对成绩表中的员工编号是外键约束。既然是外健约束,那么就一定会触发数据库域完整性的外键约束检查。当我们准备插入数据有一个员工编号0010021这个外键在员工表中有这一条数据吗?是不是进入到了我们数据库完整性检验。所以不能插入
知识点: 引用完整性讲的就是外键约束
数据类型
数据类型 | 定义 | 作用 | 作用 |
---|---|---|---|
varchar | 可变长度非 Unicode 数据 | 字母或者数字 | “abc211” |
nvarchar | 可变长度 Unicode 数据 | 可以来保存汉字 | “中国” |
注意: Unicade是全球统一字符集,也就是一个字符对应一个单一的编码。而我们学习的varchar是按单字节来来计算的。而我们中文一个汉字代表2个字节。所以不建议使用来存汉字。而nvarchar是按字符来进行计算也就是一个字符占二个字节(双字节)。而至于非Unicode和Unicode的区别无非就是为了能正常显示。