Caùc Ñoái Töôïng Cô Sôû Döõ Lieäu: CHÖÔNG 3. SQL Primer: Data Definition Language (DDL)
Caùc Ñoái Töôïng Cô Sôû Döõ Lieäu: CHÖÔNG 3. SQL Primer: Data Definition Language (DDL)
I. TAÏO CÔ SÔÛ DÖÕ LIEÄU: Ñeå taïo ñöôïc cô sôû döõ lieäu, ta login vaøo vôùi
loginname laø sa hay vôùi 1 loginname coù quyeàn taïo cô sôû döõ lieäu.
Cuù phaùp: Create Database <tenCSDL>
Ví duï1: Create Database QLVT
- Treân dóa seõ coù 2 files: qlvt_data.mdf vaø qlvt_log.ldf
Ngoaøi ra, ta coù theå chæ ñònh caùc tham soá caàn thieát cho vieäc taïo cô sôû döõ
lieäu, chaúng haïn nhö:
Create Database QLVT
On Primary
( Name = Qlvt1,
Filename = 'c:\thu\data\qlvt1.mdf' ,
Size = 10MB ,
MaxSize = 100MB,
FileGrowth = 10MB)
Log On
( Name = QlvtlLog,
Filename = 'c:\thu\data\qlvt1_log.ldf' ,
Size = 10MB ,
MaxSize = 100MB,
FileGrowth = 10MB)
Caùc giaù trò maëc ñònh:
- Size: döïa vaøo kích thöôùc cuûa file model.mdf
- MaxSize : khoâng giôùi haïn
- FileGrowth : 10%
b. Table Kho:
Field Name Type Constraint
MAKHO nChar(2) Primary Key
TENKHO nvarchar(30) Unique, Not Null
DIACHI nvarchar(70) Not Null
c. Table Vattu:
Field Name Type Constraint
MAVT nChar(4) Primary Key
TENVT nvarchar(30) Unique, Not Null
DVT nvarchar(15) Default : ‘ ‘
Chöông 3 - Data Definition Language 64
d. Table Phatsinh:
Field Name Type Constraint
PHIEU nChar(8) Primary Key
NGAY DateTime Default : GETDATE()
LOAI nChar(1) chæ nhaän ‘N’, ‘X’, ‘T’, ‘C’
Default : ‘N’
HOTEN nvarchar (40) Description: ho ten khach hang
THANHTIEN money Default : 0, THANHTIEN >=0
MANV int Foreign key
-Table CT_Phatsinh:
Field Name Type Properties
PHIEU nChar(8) Foreign key
MAVT nChar(4) Foreign key
SOLUONG int >0
DONGIA money >0
MAKHO nChar(2) Foreign Key
LYDO nvarchar(30)
Khoùa chính : PHIEU+MAVT
Cuù phaùp: Ta xem cuù phaùp cuûa leänh Taïo Table qua ví duï sau:
Ví duï 2: Taïo table Vattu vôùi khoùa chính laø MAVT.
USE QLVT
Create Table Vattu
( MAVT nChar (4) Not Null ,
TENVT nVarChar (30) unique Not Null,
DVT nVarChar (15) Default ' '
Constraint PK_Vattu Primary Key (MAVT) )
- Theâm raøng buoäc veà khoùa ngoaïi treân field MAKHO cuûa table CT_PhatSinh.
Alter Table QLVT.dbo.CT_PhatSinh
Add Constraint FK_CTPS_KHO Foreign Key (MAKHO)
References dbo.KHO(MAKHO)
Löu yù: Ñeå kieåm tra taát caû caùc records ñaõ coù trong table phaûi thoûa 1 raøng
buoäc naøo ñoù thì ta theâm vaøo tuøy choïn With Check
Ví duï 7: Alter Table QLVT.dbo.CT_PhatSinh
With check
Check Constraint FK_CTPS_KHO
Chöông 3 - Data Definition Language 66
* Theâm, Xoùa, thay ñoåi field trong Table:
- Theâm 1 field :
Ví duï 8: Theâm Field Dongia vaøo Table Vattu
Alter Table QLVT.dbo.Vattu
Add Dongia Int Check ( Dongia > 0)
- Thay ñoåi kieåu cuûa Field
Ví duï 9: Cho ñoä roäng cuûa TENVT laø 40 kyù töï
Alter Table QLVT.dbo.VATTU
Alter Column TENVT Varchar (40) Not Null
Löu yù: ta khoâng theå thay ñoåi treân caùc field coù kieåu Text, Image, Timestamp,
caùc field töï ñoäng tính vaø caùc field duøng trong vieäc nhaân baûn döõ lieäu. Ta
cuõng khoâng theå thay ñoåi treân caùc field coù duøng trong field töï ñoäng tính,
duøng trong 1 raøng buoäc hay trong 1 chæ muïc.
- Xoùa 1 field:
Ví duï 10: Xoùa field DONGIA trong table VATTU
Alter Table QLVT.dbo.VATTU
Drop Column Dongia
* Xoùa Table: xoùa table VATTU khoûi cô sôû döõ lieäu QLVT.
Drop Table QLVT.dbo.VATTU
III. TAÏO VIEW: Trong SQL, 1 view laø 1 ñoái töôïng xuaát hieän nhö table aûo ñeå
user thöïc hieän 1 query hay thöïc hieän trong 1 chöông trình öùng duïng. Tuy nhieân,
view khoâng chöùa döõ lieäu. Thay vì vaäy, view ñöôïc ñònh nghóa treân 1 hay
nhieàu table cô sôû (hay treân caùc view khaùc), vaø vì vaäy ta coù theå xem nhö view
laø 1 phöông tieän ñeå truy nhaäp tôùi caùc table cô sôû. Ta coù theå duøng View
thöïc hieän caùc vieäc sau:
- Choïn ra 1 taäp caùc records trong 1 table cô sôû
- Taïo ra caùc coät môùi döïa treân caùc coät ñaõ coù trong caùc table cô sôû
- Keát noái nhieàu records töø caùc table cô sôû thaønh 1 record trong view
- Noái caùc record töø nhieàu table
- Thay ñoåi döõ lieäu treân table .
Ví duï 11: Choïn ra caùc nhaân vieân Nam trong cô sôû döõ lieäu QLVT
Create View V_NV_nam
As
Select * From Nhanvien
Where Phai='Nam'
Hay:
Create View V_NV_nam As
Select * From [QLVT].dbo.Nhanvien
Where Phai='Nam'
Sau khi cho leänh naøy thöïc hieän, ta seõ coù 1 View teân V_NV_Nam trong ñoái
töôïng View. Vaø töø ñaây veà sau, ta coù theå duøng noù nhö 1 table trong 1 phaùt
bieåu SQL khaùc.
Ví duï 12: Taêng löông nam nhaân vieân teân Thu theâm 1%
Update V_NV_Nam
Chöông 3 - Data Definition Language 67
Set Luong = Luong + Luong *0.01
Where Ten=’Thu’
Ta löu yù raèng trong ñieàu kieän cuûa leänh Update ta khoâng ñöa vaøo ñieàu kieän
Phai='Nam' vì ñieàu kieän naøy ta ñaõ coù trong View V_NV_Nam, vaø do ñoù, ta
seõ keá thöøa ñieàu kieän Phai='Nam' trong caâu leänh Update.
Ví duï 13: Taïo View teân NV_Nam_Luong2000000 chöùa caùc nam nhaân vieân coù
löông 2000000 ñoàng
Create View NV_Nam_Luong2000000 AS
SELECT * FROM NV_NAM WHERE LUONG =2000000
Chöông 3 - Data Definition Language 68
* Döõ lieäu trong View coù theå laáy töø nhieàu Table:
Ví duï 14. Taïo view teân Vattu_Nhap coù caùc coät sau: Soá phieáu, Teân vt,
Solg, dongia, teân kho, Hoï NV, Teân NV
Create View Vattu_Nhap As
Select dbo.Phatsinh.Phieu, Tenvt, Soluong, dongia, Ho, Ten
From dbo.Phatsinh, dbo.CT_Phatsinh,
dbo.Vattu, dbo.Nhanvien
Where dbo.Phatsinh.Phieu = dbo.CT_Phatsinh.Phieu
AND dbo.CT_Phatsinh.MAVT = dbo.Vattu.MAVT
AND dbo.Phatsinh.MANV = dbo.Nhanvien.MANV
AND Loai = 'N'
* Neáu meänh ñeà Select trong 1 view coù duøng Group by thì view ñoù coù thuoäc tính
Read Only.
Ví duï 15: Taïo View teân TriGia_Phieu cho bieát trò giaù cuûa caùc phieáu ñaõ
laäp.
Create View TriGia_Phieu (Phieu, Thanhtien) As
Select Phieu, Sum(SOLG * DONGIA)
From CT_Phatsinh
Group By Phieu
* View chöùa Subquery cuõng coù thuoäc tính ReadOnly
* With Check Option: Neáu trong View coù theâm tuøy choïn With Check Option thì
caùc leänh Insert, Update treân view naøy seõ khoâng thöïc hieän treân caùc Field
laøm vi phaïm ñieàu kieän cuûa View.
Ví duï 16: Ta coù View sau:
Create View NV_nam As
Select * From [QLVT].dbo.Nhanvien
Where Phai='Nam'
With Check Option
thì caâu leänh sau seõ khoâng thöïc hieän:
Update Nv_nam
Set Phai ='Nu'
Löu yù: Tuøy choïn naøy seõ aûnh höôûng treân taát caû View ñöôïc taïo töø View
chöùa noù.
* Derived Column : field môùi ñöôïc xaây döïng töø caùc field ñaõ coù .
Ví duï 17: Taïo View gheùp hoï vaø teân nhaân vieân laïi thaønh 1 field
Create View dbo.Luong_nv As
Select MANV, HOTEN=HO + ' '+ TEN , LUONG From Nhanvien
Click Search, để chọn User hoặc Role: click nút Browse để tìm danh sách các
User/Role
Chöông 3 - Data Definition Language 70
Sau đó, ta đánh dấu check trên từng quyền muốn cấm (Deny) hoặc cho phép (Grant)
Ngoaøi ra, ta coøn coù theå thöïc hieän vieäc caáp/ xoùa quyeàn qua leänh Grant /
Revoke
1. Caáp quyeàn:
Grant <danh saùch caùc quyeàn>
On <teân ñoái töôïng>
To <danh saùch caùc users>
- Baûng sau ñaây cho ta bieát töø khoùa söû duïng trong danh saùch caùc quyeàn :
Töø khoùa Leänh Sql ñöôïc quyeàn thöïc hieän hay bò caám thöïc hieän
Chöông 3 - Data Definition Language 71
treân ñoái töôïng
Delete Delete
Insert Insert
References Add 1 Foreign Key
Select Select , Create View
Update Update
With Grant Grant
Option Revoke
All Taát caû caùc leänh
- Teân ñoái töôïng : coù theå laø teân cuûa table, view, Stored Procedure
Ví duï 19: Cho user lnkthu chæ ñöôïc quyeàn xem döõ lieäu treân caùc table
Nhanvien
Grant Select
On Nhanvien
To lnkthu
2. Thu hoài quyeàn:
Revoke <danh saùch caùc quyeàn>
On <teân ñoái töôïng>
To <danh saùch caùc users>
* Column-Level Security:
Leänh Grant/ Revoke coøn cho pheùp ta caáp quyeàn treân töøng Field cuûa table.
Ñieàu naøy seõ giuùp ngöôøi quaûn trò cô sôû döõ lieäu baûo maät döõ lieäu cao hôn.
Ví duï 20: Cho user lnkthu chæ ñöôïc quyeàn hieäu chænh döõ lieäu treân caùc
field (HO, TEN, PHAI, DIACHI, NGAYSINH, GHICHU) cuûa table Nhanvien.
Grant Select
(MANV, HO, TEN, PHAI, DIACHI, NGAYSINH, LUONG, GHICHU)
On Nhanvien
To lnkthu
Grant Update
(HO, TEN, PHAI, DIACHI, NGAYSINH, GHICHU)
On Nhanvien
To lnkthu
Caùc leänh SQL sau coù theå duøng ñöôïc trong leänh Grant/Revoke:
Create Database, Create Table, Create View, Create Procedure, Create Default,
Create Rule, Backup Database, Backup Log.
Löu yù: Trong moãi cô sôû döõ lieäu ñeàu coù 1 taäp caùc table heä thoáng, caùc
table naøy löu tröõ caùc thoâng tin maø ta ñaõ moâ taû trong quaù trình taïo cô sôû
Chöông 3 - Data Definition Language 72
döõ lieäu (caáp phaùt vuøng nhôù cho cô sôû döõ lieäu, caùc coät cuûa table, caùc
raøng buoäc, vaø chæ muïc…. )
Baûng sau ñaây cho ta bieát caùc table heä thoáng ñoù (goïi laø catalog)
Table Noäi dung
sysallocations Caáp phaùt vuøng nhôù cho file cô sôû döõ
lieäu
syscolumns Moâ taû ñònh nghóa caùc coät
syscomments Moâ taû views, rules, default, trigger, check
constraint, vaø Stored Procedure.
sysconstraint Aùnh xaï caùc constraint tôùi caùc ñoái
töôïng.
sysfiles, sysfiles1 Thoâng tin veà teân file cô sôû döõ lieäu
treân dóa, vaø vò trí cuûa chuùng
sysforeignkeys Caùc ñònh nghóa veà khoùa ngoaïi
sysmembers Thoâng tin veà thaønh vieân cuûa nhoùm
sysusers Chöùa caùc user vaø caùc roles
VI. TAÏO DIAGRAMS: Diagram laø ñoái töôïng duøng ñeå taïo, quaûn lyù, vaø xem
caùc ñoái töôïng cô sôû döõ lieäu döôùi daïng ñoà hoïa. Khi ta taïo caùc khoùa ngoaïi
thì thöïc chaát ta ñaõ thieát laäp ñoái töôïng diagram baèng leänh.
Khi taïo caùc moái quan heä giöõa caùc table treân diagram, SQL Server seõ töï
ñoäng phaùt sinh caùc trigger kieåm tra caùc raøng buoäc döõ lieäu veà khoùa ngoaïi
töông öùng, vaø ñieàu naøy giuùp baûo veä söï toaøn veïn veà döõ lieäu.
Caùch taïo:
Right click treân ñoái töôïng Diagram/ New Database Diagram, chọn caùc table
caàn taïo moái quan heä, sau ñoù ta duøng mouse drag teân field quan heä ôû table
naøy qua field ôû table kia.
Sau khi hoaøn thaønh, ta coù diagram sau:
Chöông 3 - Data Definition Language 73
Löu yù: Trong diagram, ta coù theå hieån thò caáu truùc cuûa table theo nhieàu
daïng khaùc nhau, vaø theâm vaøo caùc chuù giaûi.