数据库基础1
学习MSSQLServer操作
- 引子
数据库Database:数据的仓库
-》仓库里有排货架(表),货物会分类存放,比如牙膏、牙刷会放到一个排货架上,面包就会单独放在一个排货架上。
-》仓库又分为很多种粮仓、武器仓库。
-》仓库中还会有很多仓库管理员(DBA)对货物进行管理
-》从仓库中拿货物需要凭证,取货和进货的人(程序员)
数据库其实也是文件。
- 数据库特点
-》海量存储
-》查找速度快
-》并发性问题控制
-》安全性
-》数据完整性(保存在数据库中的数据都是正确的,真实的,并且无冗余信息)
- 数据库中的概念
不同类的数据应该放到不同的数据库中,便于对各个数据类别的进行个性化管理
数据库中的关系指的就是表。不同的货物要放到各自的货物架,将这种区域叫做表(Table )
-》列(Colum)字段(Filed)行(Row)组
问题:我们可以运出有重复的记录吗?
答:不可以,因为不符合数据库的完整性。
-》主键(Primary Key)
主键就是数据行的唯一标识,用来避免完全重复的记录,所以不会重复的列才能当主键。一个表可以没有主键,但是会难以处理,因此没有特殊理由都要设定主键。
说明:如果没有主键,数据数据库有重复数据,删除时会报错。
♦选择主键的策略:
1.没有重复的列
2.不能为空的列
3.选择比较稳定的列(因为数据存储在磁盘的位置与主键相关,若是主键频繁改动,就会频繁改动其磁盘的位置,影响性能)
4.选择那些字节数比较小的列
5.尽量选择单列为主键,而不是多列为主键(复合主键)
6.尽量选择没有意义的列(逻辑主键)而非业务主键(与所处理业务相关的列,比如身份证号码,银行号)
说明:复合主键存在的情况:比如两家公司合并后,很可能两家员工的编号有重复的,合并成一家公司后,为了避免重复的员工编号,可以将公司名和员工编号两列作为主键。但是我们一般不建议这种解决方案。(建议可以用增加一列自动生成编号作为主键)
问题:一个表中可以有多个主键吗?
答:不可以,因为数据存储的顺序与主键相关,因为表中数据实际存储顺序只能有一种。
关于冗余信息的问题而引出的外键说明例子:
商品ID |
商品名 |
价格 |
生产厂家 |
厂家地址 |
厂家电话 |
1001 |
大大香瓜子 |
5.00 |
大大食品厂 |
恰恰大街300号 |
010-123456 |
1002 |
大大开心果 |
15.00 |
大大食品厂 |
恰恰大街300号 |
010-123456 |
1003 |
苦咖啡 |
2 |
伊利食品厂 |
内蒙古伊利路1号 |
400400400 |
1004 |
随变 |
3 |
伊利食品厂 |
内蒙古伊利路1号 |
400400400 |
1005 |
冰工厂 |
1 |
伊利食品厂 |
内蒙古伊利路1号 |
400400400 |
试想:当大大食品厂的地址或者电话号码变化了,我们需要修改好几条重复的数据。这便是数据冗余的问题,它造成空间的浪费,以及删除修改操作的繁琐。解决方法:我们设计一张新的表专门记录厂家的地址和电话号码。
其中有外键的表就就是外键表(也可以理解为被引用的表叫做主键表,引用别的表叫做外交表)
例子:
上述例子中第二种表的设计模式只能存储一次的考试成绩。而第一种设计模式可以存储为多次成绩
- DBMS(Database Management System 数据库管理系统)和数据库
平时谈到的“数据库“有两种含义:存放数据表的一个分类(Catalog);MSSQLServer、Oracle等某种DBMS
其中MSSQLServery(与.net结合很好)只能运行在windows平台下,大数据量大交易表现并不是十分好,功能比MYSQL多(谷歌,facebook等都用MYSQL,因为其速度很快,而网站对数据库的功能反面要求也不是太高)
♦常见的错误理解:SQL(语言)<>SQLServer<>MSSQLServer
说明SQL是结构化查询语言(Structured Query Language),SQLSever包括MSSQLSverver Sybase,SQLServer
♦注意:除Access SQLServerCE、SQLLite等文件型数据库之外,大部分数据库都要在服务器才能运行
♦注意:要运行SQLServer首先要打开服务,怎么打开服务呢?
方法一 点击开始-运行 输入services.msc 进入到计算机管理下的服务中,找到SQLServer(MSSQLServer) 将其设置为启动模式
方法二 右键点击我的计算机进入到计算机管理下的选择服务选项,找到SQLServer(MSSQLServer) 将其设置为启动模式。