一:什麼是資料庫設計? 資料庫設計就是將資料庫中的數據實體以及這些數據實體之間的關係,進行規範和結構化的過程. 二:為什麼要實施資料庫設計? 1:良好的資料庫設計可以有效的解決數據冗餘的問題 2:效率高 3:便於進一步擴展 4:使得應用程式開發變得容易 三:設計資料庫的步驟 第一步 需求分析: 分析 ...
一:什麼是資料庫設計?
資料庫設計就是將資料庫中的數據實體以及這些數據實體之間的關係,進行規範和結構化的過程.
二:為什麼要實施資料庫設計?
1:良好的資料庫設計可以有效的解決數據冗餘的問題
2:效率高
3:便於進一步擴展
4:使得應用程式開發變得容易
三:設計資料庫的步驟
第一步 需求分析: 分析客戶的業務和數據處理需求(收集信息,標識實體,標識每個實體需要存儲的詳細信息,標識實體間的關係)
第二步 概要設計: 繪製E-R圖,用於與客戶或團隊成員的交流
第三步 詳細設計: 將E-R圖轉換成多張表,進行邏輯設計,應用資料庫設計的三大範式進行審核,選擇具體的資料庫然後建庫建表建約束,創建完成開始編寫代碼,開發前端應用程式.
四:繪製E-R圖
(1) 什麼是實體?
實體是指現實世界中具有區分其他事物的特征或屬性並與其他實體有聯繫的實體(實體一般是名詞)
嚴格來說,實體是指表中一行特定的數據,也常常把表稱為一個實體
(2)什麼是屬性?
屬性可以理解為實體的特征,屬性對應表中的列
(3)什麼是聯繫?
聯繫是兩個或多個實體之間的關聯關係(一般是動詞)
(4)什麼是映射基數?
映射基數是表示通過聯繫與該實體關聯的其他實體的個數,具體有 一對一 , 一對多, 多對一, 多對多.
(5)什麼是關係實體圖?
E-R圖以圖形的方式將資料庫的整個邏輯結構表示出來. 矩形表示實體集;橢圓表示屬性;菱形表示聯繫集;
直線用來連接屬性和實體集,也用來聯繫實體集和聯繫集.
例如,酒店管理系統中E-R圖:
五:繪製資料庫模型圖
例如:酒店管理系統資料庫模型圖
六:數據規範化
規範設計
第一範式:
第一範式的目標是確保每列的原子性,如果每列都是不可再分的最小單元(也稱為最小的原子單元),則滿足第一範式
第二範式:
如果一個關係滿足第一範式,並且除主鍵以外的其他列,都依賴於該主建,則滿足第二範式,第二範式要求一張表只描述一件事情
第三範式:
如果一個關係滿足第二範式,並且除了主鍵以外的其他列都不傳遞依賴於主鍵列,則滿足第三範式
註:第二範式是其他列都依賴於主鍵列但是沒有說明是直接依賴還是間接依賴,也就是直接依賴和間接依賴均可,但第三範式明確指出只能是直接依賴,如果出現間接依賴的情況,要單獨創建一張表出來
七:規範化和性能的關係
為了滿足某種商業目標,資料庫性能比規範資料庫更重要
具體策略和方法:
(1):通過在給定的表中添加額外欄位,以大量減少需要從中搜索信息所需要的時間
(2):通過在給定的表中插入計算列(比如成績總分),以方便查詢
在資料庫規範時,要綜合考慮資料庫性能.
一 :創建資料庫
創建一個數據文件和一個日誌文件(MySchool)
create database MySchool
on primary --預設屬於primary主文件組,可省略
(
--數據文件的具體描述
name = 'MySchool_data' --主資料庫文件的邏輯名稱
filename = 'D:\project\MySchool_data.mdf', --主資料庫文件的物理名稱
size = 5MB, --主資料庫文件的初始大小
maxsize = 100MB, --主資料庫文件增長的最大值
filegrowth = 15% --主數據文件的增長率
)
log on
(
--日誌文件的具體描述,各參數含義同上
name = 'MySchool_log', --主資料庫文件的邏輯名稱
filename = 'D:\project\MySchool_data.ldf', --主資料庫文件的物理名稱
size=2MB, --主資料庫文件的初始大小
filegrowth = 1MB --主數據文件的增長速度
)
go
創建多個數據文件和多個日誌文件(employees)
create database employees
on primary
(
--主資料庫文件的具體描述
name='employee1',
filename='D:\project\employee1.mdf',
size=10,
filegrowth=10%
),
(
--次要資料庫文件的具體描述
name='employee2',
filename='D:\project\employee2.mdf',
size=20,
maxsize=100,
filegrowth=1
)
log on
(
--日誌文件1的具體描述
name='employeelog1',
filename='D:\project\employee1_log.ldf',
size=10,
maxsize=50,
filegrowth=1
),
(
--日誌文件2的描述
name='employeelog2',
filename='D:\project\empolyee2_log.ldf',
size=10,
maxsize=50,
filegrowth=1
)
go
二:刪除資料庫
usr master
if exists(select * from sysdatabases where name='....')
drop database ......
三:創建和刪除表
use MySchool --在Myschool中創建表
go
create table Student
(
StudentNo int not null. --學號,int 類型,不允許為空
LoginPwd nvarchar(50) not null, --密碼 nvarchar類型,不允許為空
StudentName nvarchar(50) not null, --名字,nvarchar類型,步允許為空
Sex bit not null, --性別,取值0或1
Email nvarchar(20) --郵箱,可為空
)
go
刪除表
use MySchool
go
if exists(select * from sysobjects where naem='Student')
drop table Student
四:創建和刪除約束
主鍵約束(Primary Key Constraint)
非空約束(Not Null)
唯一約束(Unique Constaraint)
檢查約束(Check Constaraint)
預設約束(Default Constaraint)
外建約束(Foreign Key Constarint):用於在兩表之間建立關係,需要指定引用主表的哪一列
alter table 表名
add constraint 約束名 約束類型 具體的約束說明
例:
--添加主鍵約束
alter table Student
add constraint PK_StudentNo Primary Key(StudentNo)
--添加唯一約束
alter table student
add constraint UQ_IdentityCard unique(IdentityCard)
--添加預設約束
alter table Student
add constraint DF_Address default('地址不詳') for address
--添加檢查約束
alter table Student
add constraint CK_BornDate checke(BornDate>='1980-01-01')
--添加外鍵約束(Result是從表,Student是主表)
alter table Result
add constraint FK_StudentNo
foreign key(StudentNo) references Student(StudentNo)
go
刪除約束
alter table 表名
drop constraint 約束名
例:刪除學生表中的預設約束
alter tablte Student
drop constraint DF_Address
怎樣向已存在數據的表中添加約束
alter table Employee with nocheck ( whit nocheck不向已存在的數據約束)
add constraint
向已存在的數據表中插入一列
alter table 表名
add 列名 數據類型 null
在資料庫中用SQL語句創建文件夾(例:在E盤創建一個project文件夾)
exec sp_configure 'show advanced option',1
go
reconfigure
go
exec sp_configure 'xp_cmdshell',1
go
reconfigure
go
exec xp_cmdshell 'mkdir D:\project'
使用變數 數據類型轉換 邏輯控制語句(begin ...end; case...end; if...else; while)
一:變數
變數分為局部變數和全局變數 (全局變數是系統自定的,是不可手動給值的,若想自己定義全局變數可考慮創建全局臨時表!)
局部變數的定義: declare @變數名 數據類型 (局部變數只能用於同一批處理當中!!!!!!!)
全局變數: @@
@@error 最後一個T-SQL語句錯誤的錯誤號
@@identity 最後一次插入的標識值
@@rowcount 受上一個SQL語句影響的行數
@@servicename 該電腦上SQl伺服器的名稱
@@version SQL Server的版本信息
@@transcount 當前連接打開的事務數
@@timeticks 當前電腦上每刻度的微秒數
@@max_connections 可以創建的,同時連接的最大數目
@@language 當前使用的語言的名稱
二:給變數賦值 (set 和seklect)
set和select的區別
1:set不支持多個變數賦值,select支持
2:表達式返回多個值時,set出錯,select返回最後一條數據
3:表達式未返回任何值時,set賦值為null(沒有) select 保持不變
三:輸出語句
print @變數名 或
select @變數名
一般從資料庫中查找數據後賦值使用select賦值方法
四:數據類型轉換
隱式轉換: 類型相同或相相容,自動轉換
顯式轉換: 類型不同,可用convert 函數 或 cast 函數
相同點: 都用於某種數據類型的表達式轉換為另一種數據類型
不同點: 在轉換日期的時候,convert可以轉化為指定的格式
cast (變數名 as 數據類型)
convert(數據類型, 變數名)
五:邏輯控制語句
流程式控制制語句 begin....end
通常使用在if判斷和while迴圈中,相當於C#中的 {}
分支結構 if..else 或
case ...end(多重選擇)
eg:
select 成績=case
when 條件一 then 結果一
when 條件二 then 結果二
else 其他結果(可省略)