创建和操作数据库
1.创建数据库的基本要求
【1】主数据文件:一个数据库有,且只能有一个。扩展名是.mdf。
【2】次要数据文件:可以根据需要添加多个,并且可以分布在不同的磁盘上。扩展名.ndf。
【3】日志文件:有且至少有一个日志文件,也可以多个。扩展名是.ldf。
2.数据库创建要思考的问题
【1】数据容量:根据需要预估。
【2】文件分布:根据容量大小,创建不同次要数据文件。分布存储。
3.基于T-SQL脚本创建数据库实例
1 use master--表示当前我们要在master数据库中操作 2 go --表示批处理结束,这个go非常重要,在必要的地方必须写,在不需要的地方,绝对不能写。 3 4 5 --我们在开发阶段,通会使用这种判断,查看数据库是否存在。因为我们会经常改动.如果数据库创建完毕,千万注意! 6 if exists(select * from sysdatabases where name='CourseManageDB') 7 drop database CourseManageDB 8 go 9 10 --创建数据库 11 create database CourseManageDB 12 on primary 13 ( 14 --数据库的逻辑文件名(系统使用的必须唯一,但是我们看不见) 15 name='CourseManageDB_data', 16 --数据库物理文件名(这个是给操作系统用的,用来读取数据文件的) 17 filename='D:\SQLServer\DB\CourseManageDB_data.mdf', --主数据文件名 18 --数据库文件初始大小(要根据实际的生产需求来定) 19 size=20MB, 20 --数据文件增量(也要参考文件本身大小) 21 filegrowth=5MB 22 23 ) 24 , 25 ( 26 name='CourseManageDB_data1', 27 filename='D:\SQLServer\DB\CourseManageDB_data1.ndf', 28 size=20MB, 29 filegrowth=5MB 30 ) 31 , 32 ( 33 name='CourseManageDB_log1', 34 filename='D:\SQLServer\DB\CourseManageDB_log1.ldf', 35 size=20MB, 36 filegrowth=5MB 37 ) 38 go
4.基于T-SQL脚本创建数据表
数据表创建的要求
第一,必须规范命名(按照C#的名称规范设计)
第二,数据表必须要有主键(不建议用联合主键),因为数据默认物理存储就是按照主键排列的。
第三,数据表字段,可以根据需求添加约束,防止不合理的数据加入。
【1】主键约束:要求这个表中这个字段,必须是非空,唯一的。
不建议:组合主键
【2】检查约束:Check(约束条件),非常具有灵活性,让用户可以根据自己的需求对当前字段添加要求。
通常会用到相关的SQL的函数。
【3】唯一约束:也就是要求当前字段的数据,必须是唯一的,不能重复。
提醒:数据库的约束,是对数据保障的一个方法,他不是万能的,我们不要在数据库创建阶段,把约束添加的过多。
【4】默认约束:default 也就是在用户添加数据的时候,如果没有给这个值,会默认提供。
标识列:是一种自动增长列,要求我们给定标识列的种子和增长量。数据库会自动的按照这个要求,生成数据。
Identity(标识种子,增量)标识种子:在数据库设计的时候,通常会有划分。
要求:统一规划,增量一般都是以1为单位。
特点:标识列仅仅是为了唯一的区分而生成的,没有什么特别的意义。但是我们可以让他有意义。比如我们做主键,就非常好用。
贴别注意:我们不能给标识列,显式的赋值。标识列通常回合主键列一起使用。
【5】外来约束:
概念:就是说某一个数据表的一个列,是引用了其他数据表的主键。这个键就是外键列。
使用原因:如果我们没有外键,你会发现,数据表中,某些列会出现重复,而一致性被破坏。比如,我们的课程信息表中额课程分类
如果没有单独的课程分类表。那么在课程信息表中,课程分类表会有重复。而且,会在课程信息表没有的时候,分类也不存在
删除的时候,也会出现课程分类对是的问题。
例如:
1000 .NET高级VIP 重要讲解高级开发 300 .NET编程
1001 .NET全栈VIP 主要从基础到高级 300 .NET编程
1002 .NET上位机VIP 讲解工控控制系统 300 工控系列
以上数据,我们发现在添加,删除,修改都会出现问题!所以我们必须把它独立出去。
主键(主键表-->课程分类表)
10 .NET编程
11 工控系列
12 java系列
外键(这一列数据,必须在主键表中存在)
1000 .NET高级VIP 主要讲解高级开发 300 10
1001 .NET全栈VIP 主要从基础到高级 300 10
1002 .NET上位机VIP 讲解工控控制系统 200 11
1003 .NET运动控制VIP 讲解设备运动控制 200 13(因为13不在主键表中,所以这条数据是添加不进去的)
外键约束的要求:
【1】外键名称建议和主键一样。
【2】外键数据类型和长度必须和主键一致。
其他建议:我们编写数据库脚本的时候,一定要先添加灭有外键约束的数据表,因为后面要用到。
1 use CourseManageDB --这个大家不要忘记,否则你就会把表创建到master数据中 2 go 3 4 --建议:先创建简单的数据表(没有外键关系的表) 5 if exists(select*from sysobjects where name='Teacher') 6 drop table Teacher 7 go 8 create table Teacher 9 ( 10 --规范:字段名称 数据类型和长度 约束要求(逐渐约束,检查约束,默认约束,外键约束) 11 TeacherID int primary key, 12 LoginAccount varchar(50) not null, 13 LoginPWD varchar(18) check(len(LoginPWD)>=6 and len(LoginPWD)<=18) not null, 14 TeacherName varchar(20) not null, 15 PhoneNumber char(11) unique not null, 16 NowAddress nvarchar(100) default('地址不详') 17 ) 18 go 19 20 --课程分类表 21 if exists(select * from sysobjects where name='CourseCategory') 22 drop table Teacher 23 go 24 create table CourseCategory 25 ( 26 CategoryID int identity(10,1) primary key, 27 CategoryName varchar(20) not null 28 ) 29 go 30 31 --课程表 32 if exists(select * from sysobjects where name='Course') 33 drop table Course 34 go 35 create table Course 36 ( 37 CourseID int identity(1000,1) primary key, 38 CourseName varchar(50) not null, 39 CourseContent nvarchar(500) not null, 40 ClassHour int not null, 41 Cedit int not null, 42 CategoryID int references CourseCategory(CategoryID) not null, --外键约束 43 TeacherID int references Teacher(TeacherID) 44 ) 45 go 46 47 --可以根据自己的项目的要求,扩展其他数据表。
测试数据的使用及其重要性
1.关于测试数据的重要性
我们创建数据库,必须基于脚本。然后正确的添加一部分基础数据。因为测试数据的准确性,会关系到我们后面项目数据的真实性。
2.测试数据要求
第一,必须通过脚添加。
第二,数据量多少根据你的要求决定(如果数据量很大,可以通过自己写程序,生成数据)。
第三,首先添加主键表的数据,其次添加外键表的数据。
注意:标识列,在插入数据的时候,如果这列有错误,下次你再插入的时候,这个标识列就被使用了,不能继续用了。
同理,如果你删除了106,当你再次添加的时候,会从107开始,也不会吧106给你补上。
1 use CourseManageDB 2 go 3 4 --讲师数据表 5 insert into Teacher(TeacherName,LoginAccount,LoginPWD,PhoneNumber,NowAddress) 6 values('X老师','.NET课程001','123456','12345678900','天津X区'), 7 ('Y老师','.NET课程002','123456','12345678901','天津Y区'), 8 ('Z老师','.NET课程003','123456','12345678902','天津Z区'), 9 ('A老师','.NET课程004','123456','12345678903','天津A区'), 10 ('B老师','.NET课程005','123456','12345678904',default) 11 12 select * from Teacher 13 14 --添加课程分类 15 insert into CourseCategory(CategoryID,CategoryName) values(10,'.NET编程'),(11,'工控开发'),(12,'Java编程') 16 17 select * from CourseCategory 18 19 insert into Course(CourseName,CourseContent,ClassHour,Cedit,CategoryID,TeacherID) 20 values('.NET/C#上位机开发VIP课程09','C#基础/OOP/SQL/WinForm/ASP.NET/WPF/WCF',500,10,10,102), 21 ('.NET/C#上位机开发VIP课程10','基于PLC+C#开发课程',500,10,11,103) 22 23 select * from Course
特别的:当我们删除数据的时候,如果主键表中的数据已经被外键表引用过,则逐渐表这个数据无法直接被删除。
来源:https://www.cnblogs.com/LiyuLi/p/12236979.html