優化資料庫設計知識串串燒
為什麼需要規範的資料庫設計
為了規範化資料庫設計,消除不必要的數量冗餘,獲得合理的資料庫設計,提高專案的應用效能,所以,我們很有必要對資料庫進行規範化和優化。
設計資料庫的步驟
a) 收集資訊。就是對我們的專案進行分析時,充分了解要完成哪些功能,需要用到哪些資料;
b) 標識實體。也就是說要對專案開發中參與的物件(有形的事物或無形的事物)進行分類標識;
c) 標識每個實體的實際的屬性。就是說,對我們標識的實體進行屬性分析,並找出來。
例如酒店管理系統的資訊:
房間號客房型別
客房狀態
客房描述
床位數入住人數
**d) 標識實體之間的關係。也就是說找出它們之間存在的關係,並標識之間的聯絡;
繪製e-r圖
矩形表示實體
橢圓表示屬性
菱形表示聯絡集
直線用來連線屬性和實體集,也用來連線實體集和聯絡集的
它們之間的關係可以分為:
一對一關係
一對多關係
多對一關係
多對多關係
資料規範化設計
a) 需求分析:把現實生活中的事物以er圖的方式表現出來
b) 概要設計:把er圖抽象出實際的資料庫模型圖
c) 詳細設計:對實體資訊進行整理建庫
在設計資料庫的時候,首先要考慮著名的三大正規化理論:
第一正規化(1nf,normal formate):最小原子性
第二正規化(2nf):提取相同屬性的列
第三正規化(3nf):建立之間的關係(主外來鍵約束…等)
資料庫的實現
使用t-sql來實現資料庫的操作
a) 資料庫組成:
主資料檔案: *.mdf
次要資料檔案:*.ndf
日誌檔案: *.ldf
第個資料庫至少包含兩個檔案:
1、乙個資料檔案
2、乙個日誌檔案
使用t-sql建立資料庫和刪除資料庫
use master
if exists(select * from sysdatabases where name = 『資料庫名』 )
drop database資料庫名 --刪除資料庫
gocreate database 資料庫名 --建立資料庫
on [primary]
( name = 『資料庫名_data』,
failename = 『檔案存放的路徑\資料庫名_data.mdf』,
size = 初始大小, --例如:5mb
maxsize = 主資料檔案的最大容量, --例如:100mb
filegrowth = 主資料檔案的增長率 --例如:15%
)log on --日誌檔案
( name = 『資料庫名_log』,
failename = 『檔案存放的路徑\資料庫名_ log.ldf』,
size = 初始大小, --例如:1mb
filegrowth = 主資料檔案的增長率 --例如:1mb)go
使用t-sql建立表和刪除表
use 資料庫名
if exists(select * from sysobjects where name = 『表名』 )
drop table 表名 --刪除表
gocreate table 表名 --建立表
(欄位名型別(長度) 是否為空
)示例:
use myschool
if exists(select * from sysobjects where name = 『student』 )
drop table student --刪除表
gocreate table student --建立表
( studentno int not null ,
studentname nvarchar(50) not null,
*** bit not null,
loginpwd varchar(20) not null,
phone nvarchar(50),
gradeid int not null,
address nvarchar(255),
borthdate datetime not null,
email nvarchar(50) null,
identitycard varchar(18) not nul
) 新增約束和刪除約束
新增主鍵約束
alter table student
add constraint pk_stuno primary key (studentno)
go 新增唯一約束
alter table student
add constraction uq_stuid unique (identitycard)
go新增預設約束
alter table student
add constraint df_stuaddress default (『位址不詳』) for address
go新增檢查約束
alter table student
add constraint ck_stuborthdate check (borthdate >= 『1980-01-01』)
go 新增外來鍵約束
alter table result
add constraint fk_stuno
foreign key(studentno) references student (studentno)--外來鍵表在前,主表在後
go 刪除約束
alter table 表名
drop constraint 約束名
go使用sql程式設計
變數1、區域性變數
declare @變數名型別(長度)
例如: declare @name varchar(50)
declare @number int
注:宣告變數是用declare 關鍵字來宣告的,並且變數名前面一定要用@這個符號
區域性變數的賦值有兩種方法,使用set語句或者select語句。
語法set @變數名 =值或 select @變數名 = 值
例如: set @name = 『張三』
select @name = studentname from student where studentname = 『張三』
注: set賦值語句一般用於賦給變數指定的資料常量。
select賦值語句一般用於從表中查詢資料,然後再賦給變數。需要注意的是,select語句需要確保篩
選的記錄不多於一條。如果查詢的記錄多於一條,將把最後一條記錄的值賦給變數。
2、全域性變數
sql server中所有的全域性變數都使用兩個@@符號作為字首;全域性變數是sql server系統內部使用的變數,其作用範圍並不僅僅侷限於某一程式,而是任何程式均可以隨時呼叫,不需要程式設計師來定義。
其名稱和作用如下:
@@connections
返回自上次啟動以來連線或試圖連線的次數。
@@cursor_rows
返回連線上最後開啟的游標中當前存在的合格行的數量(返回被開啟的游標中還未被讀取的有效資料行的行數)
@@datefirst
返回每週第一天的數字
@@error
返回最後執行的sql 語句的錯誤**。
@@fetch_status
返回被 fetch 語句執行的最後游標的狀態,而不是任何當前被連線開啟的游標的狀態。
@@identity
返回最後插入的標識值
@@langid
返回當前所使用語言的本地語言識別符號(id)。
@@language
返回當前使用的語言名。
@@lock_timeout
返回當前會話的當前鎖超時設定,單位為毫秒。
@@procid
返回當前過程的儲存過程識別符號 (id) 。
@@rowcount
返回受上一語句影響的行數。
@@servername
返回執行的本地伺服器名稱。
@@spid
返回當前使用者程序的伺服器程序識別符號 (id)。
@@trancount
返回當前連線的活動事務數。
@@version
返回當前安裝的日期、版本和處理器型別。
@@cpu_busy
返回自sql server 最近一次啟動以來cpu 的工作時間其單位為毫秒
@@datefirst
返回使用set datefirst 命令而被賦值的datafirst 引數值set datefirst,命令用來指定每週的第一天是星期幾
@@dbts
返回當前資料庫的時間戳值必須保證資料庫中時間戳的值是惟一的
@@error
返回執行transact-sql 語句的錯誤**
@@fetch_status
返回上一次fetch 語句的狀態值
@@idle
返回自sql server 最近一次啟動以來cpu 處於空閉狀態的時間長短單位為毫秒
@@io_busy
返回自sql server 最近一次啟動以來cpu 執行輸入輸出操作所花費的時間其單位為毫秒
@@langid
返回當前所使用的語言id 值
@@language
返回當前使用的語言名稱
@@lock_timeout
返回當前會話等待鎖的時間長短其單位為毫秒
@@max_connections
返回允許連線到sql server 的最大連線數目
@@max_precision
返回decimal 和numeric 資料型別的精確度
@@nestlevel
返回當前執行的儲存過程的巢狀級數初始值為0
@@options
返回當前set 選項的資訊
@@pack_received
返回sql server 通過網路讀取的輸入包的數目
@@pack_sent
返回sql server 寫給網路的輸出包的數目
@@packet_errors
返回網路包的錯誤數目
@@procid
返回當前儲存過程的id 值
@@remserver
返回遠端sql server 資料庫伺服器的名稱
@@servicename
返回sql server 正執行於哪種服務狀態之下如mssqlserver msdtc sqlserveragent
@@spid
返回當前使用者處理的伺服器處理id 值
@@textsize
返回set 語句的textsize 選項值set 語句定義了select 語句中text 或image資料型別的最大長度基本單位為位元組
@@timeticks
返回每一時鐘的微秒數
@@total_errors
返回磁碟讀寫錯誤數目
@@total_read
返回磁碟讀操作的數目
@@total_write
返回磁碟寫操作的數目
@@trancount
返回當前連線中處於啟用狀態的事務數
輸出語句
print語句和select語句
語法print 區域性變數或字串
select 區域性變數 as 自定義列名
用print語句輸出的結果將在訊息框中以文字方式顯示,用select語句輸出的結果將在結果視窗以**方式顯示。
使用print語句要求以單個變數或字串表示式作為引數,而 "+" 運算子作為連線兩個字串的連線符,要求"+" 運算子兩側的運算元的資料型別必須一致。
注:print 是以訊息的方式顯示結果
select 是以**的方式顯示結果
資料型別轉換:
cast()和convert()函式
語法:cast(表示式 as 資料型別)
convert(資料型別[(長度)],長度[,樣式])
邏輯控制語句
begin-end語句
語法begin
語句或語句塊
endif-else條件語句
語法:if(條件)
begin
語句或語句塊1
endelse
begin
語句或語句塊2
endwhile迴圈語句
語法while(條件)
begin
語句或語句塊
[break|continue]end
資料庫優化總結
一 資料庫整體優化 1 伺服器的硬體效能 cpu,磁碟,記憶體 2 減少io操作。1 io操作是快取操作用時的一萬倍。通過對資料庫的快取設定,減少io操作。快取配置檔案oracle product 10.2.0 db 1 srvm admin init.ora 2 從業務和 端減少對資料庫的訪問。3...
優化Oracle資料庫效能
4.調整伺服器記憶體分配記憶體分配是在資訊系統執行過程中優化配置的。資料庫管理員根據資料庫的執行狀況不僅可以調整資料庫系統全域性區 sga區 的資料緩衝區 日誌緩衝區和共享池的大小,而且還可以調整程式全域性區 pga區 的大小。5.調整硬碟i o 這一步是在資訊系統開發之前完成的。資料庫管理員可以將...
Oracle資料庫知識總結
ad1.執行乙個sql指令碼檔案 sql start file name sql file name 我們可以將多條sql語句儲存在乙個文字檔案中,這樣當要執行這個檔案中的所有的sql語句時,用上面的任一命令即可,這類似於dos中的批處理。4.將顯示的內容輸出到指定檔案 sql spool file...