數據庫的創建和操作


創建和操作數據庫

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

 

特別的:當我們刪除數據的時候,如果主鍵表中的數據已經被外鍵表引用過,則逐漸表這個數據無法直接被刪除。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM