Your SlideShare is downloading. ×
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Hệ quản trị cơ sở dữ liệu tạ thị thu phượng[bookbooming.com]

251
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
251
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. TRƯỜNG ĐẠI HỌC ĐÀ LẠT KHOA TOÁN - TIN HỌCHỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU (Baøi giaûng toùm taét) NGƯỜI BIÊN SOẠN TẠ THỊ THU PHƯỢNG Ñaø Laït 2009
  • 2. M CL CChương 1: T ng quan v H qu n tr cơ s d li u .....................................Trang 1I. Gi i thi u................................................................................................................1II. C u trúc và thành ph n c a h qu n tr cơ s d li u ............................................2Chương 2: Xây d ng, qu n lý và khai thác cơ s d li u.........................................5I. Khái ni m cơ s d li u .........................................................................................5II. T o cơ s d li u. ...................................................................................................5III. Ki u d li u. ...........................................................................................................6IV. T o và qu n lý b ng. .............................................................................................7V. Các thao tác trên d li u.......................................................................................11VI. Truy v n d li u ...................................................................................................12VII. T o và s d ng khung nhìn (View)......................................................................14VIII. T o và s d ng ch m c (Index)...........................................................................14IX. Chuy n i d li u v i các ng d ng khác..........................................................18Chương 3: T-SQL nâng cao ......................................................................................19I. Khai báo và s d ng bi n .....................................................................................19II. C u trúc i u khi n...............................................................................................20III. Th t c thư ng trú (Stored Procedures)...............................................................22IV. Ki u d li u cursor ...............................................................................................26V. Hàm ngư i dùng (User Defined Functions).........................................................32VI. Triggers và cài t ràng bu c d li u ...................................................................35Chương 4: B o m t và an toàn d li u .....................................................................40I. B o m t trong h qu n tr cơ s d li u ..............................................................40II. B n sao d li u .....................................................................................................46III. Sao lưu và khôi ph c d li u ...............................................................................59IV. Qu n lý giao d ch .................................................................................................61Chương 5: L p trình cơ s d li u............................................................................92I. L p trình ADO.NET.............................................................................................92II. Thi t k ch c năng c/ ghi d li u .....................................................................95III. T o báo bi u v i Crystal Report ..........................................................................98Bài t p ........................................................................................................................105
  • 3. Bài gi ng tóm t t H qu n tr cơ s d li u 1 Chương 1 T NG QUAN V H QU N TR CƠ S D LI UI. Gi i thi u Thông tin là ngu n tài nguyên quý giá c a m t t ch c. Các ph n m m máy tính lành ng công c hi u qu x lý thông tin và h qu n tr cơ s d li u là công c phbi n cho phép lưu tr và rút trích thông tin m t cách hi u qu . H qu n tr cơ s d li u quan h là h qu n tr cơ s d li u ph bi n nh t hi n nayvà ư c h tr b i nhi u nhà cung c p ph n m m. Tính hi u qu c a các ng d ng phthu c vào ch t lư ng c a vi c t ch c d li u. Nh ng c i ti n trong k thu t và x lý cơs d li u ưa n các cơ h i s d ng thông tin m t cách linh ho t và hi u qu khi d li u ư c t ch c và lưu tr trong các c u trúc quan h . H qu n tr cơ s d li u là m t thànhcông trong lĩnh v c thương m i.M c tiêu c a h qu n tr cơ s d li u. H qu n tr cơ s d li u ph i m b o các m c tiêu sau: d li u s n dùng (dataavailability), tính toàn v n d li u (data integrity), an toàn d li u (data secutity), và cl p d li u (data independency). o D li u s n dùng (data availability): d li u ư c t ch c sao cho m i ngư i dùng có th truy c p d dàng theo ch c năng và nhi m v c a h . o Tính toàn v n d li u (data integrity): d li u lưu tr trong cơ s d li u là úng n, áng tin c y. o An toàn d li u (data secutity): Ch nh ng ngư i dùng ư c phép m i có th truy c p d li u. N u nhi u ngư i dùng truy c p chung m t m c d li u cùng lúc thì h qu n tr cơ s d li u không cho phép h th c hi n nh ng thay i gây mâu thu n d li u. o c l p d li u (data independency): h qu n tr cơ s d li u ph i cho phép t t c m i ngư i dùng ư c phép lưu tr , c p nh t và rút trích d li u hi u qu mà không c n n m chi ti t v c u trúc c a cơ s d li u ư c bi u di n và cài t.Quá trình phát tri n c a h qu n tr cơ s d li u. Quá trình phát tri n c a DBMS như sau: − Flat files: 1960s – 1980s − Hierarchical: 1970s –1990s − Network : 1970s – 1990s − Relational: 1980s – n nay − Object-oriented: 1990s – n nay
  • 4. Bài gi ng tóm t t H qu n tr cơ s d li u 2 − Object-relational: 1990s – n nay − Data warehousing: 1980s – n nay − Web-enabled: 1990s – n nayII. C u trúc và thành ph n c a h qu n tr cơ s d li u. Forms Application SQL Interface Front ends SQL Commands Query Parser Plan Executor Execution Engine Optimizer Operator Evaluator Concurrency Control File and Access Transaction Methods Manager Recovery Buffer Manager Lock Manager Manager Disk Space Manager DBMS Index System DATABASE Files Data catalog Files Hình 1.1 Ki n trúc c a DBMSKi n trúc c a h qu n tr cơ s d li u g m 2 thành ph n ch c năng: o B qu n lý lưu tr (Storage manager). o B X lý truy v n (Query Processor).1. B qu n lý lưu trB qu n lý lưu tr có nhi m v lưu tr , rút trích và c p nh t d li u vào cơ s d li u. Bqu n lý lưu tr g m có các ơn v sau: − Ki m tra ch ng th c và toàn v n. − Qu n lý giao d ch . − Qu n lý file.
  • 5. Bài gi ng tóm t t H qu n tr cơ s d li u 3 − Qu n lý vùng m.Qu n lý giao d ch (Transaction management) Thông thư ng, m t s thao tác trên cơ s d li u t o thành m t ơn v logic công vi c.Ta hãy xét ví d chuy n kho n, trong ó m t s ti n x ư c chuy n t tài kho n A(A:=A-x) sang m t tài kho n B (B:=B+x). M t y u t c n thi t là c hai thao tác này ho ccùng x y ra ho c không ho t ng nào x y ra c . Vi c chuy n kho n ph i x y ra trongtính toàn th c a nó ho c không. Yêu c u toàn th -ho c-không này ư c g i là tínhnguyên t (atomicity). M t y u t c n thi t khác là s th c hi n vi c chuy n kho n b otoàn tính nh t quán c a cơ s d li u: giá tr c a t ng A + B ph i ư c b o toàn. Yêu c uv tính chính xác này ư c g i là tính nh t quán (consistency). Cu i cùng, sau khi th chi n thành công ho t ng chuy n kho n, các giá tr c a các tài kho n A và B ph i b nv ng cho dù có th có s c h th ng. Yêu c u v tính b n v ng này ư c g i là tính lâub n (durability). M t giao d ch là m t t p các ho t ng th c hi n ch m t ch c năng logic trong m t ng d ng cơ s d li u. M i giao d ch là m t ơn v mang c tính nguyên t l n tính nh tquán. Như v y, các giao d ch ph i không ư c vi ph m b t kỳ ràng bu c nh t quán nào:N u cơ s d li u là nh t quán khi m t giao d ch kh i ng thì nó cũng ph i là nh tquán khi giao d ch k t thúc thành công. Tuy nhiên, trong khi ang th c hi n giao d ch,ph i cho phép s không nh t quán t m th i. S không nh t quán t m th i này tuy là c nthi t nhưng l i có th d n n các khó khăn n u x y ra s c . Trách nhi m c a ngư i l p trình là xác nh úng n các giao d ch sao cho b o toàntính nh t quán c a cơ s d li u. m b o tính nguyên t và tính lâu b n là trách nhi m c a h cơ s d li u nói chungvà c a thành ph n qu n tr giao d ch (transaction-management component ) nói riêng.N u không có s c , t t c giao d ch hoàn t t thành công và tính nguyên t ư c hoànthành d dàng. Tuy nhiên, do s hi n di n c a các s c , m t giao d ch có th không hoànt t thành công s th c hi n c a nó. N u tính nguyên t ư c m b o, m t giao d ch th tb i không gây nh hư ng n tr ng thái c a cơ s d li u. Như v y, cơ s d li u ph i ư c hoàn l i tr ng thái c a nó trư c khi giao d ch b t u. H qu n tr cơ s d li u ph icó trách nhi m phát hi n s c h th ng và tr l i cơ s d li u v tr ng thái trư c khi x yra s c . Khi m t s giao d ch tương tranh c p nh t cơ s d li u, tính nh t quán c a d li u cóth không ư c b o toàn, ngay c khi m i giao d ch là chính xác. B qu n tr i u khi ntương tranh (concurency-control manager) có trách nhi m i u khi n các tương tác gi acác giao d ch ng th i m b o tính th ng nh t c a CSDL.
  • 6. Bài gi ng tóm t t H qu n tr cơ s d li u 4Thành ph n Ki m tra ch ng th c và toàn v n (Authorization and Integrity Manager)Ki m tra ràng bu c toàn v n và quy n truy c p d li u c a ngư i dùng cơ s d li u.Thành ph n qu n lý giao d ch (Transaction manager)Thành ph n này m b o r ng cơ s d li u luôn tr ng thái nh t quán. Nó qu n lý vi cth c thi các yêu c u thao tác d li u và m b o các truy c p d li u ng th i không d n n mâu thu n.Thành ph n qu n lý file (File manager): qu n lý vi c c p phát không gian trên ĩa. Cácfile ư c dùng ch a t p các d li u tương t nhau. H qu n lý file qu n lý các file cl p, giúp nh p và l y các m u tin. Thành ph n qu n lý file thi t l p và duy trì danhsách các c u trúc và ch m c ư c nh nghĩa trong lư c trong. Thành ph n qu n lýfile có th : o T o file. o Xóa file. o C p nh t m u tin trong file. o L y m t m u tin t m t file.Thành ph n qu n lý vùng m (Buffer Manager): có trách nhi m chuy n d li u t ĩalưu tr vào b nh chính theo yêu c u c a chương trình.2. B x lý truy v n (Query Processor)Th c hi n câu truy v n nh n ư c t ngư i dùng qua các giai o n phân tích (parser), t iưu hóa câu h i (query optimizer), l p k ho ch th c hi n (plan executor) và th c hi n tínhtoán (operator evaluator).
  • 7. Bài gi ng tóm t t H qu n tr cơ s d li u 5 Chương 2 XÂY D NG, QU N LÝ VÀ KHAI THÁC CƠ S D LI U I. Khái ni m cơ s d li u • m c logic, m t cơ s d li u (CSDL) g m: − Các b ng (tables) ch a d li u có c u trúc và các ràng bu c (constraint) nh nghĩa trên các b ng. − Các khung nhìn (view). − Các th t c/ hàm. − Các vai trò (role) và ngư i dùng (user). − … • m c lưu tr v t lý, m t database c a SQL Server ư c lưu tr b i 3 lo i t p tin: − T p tin d li u (data file) g m có: 1 t p tin d li u chính (primary data file), thư ng có ph n m r ng “mdf”: ch a các d li u kh i u c a database. 0-n t p tin d li u th c p (secondary data file), thư ng có ph n m r ng “ndf”: ch a các d li u không lưu tr h t trong t p tin d li u chính. − T p tin nh t ký giao tác (transaction log file) g m có 1-n t p tin nh t ký, thư ng có ph n m r ng “ldf”: ch a các thông tin v nh t ký giao tác, dùng ph c h i database sau khi x y ra s c .II. T o cơ s d li u 1. Cú pháp l nh t o CSDL Create Database database_name [ On [Primary] { file_spec [,…n] } ] [ Log on { file_spec [,…n] } ] v i file_spec :: = ( Name = logical_file_name, Filename = os_file_name
  • 8. Bài gi ng tóm t t H qu n tr cơ s d li u 6 [ , Size = size ] [ , Maxsize = { max_size | Unlimited } ] [ , Filegrowth = growth_increment ] ) M c nh, các t p tin d li u và log ư c lưu trong thư m c MSSQL Data c a thư m c cài t SQL Server. Ví d • Ví d 1: t o CSDL QLSinhVien theo các quy nh m c nh c a SQL Server Create Database QLSinhVien • Ví d 2: t o CSDL QLSinhVien v i khai báo tên file logic, thư m c lưu t p tin d li u chính, kích thư c, … Create Database QLSinhVien On ( Name = QLSV_Data Filename = ‘C: ... QLSV_Data.mdf ’, Size = 1, Filegrowth = 10% ) • Ví d 3 Create Database QLSinhVien On ( Name = QLSV_Data1, Filename = ‘C: ... QLSV_Data.mdf ’, Size = 1, Maxsize = 10 MB, Filegrowth = 1 MB ) , ( Name = QLSV_Data2 , Filename = ‘C:...QLSV_Data1.ndf’ ) Log on ( Name = QLSV_Log, Filename = ‘D:...QLSV_Log.ldf’) 2. Xoá m t CSDL ã t n t i Drop Database database_name 3. Thay i m t CSDL Alter Database database_name …. Dùng : – Thêm/xoá/thay i các t p tin. – Thay i các tùy ch n cho CSDL.III. Ki u d li u SQL Server cung c p các ki u d li u: 1. S – S nguyên: bit, tinyint, smallint, int, bigint.
  • 9. Bài gi ng tóm t t H qu n tr cơ s d li u 7 – S th c Floating point: o float(n) o real = float(24) Fixed point o Decimal(p,s) o Numeric(p,s) 2. Chu i char(n): chu i có dài c nh. nchar(n): chu i (theo mã Unicode) có dài c nh. varchar(n): chu i có dài thay i. nvarchar(n): chu i (theo mã Unicode) có dài thay i. text: ki u d li u cho phép ch a chu i có kích thư c hơn 8KB. ntext: ki u d li u cho phép ch a chu i (theo mã Unicode) có kích thư c hơn 8KB. 3. Ngày gi Datetime. Smalldatetime 4. Ki u ngư i dùng t nh nghĩa a. nh nghĩa m t ki u d li u: sp_addtype type_name, system_type [, ‘null_type’][, ‘owner’] Ví d : nh nghĩa ki u d li u Code là ki u chu i g m 10 ký t cho phép tr ng Exec sp_addtype Code, char(10), ‘NULL’ b. Xóa m t ki u d li u ngư i dùng nh nghĩa: sp_droptype ‘type_name’IV. T o và qu n lý b ng 1. T o b ng – Xác nh các c t (các thu c tính) c a b ng. – Xác nh khóa chính. – Xác nh các thu c tính null/ not null. – Xác nh thu c tính identity (n u có) (ph i là ki u s nguyên). Lưu ý: – Luôn t o khóa chính cho m t b ng. – Ràng bu c khóa ngo i nên ư c t o sau khi ã t o xong t t c các b ng liên quan. a. Cú pháp l nh t o b ng
  • 10. Bài gi ng tóm t t H qu n tr cơ s d li u 8 Create table Table_name ( { Column_name Data_type [null | not null] [default default_value ] [identity [( seed, increment)] ] } [,…n] [, constraint constraint_name primary key ( Column_name [,…n] ) ] )Ví d : T o b ng h c sinh có khóa chính là (STT, Lop) Create table HOCSINH ( STT tinyint not null, Lop char(5) not null default ‘11A1’ , HoTen nvarchar(30) not null, NgaySinh datetime not null, DiaChi nvarchar(100), constraint pk_HS primary key (STT, Lop) ) b. Thay i c u trúc b ng / xóa b ng Thay i c u trúc b ng là th c hi n: – Thêm/ xoá/ c p nh t ki u d li u c a m t c t (column). – Thêm/ xoá/ ki m tra/ không ki m tra ràng bu c (constraint). – Cho phép/ không cho phép trigger ho t ng. Cú pháp: Alter table <tên_b ng> … Xóa b ng: xoá d li u và c u trúc c a b ng Cú pháp: Drop table <tên_b ng>Ví d − Thêm thu c tính DanToc vào b ng HOCSINH: Alter table HOCSINH Add DanToc nvarchar(20) null default ‘Kinh’ − S a ki u d li u c a thu c tính NgaySinh thành ki u SmallDatetime: Alter table HOCSINH Alter column NgaySinh SmallDatetime not null2. Qu n lý b ng − Các tên b ng, tên ràng bu c không ư c trùng nhau trong cùng m t database.
  • 11. Bài gi ng tóm t t H qu n tr cơ s d li u 9 − Tên các c t trong cùng m t b ng không ư c trùng nhau. − Thông tin v các b ng, các ràng bu c ư c lưu trong b ng h th ng sysobjects Ví d : c thông tin v các b ng trong database hi n hành: Select * from sysobjects where type = ‘U’ − M t s th t c SQL Server cung c p qu n lý b ng và c u trúc b ng: o sp_databases o sp_tables [‘table_name’] [, ‘owner’][,‘database_name’][, “ ‘type’ ”] Ví d : Exec sp_tables null, null, null, “ ‘TABLE’ ” o sp_help [object_name] sp_help cho bi t các thông tin v i tư ng b t kỳ trong database ( i tư ng có ch a trong sysobjects). Ví d : Exec sp_help HOCSINH o sp_columns object [, owner] [, database] [,column] o sp_helpconstraint ‘table_name’ o …3. Cài t ràng bu c toàn v n ơn gi n SQL Server cung c p s n cơ ch ki m tra các lo i ràng bu c toàn v n (RBTV) sau: o Khóa chính (primary key constraint). o Khóa ngo i (foreign key constraint). o Giá tr duy nh t (unique constraint). o Check constraint (Ki m tra ràng bu c mi n giá tr ). Có th khai báo ràng bu c trong lúc t o b ng ho c khi b ng ã t n t i. Thông thư ng nên khai báo ràng bu c toàn v n trư c khi nh p d li u. a. Khai báo ràng bu c trong lúc t o b ng Cú pháp: Create table Table_name ( … [, constraint Constraint_name { primary key (Column_name [,…n]) | unique ( Column_name [,…n]) | check ( logical_expression ) } ] […n] ) Ví d
  • 12. Bài gi ng tóm t t H qu n tr cơ s d li u 10 Create table SinhVien ( MaSV char(10) not null, HoTen nvarchar(30) not null, Nam tinyint, CMND char(10), Khoa char(5), constraint pk_SV primary key (MaSV), constraint u_CMND unique (CMND), constraint chk_Nam check (Nam > 0 and Nam <= 4) ) b. Khai báo ràng bu c trên b ng ã t n t i Cú pháp: Alter table table_name [with check| with nocheck] Add { constraint constraint_name { primary key ( column_name [,…n] ) | unique ( column_name [,…n] ) | check ( logical_expression ) | foreign key ( column_name [,…n] ) references ref_table ( ref_column [,…n] ) [ on delete {cascade| no action} ] [ on update {cascade| no action} ] } [,…n] Ví d /* gi s ã t n t i b ng KHOA( MaKhoa, …) */ Alter table SINHVIEN with check add constraint u_CMND unique (CMND), constraint chk_Nam check (Nam in (1, 2, 3, 4) ), constraint fk_SV_maKhoa foreign key (Khoa), references KHOA(MaKhoa) c. Ki m tra / không ki m tra ràng bu c Cú pháp: Alter table Table_name {Check| Nocheck} constraint { All | constraint_name [,…n] } Ví d : alter table SINHVIEN nocheck constraint u_CMND, chk_Nam d. Xoá ràng bu c Cú pháp:
  • 13. Bài gi ng tóm t t H qu n tr cơ s d li u 11 Alter table table_name Drop { [constraint ] constraint_name } [,…n] Ví d : Alter table SINHVIEN drop constraint u_CMND, chk_Nam e. Rule − Rule là m t qui nh chung ư c t o ra trong m t CSDL. − M t rule có th ư c áp d ng cho nhi u thu c tính c a nhi u b ng khác nhau, ho c cho các ki u d li u ngư i dùng nh nghĩa trong database. T o rule Cú pháp: Create rule rule_name as logical_expression (trong ó “logical_expression” ph i ch a m t bi n. Bi n này tương ng v i i tư ng s ư c áp d ng rule). Ví d : create rule r_SoDuong as @value >0 K t bu c/ g k t bu c rule K t bu c rule: dùng th t c: sp_bindrule ‘rule_name’, ‘object’, [ ‘futureonly’ ] trong ó: Tùy ch n futureonly ch dùng khi k t bu c rule v i ki u d li u ngư i dùng nh nghĩa, có nghĩa các c t thu c ki u d li u này trư c ó không b nh hư ng b i rule. Ví d : sp_bindrule ‘r_SoDuong’, ‘SinhVien.Nam’ Rule m i k t bu c s ng m g rule cũ trên i tư ng. G k t bu c sp_unbindrule ‘object’, [ ‘futureonly’ ] Ví d : sp_unbindrule ‘SinhVien.Nam’ Xoá rule Cú pháp: Drop rule {rule_name} [,…n] Lưu ý: Ch xóa ư c rule khi nó không còn k t bu c v i i tư ng nào.V. Các thao tác trên d li u Chú ý khi thêm/ xóa/ c p nh t d li u:
  • 14. Bài gi ng tóm t t H qu n tr cơ s d li u 12 – D li u nh p ph i phù h p v i ki u d li u. – m b o các ràng bu c toàn v n. – nh d ng giá tr ki u chu i unicode, ki u datetime. – Nh p giá tr r ng (Null).1. Các d ng l nh insert − Thêm t ng dòng d li u vào b ng Insert [into] Table_name[ (column_name[,…n] )] values ( value [,…n] ) − Thêm 0-n dòng d li u t b ng khác/ t k t qu c a m t câu truy v n Insert [into] Table_name Select_statement Lưu ý: trong câu select, ta có th c d li u t các b ng trong database khác. Khi ó, tên b ng ư c vi t y như sau: Database_name.Owner.Table_name Ví d : select * from QLSinhVien.dbo.SinhVien 2. L nh c p nh t d li u update table_name set column_name_1= value1,…, column_name_m= value_m [where conditional_expression] 3. L nh xoá d li u delete [from] table_name [where conditional_expression]VI. Truy v n d li u1. Câu truy v n t ng quát Cú pháp t ng quát c a câu truy v n d li u: SELECT [tính ch t] <danh sách các thu c tính_1> FROM <danh sách các table ho c query/view [as alias] > [WHERE < i u ki n_1>] [GROUP BY <danh sách các thu c tính_2>] [HAVING < i u ki n_2>] [ORDER BY <danh sách các thu c tính_3> [ASC | DESC]] trong ó: − Tính ch t là m t trong các t khóa: ALL (ch n ra t t c các dòng trong b ng), DISTINCT (lo i b các dòng trùng l p thông tin), TOP <n> (ch n n dòng u tiên th a mãn i u ki n).
  • 15. Bài gi ng tóm t t H qu n tr cơ s d li u 13 − Danh sách các thu c tính_1: tên các thu c tính cho bi t thông tin c n l y. Chú ý: Các thu c tính cách nhau b i d u ‘,’. N u l y t t c các thu c tính c a 1 b ng R thì dùng: R.* N u sau FROM ch có 1 b ng và l y t t c các c t c a b ng ó thì dùng select *. N u t n t i 1 thu c tính sau select xu t hi n 2 b ng sau FROM thì ph i ch nh rõ thu c tính ó thu c b ng nào. − Danh sách các table/query/view: các b ng, câu truy v n, ho c khung nhìn ch a thông tin c n l y. Khi tìm ki m thông tin trên nhi u hơn 2 b ng/truy v n thì ph i k t các b ng l i v i nhau (có th t i u ki n k t t sau where ho c t trong m nh From… join/ left join/ right join/full join … on …). − Alias: bí danh (tên t t) c a b ng dùng cho các b ng có tên quá dài, ho c m t b ng ư c dùng nhi u l n trong m nh from c a câu truy v n. − i u ki n_1: là i u ki n l c d li u (ch n các b tho i u ki n). − danh sách các thu c tính_2: d li u s ư c gom nhóm theo các c t này, ưu tiên tính t trái sang. − i u ki n_2: i u ki n l c các nhóm theo m t tiêu chí i di n cho c nhóm. − danh sách các thu c tính_3:s p x p d li u theo c t nào, th t là tăng (ASC) ho c gi m (DESC). M c nh là d li u ư c s p theo th t tăng d n. Vi c s p x p ư c th c hi n theo th t ưu tiên t trái qua ph i. Lưu ý: N u câu truy v n không có m nh Group By thì cũng không có m nh Having. N u câu truy v n có ch a m nh Group By thì Danh sách các thu c tính_1 ch ch a các thu c tính ho c bi u th c liên quan n các thu c tính trong danh sách các thu c tính_2 và các hàm g p (max, min, avg, sum, count).2. Các hàm thư ng dùng − Các hàm g p (Aggregate functions): max, min, sum, avg, count − Các hàm th i gian. − Các hàm toán h c. − Các hàm x lý chu i. − …. (Sinh viên có th tra c u theo t khóa trong Books Online).
  • 16. Bài gi ng tóm t t H qu n tr cơ s d li u 14VII. T o và s d ng khung nhìn (View) 1. Khái ni m khung nhìn: Khung nhìn (View) là m t b ng o, có c u trúc như m t b ng, khung nhìn không lưu tr d li u mà d li u c a nó ư c t o ra khi s d ng, khung nhìn là i tư ng thu c CSDL. Khung nhìn ư c t o ra t câu l nh truy v n d li u (l nh Select), truy v n t m t ho c nhi u b ng d li u. 2. S d ng khung nhìn o Khung nhìn ư c s d ng khai thác d li u như m t b ng d li u, có th ư c chia s b i nhi u ngư i dùng, an toàn trong khai thác. o Có th th c hi n truy v n d li u trên c u trúc c a khung nhìn. o Các khung nhìn ư c t o t nhi u b ng ho c trong khung nhìn có ch a t khóa DISTINCT, hàm g p, m nh group by u không cho phép c p nh t d li u t khung nhìn vào các b ng g c trong cơ s d li u. Cú pháp t o khung nhìn: Create View view_name As Select_statementVIII. T o và s d ng ch m c (Index) Ch m c (Index) là m t ph n quan tr ng i v i CSDL, c bi t là cơ s d li u l n. Ch m c ư c thi t l p t m t ho c nhi u c t d li u c a b ng d li u. Các giá tr c a Ch m c s ư c s p x p và lưu tr theo m t danh sách (b ng khác). M i giá tr ch m c là duy nh t trong danh sách và nó s liên k t n giá tr trong b ng d li u (liên k t d ng con tr ). Vi c lưu tr d li u c a b ng có khóa ch m c ư c th c hi n theo c u trúc B-Cây nh m tăng t c truy xu t d li u i v i ĩa (thi t b th c p). Khi tìm ki m m t giá tr trong c t d li u, mà c t này tham gia t o Ch m c, u tiên câu l nh xác nh v trí c a giá tr n m trong Ch m c b ng phép duy t cây, sau ó th c hi n tìm theo liên k t n b n ghi ch a giá tr tương ng v i khóa trong b ng. 1. L a ch n ch m c • Không có ch m c, h qu n tr CSDL th c hi n truy v n b ng cách duy t qua t ng dòng trong b ng. • Cài t các ch m c cho b ng giúp truy v n thông tin nhanh hơn (tìm ki m trên B-Cây). • Khóa chính và các ràng bu c unique hi n nhiên là các ch m c c a b ng. • Cơ s ch n cài t ch m c: d a vào các nhu c u truy v n th c hi n thư ng xuyên trên CSDL.
  • 17. Bài gi ng tóm t t H qu n tr cơ s d li u 15• Nên cài t ch m c cho các trư ng h p sau: – Trư ng h p 1: Có nhu c u truy v n thư ng xuyên các b c a b ng Q theo m t s (t p) thu c tính nào ó. Ví d : GiaoDich(MãGD, …,NgàyGD): Có nhu c u truy xu t thư ng xuyên các b c a giao d ch trong m t ngày ho c trong m t kho ng th i gian nh t nh: cài t ch m c trên thu c tính NgayGD c a quan h GiaoDich. – Trư ng h p 2: t p thu c tính tham gia vào phép k t c a m t câu truy v n x y ra thư ng xuyên. Ví d : cho 2 lư c quan h : HocSinh(STT, Lop, HoTen,…) KetQua(STT, Lop, Mon, Diem) Thư ng xuyên có nhu c u truy v n: cho bi t k t qu h c t p c a m t h c sinh. Câu l nh truy v n như sau: select hs.STT, hs.Lop, hs.HoTen, kq.Mon, kq.Diem from HocSinh hs join KetQua kq on hs.STT = kq.STT and hs.Lop = kq.Lop Cài t ch m c (STT, Lop) cho quan h KetQua T ng quát: trên mô hình quan h , xác nh các con ư ng truy xu t thư ng xuyên: T m t b c a Q1(m t giá tr c th a c a A) có nhu c u truy xu t thư ng xuyên các b c a Q2 tương ng (tìm ki m các b c a Q2 v i A = a): khai báo ch m c (A) cho Q2. Lưu ý: m t ch m c (AB) khác v i hai ch m c (A) và (B).2. Các lo i ch m c Có hai lo i ch m c: – Clustered index – Nonclustered indexClustered index:• D li u th t s ư c s p x p v t lý theo ch m c (th t s n m nút lá c a cây).• M i b ng ch có th có m t clustered ch m c, thư ng là khóa chính.
  • 18. Bài gi ng tóm t t H qu n tr cơ s d li u 16Nonclustered index:• Ch m c logic, d li u th t s không ư c s p x p v t lý theo ch m c.• Nút lá là con tr tr n v trí c a b d li u, ho c tr n giá tr c a clustered ch m c (trong trư ng h p b ng có clustered index). – Không có clustered index: – Có clustered index
  • 19. Bài gi ng tóm t t H qu n tr cơ s d li u 17• M t s cân nh c khi ch n ch m c: – S d ng nhi u ch m c tăng t c truy v n, nhưng làm gi m hi u qu c a các thao tác thêm/xoá/c p nh t d li u. – Không nên t o ch m c trên các b ng quá nh (vài trăm dòng). – Ch nên ch n ch m c mà m i giá tr c a nó tương ng v i m t s ít b . N u m i giá tr ch m c ng v i trên 20% s lư ng b trong b ng, th c hi n truy v n bình thư ng b ng cách duy t qua các dòng trong b ng s hi u qu hơn. – Các giá tr ch m c ph i phân b u các b trong b ng. – C g ng dùng các ch m c v i s thu c tính ít (chi m ít không gian và c n ít chi phí duy trì hơn ch m c v i s thu c tính l n). – Clustered index ph i nh (s thu c tính ít, kích thư c nh ), vì các ch m c nonclustered u ph i g n k t t i nó.3. Cài t ch m c v i SQL Server M t s qui nh: 1. M t b ng có t i a 249 nonclustered ch m c (bao g m c nh ng ch m c ng m nh khi khai báo khóa chính và ch m c). 2. Kích thư c t i a c a m t ch m c (t ng kích thư c các thu c tính tham gia vào ch m c) không quá 900 bytes. 3. M c nh: ch m c clustered ư c khai báo ng m nh cùng v i khai báo khóa chính, các trư ng h p khác là nonclustered (t t nhiên có th ch nh khác i). Cú pháp khai báo ch m c: Create [ Unique ][ Cluster| Nonclustered] Ch m c ch m c_name
  • 20. Bài gi ng tóm t t H qu n tr cơ s d li u 18 On {table | view } (column [ Asc | Desc] [ ,...n ]) Ví d : Create nonclustered ch m c idx_STTHS_Lop On KETQUA (STTHS, Lop) Cú pháp xóa ch m c: Drop Ch m c table_name (ch m c_name) Ví d : Drop Ch m c KETQUA(idx_STTHS_Lop)IX. Chuy n i d li u v i các ng d ng khác (xem các tài li u hư ng d n th c hành SQL Server kèm theo)
  • 21. Bài gi ng tóm t t H qu n tr cơ s d li u 19 Chương 3 T-SQL NÂNG CAOI. Khai báo và s d ng bi n1. Bi n c c b − Là m t i tư ng có th ch a giá tr thu c m t ki u d li u nh t nh, tên bi n b t u b ng m t ký t @. – Bi n c c b có giá tr trong m t query batch ho c trong m t th t c thư ng trú (stored procedure) ho c hàm (function). – Khai báo bi n c c b b ng l nh declare: cung c p tên bi n và ki u d li u: Declare tên_bi n Ki u_d _li u Ví d : Declare @MaSinhVien char(10) Declare @HoTen nvarchar(30) Declare @Sum float, @Count int – gán giá tr cho m t bi n c c b dùng l nh set. Giá tr gán cho bi n ph i phù h p v i ki u d li u c a bi n. Set tên_bi n = giá_tr Set tên_bi n = tên_bi n Set tên_bi n = bi u_th c Set tên_bi n = k t_qu _truy_v n Ví d : Set @MaLop = ‘TH2001’ Set @SoSV = (select count (*) from SinhVien) Set @MaLop = ‘TH’+Year(@NgayTuyenSinh) ưa k t qu truy v n vào bi n: SV(MaSV: int; HoTen: nvarchar(30), Tuoi int) Select @Var1 = HoTen, @Var1 = Tuoi from SV where MaSV = 1Lưu ý: n u câu truy v n tr v nhi u dòng, các bi n ch nh n giá tr tương ng c a dòng u tiên.2. Bi n toàn c c – Là các bi n h th ng do SQL Server cung c p, tên bi n b t u b ng 2 ký t @ – SQL t c p nh t giá tr cho các bi n này, ngư i s d ng không th gán giá tr tr c ti p. − M t s bi n h th ng thu ng dùng o @@error: thông báo mã l i, n u @@error = 0: thao tác th c hi n thành công.
  • 22. Bài gi ng tóm t t H qu n tr cơ s d li u 20 o @@rowcount: cho bi t s dòng b nh hư ng b i l nh cu i (insert, update, delete). o @@trancount: cho bi t s giao d ch ang ho t ng trên k t n i hi n t i. o @fetch_status: cho bi t thao tác l y d li u t cursor có thành công không.II. C u trúc i u khi n1. L nh If…else − Ch c năng: xét i u ki n quy t nh nh ng l nh T-SQL nào s ư c th c hi n − Cú pháp: If bi u_th c_ i u ki n L nh| Kh i_l nh [Else L nh| Kh i_l nh] Kh i l nh là m t ho c nhi u l nh n m trong c p t khóa begin…end Ví d : xét 2 lư c quan h (L QH) HocPhan(MaHP, TenHP, SiSo) DangKy(MaSV, MaHP) Vi t l nh thêm m t ăng ký m i cho sinh viên có mã s 001 vào h c ph n HP01 (gi s h c ph n này ã t n t i trong b ng HocPhan). L i gi i như sau: Declare @SiSo int select @SiSo = SiSo from HocPhan where MaHP= ‘HP01’ if @SiSo < 50 Begin insert into DANG_KY(MaSV, MaHP) values(‘001’, ’HP01’) print N’ ăng ký thành công’ End Else print N’H c ph n ã SV’2. L nh While − Ch c năng: th c hi n l p l i m t o n l nh T-SQL khi i u ki n còn úng. − Cú pháp:
  • 23. Bài gi ng tóm t t H qu n tr cơ s d li u 21 While bi u_th c_ i u_ki n L nh| Kh i l nh – Có th s d ng Break và Continue trong kh i l nh c a while Break: thoát kh i vòng while hi n hành. Continue : tr l i u vòng while, b qua các l nh sau ó. Ví d : xét lư c quan h SinhVien(MaSV: int, HoTen: nvarchar(30)) Vi t l nh xác nh m t mã sinh viên m i theo qui nh: mã sinh viên tăng d n, n u có ch tr ng thì mã m i xác nh s chèn vào ch tr ng ó. Ch ng h n, n u trong b ng sinhvien ã có các mã sinh viên 1, 2, 3, 7 mã sinh viên m i là 4. Gi i: Declare @STT int Set @STT = 1 While exists(select * from SV where MaSV = @STT) set @STT = @STT+1 Insert into SV(MaSV, HoTen) values(@STT, ‘Nguyen Van A’)3. L nh Case − Ch c năng: ki m tra m t dãy các i u ki n và tr v k t qu phù h p v i i u ki n úng. L nh case ư c s d ng như m t hàm trong câu select. − Cú pháp: Có hai d ng: D ng 1 (simple case): Case Bi u_th c_ u_vào When Giá_tr then k t_qu [...n] [ Else k t_qu _khác] End D ng 2 (searched case): Case When bi u_th c_ i u ki n then k t_qu [...n] [ Else k t_qu _khác] End Ví d : xét L QH NHAN_VIEN(MaNV, HoTen, NgaySinh, CapBac,Phai)
  • 24. Bài gi ng tóm t t H qu n tr cơ s d li u 22 Cho bi t nh ng nhân viên n tu i ngh hưu bi t r ng tu i v hưu c a nam là 60, c a n là 55). Gi i: select * from NHAN_VIEN where datediff(yy, NgaySinh, getdate()) > = Case Phai when ‘Nam’ then 60 when ‘Nu’ then 55 End Cho bi t mã NV, h tên và lo i nhân viên (c p b c <=3:bình thư ng, c p b c = null: chưa x p lo i, còn l i: c p cao). Gi i: Select MaNV, HoTen, ‘Loai’ = Case when CapBac<=3 then ‘Binh Thuong’ when CapBac is null then ‘Chua xep loai’ else ‘Cap Cao’ End From NhanVienIII. Th t c thư ng trú (Stored Procedures)1. Khái ni m Th t c thư ng trú (Stored Procedures - SP) ch a các l nh T_SQL. Tương t như m tth t c trong các ngôn ng l p trình, SP trong SQL Server có th truy n tham s , có tínhtái s d ng. Các th t c này ư c d ch và lưu tr thành m t i tư ng trong CSDL.Ý nghĩa: − Tính tái s d ng, tính uy n chuy n nh h th ng tham s . − Khi biên d ch SP, các l nh trong c a nó ư c t i ưu hóa nó sao cho th c thi hi u qu nh t. K t qu t i ưu hóa ư c lưu b n v ng. Khi g i th c thi th t c không c n biên d ch và t i ưu hóa l i l i g i th t c ti t ki m th i gian và tài nguyên hơn kh i l nh tương ương thân th t c. − Trong ng d ng tri n khai theo môi trư ng client/server, client g i l i g i SP lên server thì chi m ư ng truy n ít hơn r t nhi u l n so v i vi c g i kh i l nh tương ương trong thân th t c Gi m kh i lư ng thông tin trao i khi ng d ng g i yêu c u th c hi n công vi c v cho server do ó tránh ngh n ư ng truy n, gi m trì tr .
  • 25. Bài gi ng tóm t t H qu n tr cơ s d li u 23 − óng gói ch các thao tác cho phép trên CSDL vào các SP và quy nh truy xu t d li u ph i thông qua SP. Ngoài ra còn có th phân quy n trên SP H tr t t hơn cho vi c m b o an toàn (security) cho CSDL. − SP giúp cho vi c k t xu t báo bi u b ng Crystal Report tr nên ơn gi n và hi u qu hơn r t nhi u so v i vi c k t xu t d li u tr c ti p t các b ng và khung nhìn.2. Khai báo và s d ng th t cCú pháp khai báo: Create {proc | procedure} procedure_name {Parameter_name DataType [=default] [output] }[,…n] As { kh i l nh } GoLưu ý: Tên tham s t theo qui t c như tên bi n c c b . Giá tr tr v c a SP dùng m t (hay m t s ) tham s output.Ví d : − Xây d ng SP cho bi t danh sách sinh viên c a m t l p có mã cho trư c Create proc DS_Lop @MaLop varchar(10) As Select SV.MaSV, SV.HoVaTen, SV.NgaySinh From SinhVien SV where SV.Lop = @MaLop Go − Xây d ng SP tính toán giá tr cho ơn hàng có mã cho trư c v i quan h DonHang như sau: DonHang(Ma, SoLuong, DonGia, ThueSuat, ChietKhau, ThanhTien) Create proc TongTien @MaDH varchar(10) As Declare @ThanhTien float Declare @TienThue float Declare @TienChietKhau float Declare @DonGia float,@SoLuong int Set @SoLuong = (select SoLuong from DonHang where Ma = @MaDH)
  • 26. Bài gi ng tóm t t H qu n tr cơ s d li u 24 Set @DonGia = (select DonGia from DonHang where Ma = @MaDH) Set @TienThue = (select ThueSuat from DonHang where Ma = @MaDH) Set @TienChietKhau = (select ChietKhau from DonHang where Ma = @MaDH) Set @ThanhTien = @DonGia*@SoLuong Set @TienThue = @ThanhTien*@TienThue/100 Set @ThanhTien = @ThanhTien + @TienThue Set @TienChietKhau = @ThanhTien*@TienChietKhau/100 Set @ThanhTien = @ThanhTien - @TienChietKhau Update DonHang set ThanhTien = @ThanhTien where Ma = @MaDH Go − Vi t th t c thêm m t ăng ký c a sinh viên vào m t h c ph n (t ng quát ví d trong ph n If …else) Create procedure usp_ThemDangKy @MaSV char(5), @MaHP char(5), @SiSo int = 0 output As select @SiSo = SiSo from HocPhan where MaHP= @MaHP if @SiSo < 50 Begin insert into DANG_KY(MaSV, MaHP) values(@MaSV, @MaHP) set @SiSo = @SiSo+1 return 1 End return 0 Go - Xây d ng SP tính i m trung bình và x p lo i cho sinh viên thu c l p cho trư c. Gi s có các quan h như sau: SinhVien (MaSV, HoTen, DTB, XepLoai, Lop) MonHoc (MaMH, TenMH) KetQua (MaMH, MaSV, LanThi, Diem) trong ó:
  • 27. Bài gi ng tóm t t H qu n tr cơ s d li u 25 − i m thi ch tính l n thi sau cùng. − X p lo i: Xu t s c [9, 10], Gi i [8, 8.9], Khá [7, 7.9], Trung bình [5.0, 6.9], Y u [0,4.9]. − K t qu xu t d ng tham s output, không ghi xu ng CSDL.Gi iCreate proc XepLoaiSV @MaSV varchar(10), @DTB float out put, @XL nvarchar(20) out putAs Set @DTB = (Select avg(Diem) from KetQua Kq Where MaSV = @MaSV and not exists (select * from KetQua Kq1 where Kq1.MaSV = @MaSV and Kq1.MaMH=Kq.MaMH and Kq1.LanThi > Kq.LanThi)) If @DTB >= 9 Set @XL = N’Xu t s c’ Else if @DTB >= 8 Set @XL = N’Gi i’ Else if @DTB >= 7 Set @XL = N’Khá’ Else if @DTB >= 5 Set @XL = N’Trung bình’ Else Set @XL = N’Y u’GoCú pháp g i th c hi n th t c: EXEC| EXECUTE { [ @return_status = ] procedure_name { [ @parameter _name = ] value [ OUTPUT ] } [ ,...n ]Lưu ý: o Khi g i th c hi n SP, dùng t khóa Exec và c n truy n tham s v i ki u d li u phù h p và th t chính xác như khai báo trong nh nghĩa SP. o Có th truy n giá tr cho tham s u vào (input) là m t h ng ho c m t bi n ã gán giá tr , không truy n ư c m t bi u th c. o nh n ư c giá tr k t qu (thông qua tham s u ra), c n truy n vào m t bi n và có t khóa output. Ví d : o G i th t c usp_ThemDangKy:
  • 28. Bài gi ng tóm t t H qu n tr cơ s d li u 26 Exec usp_ThemDangKy ‘001’, ’HP01’ ho c Exec usp_ThemDangKy @MaHP = ‘HP01’, @MaSV = ‘001’ o G i th t c usp_ThemDangKy có nh n k t qu u ra: Declare @SiSo int Exec usp_ThemDangKy ‘001’,’HP01’, @SiSo output Print @SiSo o G i th t c usp_ThemDangKy có nh n k t qu u ra và k t qu tr v t th t c: Declare @SiSo int, @KetQua int Exec @KetQua = usp_ThemDangKy ‘001’,’HP01’, @SiSo output o G i th c hi n th t c x p lo i sinh viên: Declare@MaSinhVien varchar(10) Declare@DiemTB varchar(10) Declare@XepLoai varchar(10) Set@MaSinhVien = ‘0712345’ Exec XepLoaiSV @MaSinhVien,@DiemTB out put,@XepLoai out put Exec XepLoaiSV ‘0713478’, @DiemTB out put,@XepLoai out putS a th t c Thay t khóa Create trong l nh t o th t c b ng t khóa Alter.Xóa th t c Drop {procedure|proc} procedure_name Ví d : Drop procedure usp_ThemDangKy3. Stored procedure h th ng − Là nh ng th t c do SQL Server cung c p s n th c hi n các công vi c: qu n lý CSDL, qu n lý ngư i dùng, c u hình CSDL,… − Các th t c này có tên b t u b ng “sp_” Khi xây d ng th t c, tránh t tên th t c b t u v i “sp_”.IV. Ki u d li u cursor1. Khái ni m Cursor - Là m t c u trúc d li u ánh x n m t t p các dòng d li u k t qu c a m t câu truy v n (select).
  • 29. Bài gi ng tóm t t H qu n tr cơ s d li u 27 - Cho phép duy t tu n t qua t p các dòng d li u và c giá tr t ng dòng. - Th hi n c a cursor là 1 bi n, nhưng tên bi n này không b t u b ng ’@’. - V trí hi n hành c a cursor có th ư c dùng như i u ki n trong m nh where c a l nh update ho c delete: cho phép c p nh t/xoá d li u (d li u th t s trong CSDL) tương ng v i v trí hi n hành c a cursor.2. Khai báo và s d ng Cursor Khai báo Cursor Có th s d ng cú pháp chu n SQL 92 ho c cú pháp T_SQL m r ng. − Cú pháp SQL 92 chu n: Declare cursor_name [Insensitive] [Scroll] Cursor For select_statement [ For {Read only| Update [of column_name [,…n] ] }] − Cú pháp T_SQL m r ng Declare cursor_name Cursor [ Local | Global ] [ Forward_only| Scroll] [ Static| Dynamic] [ Read_only] For select_statement [ For Update [ of column_name [,…n] ] ]Lưu ý: Tên cursor trong các cách khai báo không b t u b ng ký t “@”. Ý nghĩa các tham s tùy ch n trong khai báo: o Insensitive/ static: n i dung c a cursor không thay i trong su t th i gian t n t i, trong trư ng h p này cursor ch là read only. o Dynamic: trong th i gian t n t i, n i dung c a cursor có th thay i n u d li u trong các b ng liên quan có thay i. o Local: cursor c c b , ch có th s d ng trong ph m vi m t kh i (query batch) ho c m t th t c/ hàm. o Global: cursor toàn c c, có th s d ng trong m t th t c/hàm hay m t query batch b t kỳ ho c n khi b h y m t cách tư ng minh. o Forward_only: cursor ch có th duy t m t chi u t u n cu i. o Scroll: có th duy t lên xu ng cursor tùy ý (duy t theo a chi u).
  • 30. Bài gi ng tóm t t H qu n tr cơ s d li u 28 o Read only: ch có th c t cursor, không th s d ng cursor update d li u trong các b ng liên quan (ngư c l i v i “for update…” ). M c nh khi khai báo cursor n u không ch ra các tùy ch n thì cursor có các tính ch t: - Global - Forward_only - Read only hay “for update” tùy thu c vào câu truy v n - DynamicDuy t cursor Dùng l nh Fetch duy t tu n t qua cursor theo cú pháp: Fetch [ [Next| Prior| First| Last| Absolute n| Relative n] From ] Tên_cursor [Into Tên_bi n [,…n] ] −M c nh: fetch next. − i v i cursor d ng forward_only, ch có th fetch next. − Bi n h th ng @@fetch_status cho bi t l nh fetch v a th c hi n có thành công hay không, giá tr c a bi n này cơ s bi t ã duy t n cu i cursor hay chưa.Quy trình s d ng Cursor − Khai báo cursor. − “M ” cursor b ng l nh Open Open tên_cursor − Khai báo các bi n t m ch a ph n t hi n hành ( ang ư c x lý) c a cursor: Các bi n t m ph i cùng ki u d li u v i các trư ng tương ng c a ph n t trong cursor. Có n trư ng trong ph n t c a cursor thì ph i có n bi n t m tương ng. − Fetch (next,…) cursor chuy n n v trí phù h p: Có th ưa các giá tr c a dòng hi n hành vào các bi n thông qua m nh into c a l nh fetch. N u không có m nh into, các giá tr c a dòng hi n hành s ư c hi n th ra c a s k t qu (result pane) sau l nh fetch. Có th s d ng v trí hi n t i như là i u ki n cho m nh where c a câu delete/ update (n u cursor không là read_only).
  • 31. Bài gi ng tóm t t H qu n tr cơ s d li u 29 − L p l i vi c duy t và s d ng cursor, có th s d ng bi n @@fetch_status bi t ã duy t qua h t cursor hay chưa. @@FETCH_STATUS = 0 : l y d li u thành công, @@FETCH_STATUS < 0 : không l y ư c d li u. − óng cursor b ng l nh Close Close Tên_cursor Lưu ý: Sau khi óng, v n có th m l i n u cursor chưa b h y. − H y cursor b ng l nh deallocate Deallocate Tên_cursorVí d : xét hai L QH SINHVIEN (MaSV, HoTen, MaKhoa) KHOA(MaKhoa, TenKhoa) Duy t và c giá tr t cursor C p nh t l i giá tr MaSV = Vi t t t tên Khoa + MaSV hi n t i cho t t c sinh viên: declare cur_DSKhoa cursor for select MaKhoa, TenKhoa from Khoa open cur_DSKhoa declare @MaKhoa int, @TenKhoa varchar(30), @TenTat varchar(5) fetch next from cur_DSKhoa into @MaKhoa, @TenKhoa while @@fetch_status = 0 begin -- xác nh tên t t c a Khoa d a vào @TenKhoa… update SinhVien set MaSV = @TenTat+MaSV Where MaKhoa = @MaKhoa fetch next from cur_DSKhoa into @MaKhoa, @TenKhoa end Close cur_DSKhoa Deallocate cur_DSKhoa Dùng cursor xác nh dòng c p nh t
  • 32. Bài gi ng tóm t t H qu n tr cơ s d li u 30 declare cur_DSKhoa cursor scroll for select MaKhoa, TenKhoa from Khoa open cur_DSKhoa fetch absolute 2 from cur_DSKhoa if (@@fetch_status = 0) update Khoa set TenKhoa = ‘aaa’ where current of cur_DSKhoa Close cur_DSKhoa Deallocate cur_DSKhoa3. Bi n cursor − Ta có th khai báo m t bi n ki u cursor và gán cho nó tham chi u n m t cursor ang t n t i. − Bi n cursor có th ư c xem như là con tr cursor. − Bi n cursor là m t bi n c c b . − Bi n cursor sau khi gán giá tr ư c s d ng như m t cursor thông thư ng. Ví d : Declare @cur_var cursor set @cur_var = my_cur -- my_cur là m t cursor ang t n t i ho c: Declare @cur_var cursor set @cur_var = cursor for select_statementK t h p cursor v i stored procedureXây d ng SP tính i m trung bình và x p lo i cho sinh viên thu c l p cho trư c. Gi scó các quan h như sau: SinhVien (MaSV, HoTen, DTB, XepLoai, Lop) MonHoc (MaMH, TenMH) KetQua (MaMH, MaSV, LanThi, Diem) Bi t r ng i m thi ch tính l n thi sau cùng X p lo i: Xu t s c [9, 10], Gi i [8, 8.9], Khá [7, 7.9], Trung bình [5.0, 6.9], Y u [0, 4.9]. K t qu ghi xu ng CSDL, ng th i xu t ra t ng s sinh viên x p lo i gi i c a l p ó.• Phân tích ví d :
  • 33. Bài gi ng tóm t t H qu n tr cơ s d li u 31 o L p c n xét có nhi u sinh viên, t ng sinh viên c n ư c x lý thông qua 3 bư c: Tính i m trung bình cho sinh viên, i m trung bình ph i là i m c a l n thi sau cùng. Có th tái s d ng th t c XepLoaiSVLop. D a vào i m trung bình c a sinh viên xác nh x p lo i. C p nh t i m và x p lo i vào b ng sinh viên. o M i sinh viên u l p l i 3 bư c trên.T phân tích trên ta th y: C n x lý nhi u ph n t (các sinh viên). M i ph n t x lý tương i ph c t p (truy v n, tính toán, g i th t c khác, i u ki n r nhánh, c p nh t d li u, …). Cách x lý các ph n t là như nhau. ⇒ S d ng cursor là thích h p Cursor ch a các sinh viên c a l p c n xét, ch c n ch a mã sinh viên là ư c.• Xây d ng th t c Create procedure XepLoaiSVLop @Lop nvarchar(10), @SoSVGioi int out As Declare @DTB float Declare @XepLoai nvarchar(20) Declare @MaSV nvarchar(10) Declare cur_SV cursor For (select MaSV from SinhVien where Lop=@Lop) Open cur_SV Fetch Next from cur_SV into @MaSV While @@FETCH_STATUS = 0 Begin Exec XepLoaiSV @MaSV, @DTB output, @XepLoai output Update SinhVien set DTB = @DTB, XepLoai=@XepLoai Where MaSV = @MaSV Fetch Next from cur_SV into @MaSV End Close cur_SV Deallocate cur_SV
  • 34. Bài gi ng tóm t t H qu n tr cơ s d li u 32 Set @SoSVGioi = (select count(*) from sinhvien where lop = @Lop and XepLoai = N’Gi i’) GoV. Hàm ngư i dùng (User Defined Functions)1. Khái ni m hàm ngư i dùng • Gi ng stored procedure: − mã l nh có th tái s d ng. − Ch p nh n các tham s input. − Biên d ch m t l n và t ó có th g i khi c n. • Khác stored procedure: − Ch p nh n nhi u ki u giá tr tr v (ch m t giá tr tr v ). − Không ch p nh n tham s output. − Khác v cách g i th c hi n. • Có th xem hàm ngư i dùng thu c v 3 lo i tùy theo giá tr tr v c a nó: − Giá tr tr v là ki u d li u cơ s (int, varchar, float, datetime…). − Giá tr tr v là Table có ư c t m t câu truy v n. − Giá tr tr v là table mà d li u có ư c nh tích lũy d n sau m t chu i thao tác x lý và insert.2. Khai báo và s d ng Khai báo hàm ngư i dùng Lo i 1: Giá tr tr v là ki u d li u cơ s Create function func_name ( {parameter_name DataType [= default ] } [,…n]) returns DataType As Begin … Return {value | variable | expression} End Ví d :
  • 35. Bài gi ng tóm t t H qu n tr cơ s d li u 33 Create function SoLonNhat (@a int,@b int,@c int) return int As Begin declare @max int set @max = @a if @b > max set @max = @b if @c > max set @max = @c return @max End Lo i 2: Giá tr tr v là m t b ng có ư c t m t câu truy v n Create function func_name ( {parameter_name DataType [= default ] } [,…n]) returns Table As Return [ ( ]select_statement [ ) ] Go Ví d : Vi t hàm in danh sách các m t hàng c a m t mã ơn hàng cho trư c Create function DanhSachMatHang ( @MaDonHang varchar(10) ) returns Table As Return (Select MH.TenHang,MH.DonGia From ChiTietDH CT, MatHang MH Where CT.MaDH = @MaDonHang and CT.MaMH = MH.MaMH) Go Lo i 3: Giá tr tr v là m t b ng mà d li u có ư c nh tích lũy d n sau m t chu i thao tác x lý và insert.
  • 36. Bài gi ng tóm t t H qu n tr cơ s d li u 34 Create function func_name ( {parameter_name DataType [= default ] } [,…n]) returns TempTab_name Table(Table_definition) As Begin … Return End GoVí d : Create function DanhSachLop () returns @DS Table(@MaLop varchar(10),@SoSV int) As --các x lý insert d li u vào b ng DS return GoLưu ý: Trong thân hàm không ư c s d ng các hàm h th ng b t nh (Built-in nondeterministic functions ), bao g m : − GETDATE − GETUTCDATE − NEWID − RAND − TEXTPTR − @@TOTAL_ERRORS, @@CPU_BUSY, @@TOTAL_READ, @@IDLE, @@TOTAL_WRITE, @@CONNECTIONS …S d ng hàm ngư i dùng Các hàm ngư i dùng ư c s d ng trong câu truy v n, trong bi u th c… phù h p ki u d li u tr v c a nó. Ví d : − Select dbo.SoLonNhat(3,5,7) − Select * from DanhSachLop() Lưu ý: − N u dùng giá tr m c nh c a tham s , ph i dùng t khóa default.
  • 37. Bài gi ng tóm t t H qu n tr cơ s d li u 35 − Khi g i hàm lo i 1 (tr v giá tr cơ b n), ph i có tên owner c a hàm i kèm (ví d dbo.SoLonNhat(5,8,-10)).Thay i hàm ngư i dùng Thay t khóa create trong các l nh t o hàm b ng t khóa alterXóa hàm ngư i dùng Drop function tên_hàm_c n _xóa Ví d : Drop function DanhSachMatHang3. Các hàm h th ng Ngoài các hàm do ngư i dùng nh nghĩa, SQL Server còn cung c p các hàm xây d ng s n c a h th ng. Các hàm này cung c p ti n ích như x lý chu i, x lý th i gian, x lý s h c… Sinh viên tìm hi u thêm v các hàm này trong Books on-line và các tài li u tham kh o.• t o hàm h th ng c n ti n hành theo các bư c sau: T o hàm trong cơ s d li u Master Tên hàm b t u b i fn_functionName Thay i ch nhân c a hàm b ng th t c sp_changeobjectowner như sau: EXEC sp_changeobjectowner ‘fn_ functionName’ , ‘system_function_schema’ Ví d : T o hàm h th ng th c chuy n i m t bi n ki u ngày tháng sang ki u chu i. --T o hàm fn_doingay create function fn_doingay(@ngay datetime) returns char(10) as begin return convert(nchar(10),@ngay,103) end --Thay i ch nhân c a hàm EXEC sp_changeobjectowner fn_doingay , system_function_schema Sau l nh này hàm fn_doingay có th dùng ư c cho CSDL b t kỳ. Select manv, hoten, fn_doingay(ngaysinh) From nhanvienVI. Triggers và cài t ràng bu c d li u1. Gi i thi u • Trigger là m t lo i stored procedure c bi t có các c i m sau:
  • 38. Bài gi ng tóm t t H qu n tr cơ s d li u 36 − T ng th c hi n khi có thao tác insert, delete ho c update trên d li u. − Thư ng dùng ki m tra các ràng bu c toàn v n c a CSDL ho c các qui t c nghi p v . − M t trigger ư c nh nghĩa trên m t b ng, nhưng các x lý trong trigger có th s d ng nhi u b ng khác. • X lý c a trigger thư ng c n s d ng n hai b ng t m: − Inserted: ch a các dòng v a m i ư c thao tác insert/ update thêm vào b ng. − Deleted: ch a các dòng v a m i b xóa kh i b ng b i thao tác update/delete. Lưu ý: update = delete dòng ch a giá tr cũ + insert dòng ch a giá tr m i − Inserted và deleted là các b ng trong b nh chính: C c b cho m i trigger. Có c u trúc gi ng như b ng (table) mà trigger nh nghĩa trên ó Ch t n t i trong th i gian trigger ang x lý. − N u thao tác insert/ delete/ update th c hi n trên nhi u dòng, trigger cũng ch ư c g i m t l n B ng inserted/ deleted có th ch a nhi u dòng.2. S d ng TriggerKhai báo trigger − Cú pháp: Create trigger tên_trigger On {tên_b ng|tên_view} {For| After| Instead of } { [delete] [,] [insert] [,] [update] } As { các l nh T-sql } Go rong ó: For | After: − Trigger ư c g i th c hi n sau khi thao tác delete/ insert/ update tương ng ã ư c th c hi n thành công: Các dòng m i ư c thêm ch a ng th i trong b ng d li u và b ng inserted. Các dòng b xoá ch n m trong b ng deleted ( ã b xoá kh i b ng d li u). − Có th x lý quay lui thao tác ã th c hi n b ng l nh rollback transaction. Instead of: − Trigger ư c g i th c hi n thay cho thao tác delete/ insert/ update tương ng:
  • 39. Bài gi ng tóm t t H qu n tr cơ s d li u 37 Các dòng m i ư c thêm ch ch a trong b ng inserted. Các dòng b ch nh xoá n m ng th i trong b ng deleted và b ng d li u (d li u không b xoá). − Trigger Instead of thư ng ư c dùng x lý c p nh t trên khung nhìn.Lưu ý: − L nh t o trigger ph i là l nh u tiên trong m t query batch. − Trên m t b ng có th nh nghĩa nhi u trigger for/after cho m i thao tác nhưng ch có th nh nghĩa m t trigger instead of cho m i thao tác. − Không th nh nghĩa trigger instead of update/ delete trên b ng có cài t khóa ngo i d ng update cascade/ delete cascade. − Trong thân trigger, có th s d ng hàm Update(tên_c t) ki m tra xem vi c c p nh t ư c th c hi n trên c t nào. Update(tên_c t) = true : có th c hi n c p nh t trên c t tên_c tS d ng trigger cài t m t s lo i ràng bu cVí d 1- Ràng bu c liên thu c tính – liên quan h Cho CSDL: DatHang(MaPDH, NgayDH,…) GiaoHang(MaPGH, MaPDH, NgayGH,…) Ràng bu c: Ngày giao hàng không th nh hơn ngày t hàng tương ng B ng t m nh hư ng: Thêm Xóa S a DatHang - - + (NgayDH) GiaoHang + - + (NgayGH, MaPDH) C n cài t trigger cho thao tác s a trên b ng DatHang, và thêm/s a trên b ngGiaohang Trigger cho thao tác thêm và s a trên giao hàng: Create trigger tr_GH_ins_upd_NgayGH On GIAOHANG for insert, update As if update(MaPDH) or update (NgayGH) if exists(select * from inserted i, DatHang d where i.MaPDH = d.MaPDH
  • 40. Bài gi ng tóm t t H qu n tr cơ s d li u 38 and i.NgayGH<d.NgayDH) begin raiserror (N‘Ngày GH không th nh hơn ngày H’,0,1) rollback tran endgoBài t p: Trigger cho thao tác s a trên t hàng.Ví d 2 – Ràng bu c toàn v n liên b Xét L QH: KetQua(MASV, MAMH, LANTHI, DIEM) T o trigger ki m tra RBTV: “Sinh viên ch ư c thi t i a 2 l n cho m t môn h c” • Xác nh b ng t m nh hư ng: Insert Delete Update KetQua + - + (MASV, MAMH) • Cài t trigger d a trên b ng t m nh hư ng: -- Tao trigger ung voi thao tac insert tren bang KetQua Create trigger trg_KetQua_insert on KetQua for insert as declare @SoLanThi int select @SoLanThi=count(*) from KetQua K, inserted I where I.MaSV=K.MaSV and I.MaMH = K.MaMH if @SoLanThi > 2 begin raiserror(So lan thi phai <= 2, 0,1) rollback transaction endBài t p: T o trigger ng v i thao tac Update trên b ng KetQua.Ví d 3: Trigger cho vi c th c hi n m t thao tác c p nh t d li u nào ó.Cho quan hCHI_TIET_HOA_DON(MaHD,STT, MaMH, SoLuong, DonGia, ThanhTien).
  • 41. Bài gi ng tóm t t H qu n tr cơ s d li u 39 • Vi t trigger th c hi n c p nh t giá tr c a ThanhTien khi thêm m t chi ti t hóa ơn
  • 42. Bài gi ng tóm t t H qu n tr cơ s d li u 40 Chương 4 B O M T VÀ AN TOÀN D LI UI. B o m t trong h qu n tr cơ s d li u1. Khái ni m cơ b n v b o m t Nh m b o v h th ng CSDL không b xâm nh p, ngư i qu n tr cơ s d li u ph iquy t nh cho phép hay không cho phép ngư i dùng truy c p và thao tác trên cơ s dli u d a vào nhi m v c a ngư i dùng trên h CSDL. Ngư i qu n tr thư ng d a trên n nt ng lý thuy t b o m t c a h cơ s d li u a ngư i dùng, nh m tìm ra phương pháp b om t theo úng v i nhu c u c a b o m t d li u. V i m c ích tăng tính b o m t d li u, SQL Server h tr các tính năng cho phépngư i qu n tr thi t l p cơ ch b o v cơ s d li u trong môi trư ng a ngư i dùng, baog m các y u t chính sau: o Vai trò c a ngư i dùng trong h th ng và cơ s d li u. o Quy n s d ng các ng d ng cơ s d li u trong SQL Server. o Quy n t o và s a i c u trúc các i tư ng CSDL. o Quy n truy c p, x lý d li u. Khi ăng nh p vào m t h th ng CSDL a ngư i dùng, ngư i s d ng c n ph i cungc p UserID (tài kho n) và Password (m t kh u). D a trên UserID h th ng có kh năngki m soát t t c các hành vi c a ngư i s d ng trên CSDL SQL Server. th c hi n ư c ch c năng này, ngư i qu n tr CSDL c n ph i thi t l p các quy nx lý và truy c p vào CSDL khi t o ra UserID, ngoài ra còn có m t s thu c tính khác c aSQL Server như quy n backup d li u, trao i d li u v i các ng d ng CSDL khác, … Khi nói n b o m t, ngư i qu n tr c n quan tâm n các thông tin sau c a ngư idùng: o M t ngư i dùng ch có m t UserID và m t m t kh u. o Th i gian có hi u l c c a m t kh u. o Gi i h n chi u dài c a m t kh u. o Gi i h n ngư i s d ng theo license hay m r ng. o Thông tin v ngư i s d ng. Khi t o ngư i s d ng, tên tài kho n c n rõ ràng, d hi u d g i nh , và không chophép các ký t c bi t, không nên có kho ng tr ng.2. L a ch n b o m t
  • 43. Bài gi ng tóm t t H qu n tr cơ s d li u 41 Khi t o ra m t ngư i dùng (login user) trong SQL Server, có 3 cách tăng tính b om t cho ngư i s d ng ó:o Giao ti p v i h i u hành: s d ng UserID và Password c a h i u hành Windows ăng nh p SQL Server. V i lo i b o m t này, ngư i dùng truy c p vào m ng và có th s d ng CSDL SQL Server, ng th i m t ngư i dùng có UserID và Password có th s d ng tài nguyên trên m ng.o B o m t chu n: v i lo i này, ngư i s d ng có UserID và Password tách r i v i h i u hành m ng, ng v i lo i b o m t này ngư i s d ng ch có hi u l c trong CSDL SQL Server, không th s d ng tài nguyên trên m ng.o T ng h p c hai trư ng h p trên: m t s ngư i dùng s d ng quy n s d ng trên h i u hành và SQL Server, m t s khác ch s d ng quy n truy c p vào SQL Server.Lưu ý: Tài kho n ngư i dùng có giá tr trên SQL Server hi n hành, khi sang m t SQLServer khác ph i t o ra tài kho n ngư i dùng trên server ó.o SQL Server cung c p các ch c năng hay các th t c t o m i và qu n tr ngư i dùng CSDL SQL Server như sau: S d ng th t c sp_addlogin. S d ng công c Enterprise Manager.• S d ng th t c sp_addlogin Cú pháp sp_addlogin [ @loginame = ] login [ , [ @passwd = ] password ] [ , [ @defdb = ] database ] [ , [ @deflanguage = ] language ] [ , [ @sid = ] sid ] [ , [ @encryptopt = ] encryption_option ]trong ó các tham s có ý nghĩa như sau: @loginame: tên tài kho n s t o. @passwd: m t kh u cho ngư i dùng có tài kho n trên. @defdb: cơ s d li u m c nh khi ngư i dùng ăng nh p vào SQL Server. @deflanguage: ngôn ng m c nhiên cho ngư i dùng SQL Server. @sid: s nh n d ng h th ng khi ngư i dùng ăng nh p vào. @encryptopt: khi t o tài kho n ngư i dùng trong CSDL, các thông tin v tài kho n, m t kh u ư c lưu tr trong b ng sysusers c a CSDL Master, n u b n cung c p tham s skip_enctription thì không mã hoá m t kh u trư c khi lưu vào b ng sysusers, n u không cung c p tham s hay tr ng, SQL Server s mã hoá m t kh u trư c khi lưu tr .
  • 44. Bài gi ng tóm t t H qu n tr cơ s d li u 42Ví d : t o ngư i dùng có tên ‘nam’, m t kh u ‘123’, cơ s d li u m c nh ‘QLKyNang’ Exec sp_addlogin ‘nam’, ‘123’, ‘QLKyNang’ - Thay i m t kh u sp_password [[ @old = ] old_password ,] { [ @new =] new_password } [ , [ @loginame = ] login ]3. Quy n ngư i dùng và qu n tr quy n ngư i dùng Quy n c a ngư i dùng ư c nh nghĩa như m c ngư i dùng có th hay không thth c thi trên CSDL, quy n ư c chia thành 4 lo i như sau: o Quy n truy c p vào SQL Server. o Quy n truy xu t vào CSDL. o Quy n th c hi n trên các i tư ng c a CSDL. o Quy n x lý d li u.C p phát quy n truy c p vào CSDLCú pháp: Use db_name Go sp_grantdbaccess [@loginame =] login [,[@name_in_db =] name_in_db [OUTPUT]] Các tham s : @loginame: tài kho n c a ngư i s d ng ăng nh p vào SQL Server @name_in_db: t o bí danh (tên khác) c a tài kho n ngư i dùng khi truy c p vào CSDL db_name ư c ch nh, n u không ch rõ CSDL mu n cho phép ngư i dùng truy c p thì ngư i dùng ư c c p quy n trên CSDL hi n hành.Lo i b quy n truy c p vào CSDL db_name c a ngư i dùng Use db_name Go sp_revokedbaccess [@loginame =] loginC p phát quy n th c thi trên cơ s d li u Sau khi c p phát quy n cho ngư i dùng truy c p vào CSDL, k ti p cho phép ngư idùng ó có quy n truy c p và x lý các i tư ng trong CSDL cũng như x lý d li utrên các i tư ng ó.Các quy n truy c p trên các i tư ng trong m t CSDL:
  • 45. Bài gi ng tóm t t H qu n tr cơ s d li u 43 Quy n Di n gi iSELECT Cho phép ngư i s d ng nhìn th y d li u, n u ngư i s d ng có quy n này thì h ch có th th c thi nh ng phát bi u select truy v n d li u trên các b ng hay các view ư c cho phép.INSERT Cho phép ngư i s d ng thêm d li u, n u ngư i s d ng có quy n này, h có th th c hi n phát bi u Insert, i v i m t s h th ng CSDL khác, mu n th c thi phát bi u Insert, ngư i s d ng ph i có quy n Select, trong SQL Server quy n Insert không liên quan n quy n truy v n Select.UPDATE Quy n này cho phép ngư i s d ng ch nh s a d li u b ng phát bi u Update.DELETE Quy n này cho phép ngư i s d ng xóa d li u b ng phát bi u Delete.REFERENCE Cho phép ngư i s d ng thêm d li u vào b ng có khóa ngo i b ng phát bi u Insert, trong SQL Server quy n Insert không liên quan n quy n truy v n Select.EXECUTE Quy n này cho phép ngư i s d ng th c thi các th t c (SP) trong CSDL.Th t c c p quy n GRANT GRANT ALL | < PERMISSION> [, …n] ON <table ho c view name> [(<column name> [, … n])] | <stored ho c extension procedure name> TO <login or role name> [, … n] [WITH GRANT OPTION] [AS <role name>]Trong ó: t khóa ALL cho phép ngư i s d ng có t t c các quy n. PERMISSION làm t trong các quy n: SELECT, INSERT, UPDATE, DELETE, REFERENCE,EXECUTE. Ch rõ nh ng b ng d li u, view ho c th t c nào cho phép ngư i dùng truyc p và x lý.T ch i quy n truy v n và x lý d li u DENY ALL | < PERMISSION> [, …n] ON <table ho c view name> [(<column name> [, … n])] | <stored ho c extension procedure name>
  • 46. Bài gi ng tóm t t H qu n tr cơ s d li u 44 TO <login or role name> [, … n] [Cascade]Lo i b quy n truy v n và x lý d li u REVOKE [ GRANT OPTION FOR ] { ALL [ PRIVILEGES ] | permission [ ,...n ] } { [ ( column [ ,...n ] ) ] ON { table | view } | ON { table | view } [ ( column [ ,...n ] ) ] | ON { stored_procedure | extended_procedure } | ON { user_defined_function } } { TO | FROM } security_account [ ,...n ] [ CASCADE ] [ AS { group | role } ]Quy n t o i tư ng trong CSDL Trong CSDL có m t s i tư ng và các ch c năng như sao lưu d li u mà m ingư i s d ng trên CSDL tùy theo ch c năng và nhi m v c th ư c phép hay không ư c phép t o các i tư ng như table, view, stored procedure, … và t o CSDL.Các quy n t o các i tư ng như sau: Create Database. Create Table. Create View. Create Procedure. Create Rule. Create Default. Backup Database. Backup Log. phân quy n t o i tư ng trong CSDL cho ngư i dùng, trong SQL Server có ths d ng th t c GRANT như sau: GRANT < ALL | Statement [, … n]> TO <login ID> [, … n]
  • 47. Bài gi ng tóm t t H qu n tr cơ s d li u 454. Vai trò c a ngư i s d ng trong SQL Server và cơ s d li uVai trò trên SQL Server: Vai trò (Role) Di n gi i sysadmin Có các quy n tương ương v i sa. serveradmin C u hình m t s tham s và t t server. setupadmin B gi i h n b t m t s ch c năng liên k t server và kh i ng m t s th t c. securityadmin Qu n lý ngư i dùng và t o CSDL. processadmin ư c phép d ng các giao tác ang th c hi n trên CSDL và m t s quá trình th c hi n khác c a SQL Server. dbcreator ư c phép t o CSDL. Diskadmin Qu n lý các t p tin liên quan n CSDL SQL Server.Vai trò trên CSDL: Vai trò Di n gi i V i vai trò này, ngư i s d ng (NSD) thu c nhóm s h u db_owner CSDL m i có th truy c p vào CSDL. db_accessadmin Th c hi n các ch c năng gi ng như securityadmin. NSD ư c phép select trên các b ng d li u c a các ngư i db_datareader dùng khác trong CSDL. NSD ư c phép insert, update, delete trên các b ng d li u db_datawriter c a các ngư i dùng khác trong CSDL. db_ddladmin NSD có th thêm hay ch nh s a các i tư ng c a CSDL. db_securityadmin NSD có quy n tương ương v i quy n c a securityadmin. db_backupoperator NSD có th th c hi n ch c năng backup d li u. db_denydareader Không cho phép s d ng phát bi u SELECT trên t t c các b ng d li u c a CSDL. db_denydawriter Không cho phép s d ng phát bi u INSERT, UPDATE, DELETE trên t t c các b ng d li u c a CSDL.S d ng các th t c h th ng t o m t role m i, thêm m t ngư i dùng vào m t role,lo i b ngư i s d ng ra kh i m t role. o T o m t role sp_addrole [ @rolename = ] role_name [ , [ @ownername = ] owner ] Trong ó:
  • 48. Bài gi ng tóm t t H qu n tr cơ s d li u 46 @rolename: tên role m i @ownername: ch s h u c a role m i, m c nh là dbo Sau khi t o role m i c n ph i gán m t s quy n truy c p và x lý trên các b ng d li u nào ó trong CSDL cho role m i ó. o Thêm ngư i s d ng vào Role sp_addrolemember [ @rolename = ] role_name , [ @membername = ] ‘login_ID o Lo i b ngư i s d ng ra kh i m t role sp_droprolemember [ @rolename = ] role_name , [ @membername = ] login_ID II. B n sao d li u Ph n này s gi i thi u k thu t làm gi m lưu lư ng d li u giao d ch v i SQL Serverkhi ã c u hình nhi u Server trên m ng.1. Gi i thi u v nhân b n d li u Nhân b n d li u (Replication) là công c ư c s d ng sao chép m t ho c nhi uCSDL n m t ho c nhi u server (SQL Server) khác. Các Server ư c t trong m ngmáy tính n i b (LAN). Ngư i khai thác có th th c hi n truy c p n CSDL có trongServer ch a d li u ư c nhân b n. D li u gi a các máy ư c th c hi n ng b v inhau theo l ch ho c theo s ki n, khi có yêu c u. Nhân b n d li u có nh ng ưu i m sau: − D li u ư c lưu tr nhi u nơi, hi u qu trong vi c có nhi u ng d ng cùng truy c p, khai thác. − Thích h p v i các ng d ng phân tích d li u c a h th ng x lý giao d ch tr c tuy n (OLTP) trong kho d li u (Data warehouse). − Có th khai thác d li u khi không k t n i n Server. − Gi m thi u xung t do s lư ng l n các giao d ch trên m ng. − Là m t gi i pháp an toàn khi Server b l i ho c b o dư ng.Mô hình nhân b n.D ch v nhân b n d li u g m các thành ph n cơ b n sau: Publisher, Distributor,Subscribers, Publications, Articles, Subscriptions.− Publisher: là server cung c p d li u nhân b n cho các server khác. M t publisher có th thi t l p nhi u b d li u nhân b n (g i là publication).
  • 49. Bài gi ng tóm t t H qu n tr cơ s d li u 47− Distributor: là server qu n lý các thông tin nhân b n, lưu tr d li u trong các giao d ch th c hi n nh n và chuy n d li u t Publisher n các Subscriber. Remote distributor là server tách r i kh i publisher và ư c c u hình là distributor. Local distributor là m t server ư c c u hình là Publisher và Distributor.− Subscriber: Là server nh n d li u nhân b n. Subscriber g n li n v i publication (là máy ch nh n d li u nhân b n c a m t b d li u c u hình nhân b n).− Article: Là m t b ng, t p d li u ho c i tư ng c a CSDL c u hình nhân b n.− Publication: Là m t t p g m m t ho c nhi u article.− Subscription: Là m t giao d ch yêu c u b n sao b d li u ho c các i tư ng c a CSDL th c hi n nhân b n. Trong m i giao d ch publisher th c hi n y (push subscription) d li u, subscriber th c hi n kéo (pull subscription).Nhân b n d li u ư c th c hi n theo nh ng mô hình cơ b n sau:− Central Publisher: Là mô hình Publisher và Distributor thi t l p trên m t máy. G m các mô hình sau: M t Publisher và m t Subscriber:
  • 50. Bài gi ng tóm t t H qu n tr cơ s d li u 48 M t Publisher và nhi u Subscriber. Publisher và Subscriber ư c thi t l p trên m t máy:− Publisher và Distributor không thi t l p trên m t máy:− Republisher: Là mô hình Publisher xu t b n d li u n Subscriber, sau ó Subscriber ư c thi t l p là Publisher xu t b n d li u n Subscriber khác.
  • 51. Bài gi ng tóm t t H qu n tr cơ s d li u 49 ư ng truy n gi a hai máy ư c thi t l p là Publisher có th t c th p, phù h p v iv trí xa nhau. Ví d mô hình gi a các vùng cách xa nhau:+ Central Subscriber: Là mô hình Subscriber thi t l p nh n d li u xu t b n t nhi uPublisher.
  • 52. Bài gi ng tóm t t H qu n tr cơ s d li u 50Nh ng ki u nhân b n d li u.Có 3 ki u nhân b n d li u: Snaphot, Transaction, Merge.Snapshot replication: là ki u nhân b n th c hi n sao chép, phân tán d li u ho c các itư ng c a CSDL t i m t th i i m. Snapshot thư ng ư c s d ng cho nh ng tình hu ngsau: D li u thư ng là tĩnh, ít thay i. Nhân b n s lư ng d li u nh .Transaction replication: là ki u nhân b n mà b t u b ng nhân b n Snapshot, sau ó sth c hi n nhân giao d ch d li u theo các s ki n insert, update, delete và nh ng thay iliên quan n th c hi n th t c, khung nhìn ch m c. Nhân b n ki u này cho phép th chi n l c d li u t i Publisher, cho phép ngư i s d ng s a i d li u nhân b n t i
  • 53. Bài gi ng tóm t t H qu n tr cơ s d li u 51subscriber và chuy n d li u ã s a i n Publisher ho c Subscriber khác, d li u s a i này có th coi là d li u ư c xu t b n. Nhân b n ki u này ư c th c hi n khi: Mu n s a i d li u ư c xu t b n chuy n n Subscriber, th i gian th c hi n theo giây, ho c t c th i. C n giao d ch trên toàn b h th ng nhân b n d li u (d li u có th chuy n nt t c các Subscriber ho c không chuy n n Subscriber nào). Subscriber thư ng xuyên k t n i v i Publisher.Merge replication: là ki u nhân b n d li u cho phép th c hi n nhân b n s a i d li utrên nhi u Subscriber, có th k t n i (online) ho c không k t n i (offline) n Publisher.D li u s ư c ng b theo l ch ho c theo yêu c u, d li u c p nh t có th i i m sau s ư c ch p nh n. Ki u nhân b n này th c hi n khi: Nhi u Subscriber có nhu c u c p nh t d li u và chuy n d li u c p nh t n Publisher ho c Subscriber khác. Subscriber yêu c u nh n ho c chuy n d li u khi offline, ng b d li u v i các Subscriber và Publisher sau.
  • 54. Bài gi ng tóm t t H qu n tr cơ s d li u 522. C u hình Publisher và Distributor.Trư c khi th c hi n c u hình các máy thành Publisher hay Distributor ta ph i th c hi nch y d ch v SQL Server Agent trong ch c năng Service manager. Các bư c c u hìnhnhư sau:- Ch n Server c n c u hình -> Replication- Nh p ph i chu t -> Configure Publishing Subscription and Distribution...- Th c hi n theo các bư c: + Ch n thư m c Snapshot
  • 55. Bài gi ng tóm t t H qu n tr cơ s d li u 53- t tên CSDL c a Distribution.- Ch n Server c u hình thành Publisher.
  • 56. Bài gi ng tóm t t H qu n tr cơ s d li u 54- Ch n CSDL tham gia nhân b n, ki u nhân b n.- Ch n Server ư c c u hình là Subscriber c a Publisher ang thi t l p.- K t thúc.T o PublicationBư c này s th c hi n t o Publication, cách th c hi n như sau:+ Ch n Publication trong Replication c a Publisher.+ Nh n ph i chu t → ch n New Publication...
  • 57. Bài gi ng tóm t t H qu n tr cơ s d li u 55+ Th c hi n theo các bư c: - Ch n CSDL c n xu t b n d li u ho c i tư ng. - Ch n ki u nhân b n (trong ví d này th c hi n ki u Merge).- Ch n phiên b n SQL Server c a Subscriber.- Ch n Article tham gia Publication.
  • 58. Bài gi ng tóm t t H qu n tr cơ s d li u 56- t tên cho Publication.- K t thúc.T o Push Subscription. Bư c này th c hi n t o th t c y (push) t Publisher (Distributor trong ví dnày) n Subscriber, ư c th c hi n trên Publisher. Các bư c th c hi n như sau:
  • 59. Bài gi ng tóm t t H qu n tr cơ s d li u 57- Ch n Publication c a Publisher -> Nh n ph i chu t -> Push new Subscription...- Ch n Subscriber.- Ch n CSDL trên Subscriber n u ã có, n u chưa có th c hi n ch n ch c năng t o m i. - Ch n l ch th c hi n ng b d li u. - K t thúc. Sau khi thi t l p xong trên Subscriber s có CSDL theo tên ã t o.T o Pull Subscription
  • 60. Bài gi ng tóm t t H qu n tr cơ s d li u 58Bư c này th c hi n t o công c kéo d li u nhân b n t Publisher v Subscriber, ư cth c hi n trên Subscriber.- Ch n Subscription c a Subscriber → Nh n ph i chu t → New Pull Supcription...- Th c hi n theo các bư c: + Ch n Publication. + Ch n Agent tham gia k t n i Publisher.- Ch n CSDL ích.
  • 61. Bài gi ng tóm t t H qu n tr cơ s d li u 59- Th c hi n ti p các bư c và k t thúc. N u ã t o Push Subscription v i m t CSDL s không ư c t o Pull Subscription v i CSDL ó.Th c hi n ng b d li uSau khi thi t l p theo các mô hình nhân b n xong, có th th c hi n ng b d li u b ngcách:- Th c hi n theo l ch.- Theo yêu c u: Ch n Subscription (Push ho c Pull) → Nh n ph i chu t → StartSynchronizing.Sau khi th c hi n xong d li u s ư c ng b gi a Publisher và Subscriber. Ngoài th chi n theo công c ta có th tìm hi u th c hi n nhân b n theo câu l nh T-SQL ho c StoredProcedure.III. Sao lưu và khôi ph c d li u1. Lý do ph i sao lưu và khôi ph c d li u Trong quá trình th c hi n qu n tr CSDL SQL Server thì m t s nguyên nhân sau ây b tbu c b n ph i xem xét n k thu t sao lưu và khôi ph c d li u: ĩa b h ng (ch a các t p tin CSDL). Server b h ng. Nguyên nhân bên ngoài (thiên nhiên, h a ho n, m t c p,...). User vô tình xóa d li u. B vô tình hay c ý làm thông tin sai l ch. B hack.2. Các lo i sao lưu d li u Sao lưu (Backup) d li u trong SQL Server g m các lo i sau: Full Database Backups: sao chép toàn b CSDL (các t p tin bao g m các b ng, khung nhìn, các i tư ng khác). Differential Database Backups: sao chép nh ng d li u thay i trong Data file k t l n full backup g n nh t. File or file group backups: sao chép m t file ơn hay file group. Differential File or File Group Backups: th c hi n như Differential Database nhưng copy ph n d li u thay i c a file ơn ho c file group. Transaction log backups: Ghi nh n t t c các transaction ch a trong transaction log file k t l n transaction log backup g n nh t. V i lo i sao lưu này ta có th khôi ph c d li u t i m t th i i m.3. Các mô hình khôi ph c d li u
  • 62. Bài gi ng tóm t t H qu n tr cơ s d li u 60 Full Recovery model: Là mô hình ph c h i toàn b ho t ng giao d ch c a d li u (Insert, Update, Delete, ho t ng b i l nh bcp, bulk insert). V i mô hình này ta có th ph c h i d li u t i m t th i i m trong quá kh ã ư c lưu trong transaction log file. Bulk-Logged Recovery Model: Mô hình này ư c th c thi cho các thao tác bcp, bulk insert, create ch m c, writetext, updatetext, các ho t ng này ch nh t ký s ki n vào log bi t mà không sao lưu toàn b d li u, chi ti t như trong full recover. Các s ki n Insert, Update, Delete v n ư c nh t ký và khôi ph c bình thư ng. Simple Recovery Model: V i mô hình này b n ch ph c h i l i th i i m sao lưu g n nh t mà không theo th i i m khác trong quá kh . Cách t mô hình khôi ph c: - Ch n CSDL. - Nh n nút ph i chu t → Properties → Options → Recovery → ch n Model.Xét ví d sau: Gi s ta có m t CSDL ư c backup theo chi n lư c như hình v bên dư i Nhìn hình ta th y CSDL ư c l p l ch Full Database Backup vào ngày ch nh t,Differential Database Backup vào ngày th ba và th năm, còn Log Database Backup vào5 ngày trong tu n, ngày th sáu có s c v i CSDL, data file b h ng. V n t ra làph i ph c h i d li u và CSDL ho t ng bình thư ng. Ta ph i làm các bư c sau: Th c hi n Backup log file (gi s log file không b h ng). Khôi ph c Full Database c a ngày ch nh t. Ph c h i Differential Database c a ngày th năm. Khôi ph c Transaction log backup ngày th năm.
  • 63. Bài gi ng tóm t t H qu n tr cơ s d li u 614. Sao lưu cơ s d li u (Backup Database) Trư c khi xem xét k thu t sao lưu CSDL, ta th ng nh t m t s thu t ng b ng ti ngAnh như sau: Backup: Là quá trình copy toàn b ho c m t ph n database, transaction log, file, file group thành l p m t backup set ư c ch a trong backup media (disk ho c tape) b ng cách s d ng m t backup device (tape drive name ho c physical filename). Backup Device: M t file v t lý ho c m t drive tape. Backup file: M t file ch a Backup set. Backup media: là Disk ho c tape. Backup set: M t b backup m t l n backup ơn ch a trên backup media. Các bư c th c hi n backup như sau: − Ch n CSDL c n backup. − Nh n ph i chu t → All Tasks → Backup Database… - Nh p các tham s , l a ch n ki u.5. Khôi ph c d li u (Restore Database) Là ch c năng th c hi n khôi ph c d li u ã sao lưu, tùy theo chi n lư c backup màngư i qu n tr có th ph c h i n th i i m nào, thu ư c b d li u trong quá kh nhưth nào. Khôi ph c d li u ư c th c hi n theo th t backup, thông tin này ư c lưu trtrong msdb. Các bư c th c hi n như sau: − Ch n m c Databases → Nh n nút ph i chu t → All Tasks → Restore Database… − Nh p tham s , ch n mô hình khôi ph c.IV. Qu n lý giao d ch1. Các khái ni m M t giao d ch là m t ơn v th c hi n chương trình truy xu t và có th c p nh t nhi um c d li u. M t giao d ch thư ng là k t qu c a s th c hi n m t chương trình ngư idùng ư c vi t trong m t ngôn ng thao tác d li u m c cao ho c m t ngôn ng l p trình(SQL, COBOL, PASCAL ...), và ư c phân cách b i các câu l nh (ho c các l i g i hàm)có d ng begin transaction và end transaction. Giao d ch bao g m t t c các ho t ng ư c th c hi n gi a begin và end transaction. m b o tính toàn v n c a d li u, ta yêu c u h CSDL duy trì các tính ch t sau c agiao d ch: • Tính nguyên t (Atomicity). Ho c toàn b các ho t ng c a giao d ch ư c ph n ánh úng n trong CSDL ho c không có gì c . • Tính nh t quán (consistency). S th c hi n c a m t giao d ch là cô l p (Không
  • 64. Bài gi ng tóm t t H qu n tr cơ s d li u 62 có giao d ch khác th c hi n ng th i) b o t n tính nh t quán c a CSDL. • Tính cô l p (Isolation). Cho dù nhi u giao d ch có th th c hi n ng th i, h th ng ph i m b o r ng i v i m i c p giao d ch Ti, Tj , ho c Tj k t thúc th c hi n trư c khi Ti kh i ng ho c Tj b t u s th c hi n sau khi Ti k t thúc. Như v y m i giao d ch không c n bi t n các giao d ch khác ang th c hi n ng th i trong h th ng. • Tính b n v ng (Durability). Sau m t giao d ch hoàn thành, các thay i ã ư c t o ra i v i CSDL v n còn ngay c khi x y ra s c h th ng. Các tính ch t này thư ng ư c g i là các tính ch t ACID (Các ch cái u c a b ntính ch t). Ta xét m t ví d : m t h th ng ngân hàng g m m t s tài kho n và m t t pcác giao d ch truy xu t và c p nh t các tài kho n. T i th i i m hi n t i, ta gi thi t r ngCSDL n m trên ĩa, nhưng m t vài ph n c a nó ang n m t m th i trong b nh . Cáctruy xu t CSDL ư c th c hi n b i hai ho t ng sau: • READ(X): chuy n m c d li u X t CSDL n buffer c a giao d ch th c hi n ho t ng READ này. • WRITE(X): chuy n m c d li u X t buffer c a giao d ch th c hi n WRITE n CSDL. Trong h CSDL th c, ho t ng WRITE không nh t thi t d n n s c p nh t tr cti p d li u trên ĩa; ho t ng WRITE có th ư c lưu t m th i trong b nh và ư cth c hi n trên ĩa mu n hơn. Trong ví d , ta gi thi t ho t ng WRITE c p nh t tr cti p CSDL. Ti là m t giao d ch chuy n 50 t tài kho n A sang tài kho n B. Giao d ch này có th ư c xác nh như sau: Ti : READ(A); A:=A - 50; WRITE(A) READ(B); B:=B + 50; WRITE(B);Ta xem xét m i yêu c u trong ACID:• Tính nh t quán: òi h i nh t quán ây là t ng c a A và B là không thay ib i s th c hi n giao d ch. N u không có yêu c u nh t quán, ti n có th ư c t o ra hay m t b i giao d ch. D dàng ki m nghi m r ng n u CSDL nh t quán trư c m t th c hi n giao d ch, nó v n nh t quán sau khi th c hi n giao d ch. m b o tính nh t quán
  • 65. Bài gi ng tóm t t H qu n tr cơ s d li u 63 cho m t giao d ch là trách nhi m c a ngư i l p trình ng d ng ngư i ã vi t ra giao d ch. Nhi m v này có th ư c làm cho d dàng b i ki m th t ng các ràng bu c toàn v n.• Tính nguyên t : gi s r ng ngay trư c khi th c hi n giao d ch Ti, giá tr c a các tài kho n A và B tương ng là 1000 và 2000. Gi s r ng trong khi th c hi n giao d ch Ti, m t s c x y ra c n tr Ti hoàn t t thành công s th c hi n c a nó. Ta cũng gi s r ng s c x y ra sau khi ho t ng WRITE(A) ã ư c th c hi n, nhưng trư c khi ho t ng WRITE(B) ư c th c hi n. Trong trư ng h p này giá tr c a tài kho n A và B là 950 và 2000. Ta ã m t 50$. T ng A+B không còn ư c b o toàn. Như v y, k t qu c a s c là tr ng thái c a h th ng không còn ph n ánh tr ng thái c a th gi i th c mà CSDL ư c gi thi t n m gi . Ta g i tr ng thái như v y là tr ng thái không nh t quán. Ta ph i m b o r ng tính không nh t quán này không xu t hi n trong m t h CSDL. Tuy nhiên, t i m t vài th i i m, h th ng có th trong tr ng thái không nh t quán. Ví d giao d ch Ti, trong quá trình th c hi n cũng t n t i th i i m t i ó giá tr c a tài kho n A là 950 và tài kho n B là 2000 – m t tr ng thái không nh t quán. Tr ng thái này ư c thay th b i tr ng thái nh t quán khi giao d ch ã hoàn t t. Như v y, n u giao d ch không bao gi kh i ng ho c ư c m b o s hoàn t t, tr ng thái không nh t quán s không bao gi x y ra. ó chính là lý do có yêu c u v tính nguyên t : N u tính ch t nguyên t ư c m b o, t t c các hành ng c a giao d ch ư c ph n ánh trong CSDL ho c không có gì c . ý tư ng cơ s m b o tính nguyên t là như sau: h CSDL lưu v t (trên ĩa) các giá tr cũ c a b t kỳ d li u nào trên ó giao d ch ang th c hi n vi t, n u giao d ch không hoàn t t, giá tr cũ ư c khôi ph c t tr ng thái c a h th ng tr l i tr ng thái trư c khi giao d ch di n ra. m b o tính nguyên t là trách nhi m c a h CSDL, và ư c qu n lý b i m t thành ph n ư c g i là thành ph n qu n tr giao d ch (transaction- management component).• Tính b n v ng: tính ch t b n v ng m b o r ng m i khi m t giao d ch hoàn t t, t t c các c p nh t ã th c hi n trên cơ s d li u v n còn ó, ngay c khi x y ra s c h th ng sau khi giao d ch ã hoàn t t. Ta gi s m t s c h th ng có th gây ra vi c m t d li u trong b nh chính, nhưng d li u trên ĩa thì không m t. Có th mb o tính b n v ng b i vi c m b o ho c các c p nh t ư c th c hi n b i giao d ch ã ư c vi t lên ĩa trư c khi giao d ch k t thúc ho c thông tin v s c p nh t ư c th c hi n b i giao d ch và ư c vi t lên ĩa cho phép CSDL xây d ng l i các c p nh t khi h CSDL ư c kh i ng l i sau s c . m b o tính b n v ng là trách nhi m c a m t thành ph n c a h CSDL ư c g i là thành ph n qu n tr ph c h i (recovery-management component). Hai thành ph n qu n tr giao d ch và qu n tr ph c h i quan h m t thi t v i nhau.
  • 66. Bài gi ng tóm t t H qu n tr cơ s d li u 64• Tính cô l p: ngay c khi tính nh t quán và tính nguyên t ư c m b o cho m i giao d ch, tr ng thái không nh t quán v n có th x y ra n u trong h th ng có m t s giao d ch ư c th c hi n ng th i và các ho t ng c a chúng an xen theo m t cách không mong mu n. Ví d , CSDL là không nh t quán t m th i trong khi giao d ch chuy n kho n t A sang B ang th c hi n, n u m t giao d ch khác th c hi n ng th i c A và B t i th i i m trung gian này và tính A+B, nó ã tham kh o m t giá tr không nh t quán, sau ó nó th c hi n c p nh t A và B d a trên các giá tr không nh t quán này, như v y CSDL có th tr ng thái không nh t quán ngay c khi c hai giao d ch hoàn t t thành công. M t gi i pháp cho v n các giao d ch th c hi n ng th i là th c hi n tu n t các giao d ch, tuy nhiên gi i pháp này làm gi m hi u năng c a h th ng. Các gi i pháp khác cho phép nhi u giao d ch th c hi n tương tranh ã ư c phát tri n ta s th o lu n v chúng sau này. Tính cô l p c a m t giao d ch m b o r ng s th c hi n ng th i các giao d ch d n n m t tr ng thái h th ng tương ương v i m t tr ng thái có th nh n ư c b i th c hi n các giao d ch này m t t i m t th i i m theo m t th t nào ó. m b o tính cô l p là trách nhi m c a m t thành ph n c a h CSDL ư c g i là thành ph n qu n tr tương tranh (concurrency-control component).Tr ng thái giao d ch N u không có s c , t t c các giao d ch u hoàn t t thành công. Tuy nhiên, m t giaod ch trong th c t có th không th hoàn t t s th c hi n c a nó. Giao d ch như v y ư cg i là b b d . N u ta m b o ư c tính nguyên t , m t giao d ch b b d không ư cphép làm nh hư ng t i tr ng thái c a CSDL. Như v y, b t kỳ thay i nào t giao d chb b d này u ph i b h y b . M i khi các thay i do giao d ch b b d b h y b ,ta nói r ng giao d ch b cu n l i (rolled back). Khi m t giao d ch hoàn t t m t cáchthành công s th c hi n c a nó ư c g i là ư c bàn giao (committed). M t giaod ch ư c bàn giao, các l nh c p nh t s bi n i CSDL sang m t tr ng thái nh t quánm i và nó là b n v ng ngay c khi có s c . M i khi m t giao d ch là ư c bàn giao, takhông th h y b các hi u qu c a nó b ng cách b d nó. Cách duy nh t h y b cáchi u qu c a m t giao d ch ư c bàn giao là th c hi n m t giao d ch bù (compensatingtransaction), nhưng không ph i luôn luôn có th t o ra m t giao d ch bù. Do v y tráchnhi m vi t và th c hi n m t giao d ch bù thu c v ngư i s d ng và không ư c qu n lýb i h CSDL. M t giao d ch ph i trong m t trong các tr ng thái sau:• Ho t ng (Active): tr ng thái kh i u; giao d ch gi trong tr ng thái này trong khi nó ang th c hi n.• ư c bàn giao b ph n (Partially Committed): sau khi l nh cu i cùng ư c th c hi n.
  • 67. Bài gi ng tóm t t H qu n tr cơ s d li u 65• Th t b i (Failed): sau khi phát hi n r ng s th c hi n không th ti p t c ư c n a.• B d (Aborted): sau khi giao d ch ã b cu n l i và CSDL ã ph c h i l i tr ng thái c a nó trư c khi kh i ng giao d ch.• ư c bàn giao (Committed): sau khi hoàn thành thành công giao d ch. Ta nói m t giao d ch ã ư c bàn giao (committed) ch n u nó ã i n tr ng tháiCommitted, tương t , m t giao d ch b b d n u nó ã i n tr ng thái Aborted. M tgiao d ch ư c g i là k t thúc n u nó ho c là committed ho c là Aborted. M t giao d chkh i u b i tr ng thái Active. Khi nó k t thúc l nh sau cùng c a nó, nó chuy n sangtr ng thái partially committed. T i th i i m này, giao d ch ã hoàn thành s th c hi nc a nó, nhưng nó v n có th b b d do u ra hi n t i v n có th trú t m th i trong bnh chính và như th m t s c ph n c ng v n có th ngăn c n s hoàn t t c a giao d ch.H CSDL khi ó ã k p vi t lên ĩa y thông tin giúp vi c tái t o các c p nh t ã ư c th c hi n trong quá trình th c hi n giao d ch, khi h th ng tái kh i ng sau s c .Sau khi các thông tin sau cùng này ư c vi t lên ĩa, giao d ch chuy n sang tr ng tháicommitted. Bi u tr ng thái tương ng v i m t giao d ch như sau: Partially Committed Committed Active Failed Aborted V i gi thi t s c h th ng không gây ra s m t d li u trên ĩa, m t giao d ch i ntr ng thái Failed sau khi h th ng xác nh r ng giao d ch không th ti n tri n bìnhthư ng ư c n a (do l i ph n c ng ho c ph n m m). Như v y, giao d ch ph i ư c cu nl i r i chuy n sang tr ng thái b d . T i i m này, h th ng có hai l a ch n: • Kh i ng l i giao d ch, dùng l a ch n này ch n u giao d ch b b d là do l i ph n c ng ho c ph n m m nào ó không liên quan n logic bên trong c a giao d ch. Giao d ch ư c kh i ng l i ư c xem là m t giao d ch m i. • Hu giao d ch thư ng ư c ti n hành ho c do l i logic bên trong giao d ch, l i này c n ư c ch nh s a b i vi t l i chương trình ng d ng ho c do u vào x u ho c do d li u mong mu n không tìm th y trong CSDL.
  • 68. Bài gi ng tóm t t H qu n tr cơ s d li u 66 Ta ph i th n tr ng khi th c hi n thao tác vi t ngoài kh quan sát (observable externalWrite - như vi t ra terminal hay máy in). M i khi m t vi t như v y x y ra, nó không thb xoá do nó có th ph i giao ti p v i bên ngoài h CSDL. H u h t các h th ng cho phépcác thao tác vi t như th x y ra ch khi giao d ch ã di vào tr ng thái committed. M t cách th c thi m t sơ như v y là cho h CSDL lưu tr t m th i b t kỳ giá tr nào k t h pv i các thao tác vi t ngoài như v y trong lưu tr không hay thay i và th c hi n các thaotác vi t hi n t i ch sau khi giao d ch ã i vào tr ng thái committed. N u h th ng th tb i sau khi giao d ch i vào tr ng thái committed nhưng trư c khi hoàn t t các tháo tácvi t ngoài, h CSDL s làm các thao tác vi t ngoài này (s d ng d li u trong lưu trkhông hay thay i) khi h th ng kh i ng l i. Trong m t s ng d ng, có th mu n cho phép giao d ch ho t ng trình bày d li ucho ngư i s d ng, c bi t là các giao d ch kéo dài trong vài phút hay vài gi . Ta khôngth cho phép xu t ra d li u kh quan sát như v y tr phi ta bu c ph i làm t n h i tínhnguyên t giao d ch. H u h t các h th ng giao d ch hi n hành m b o tính nguyên t vàdo v y c m d ng trao i v i ngư i dùng này.Th c thi tính nguyên t và tính b n v ng Thành ph n qu n tr ph c h i c a m t h CSDL h tr tính nguyên t và tính b nv ng. Trư c tiên ta xét m t sơ ơn gi n (song c c kỳ thi u hi u qu ). Sơ này githi t r ng ch m t giao d ch là ho t ng t i m t th i i m và ư c d a trên vi c t o b nsao c a CSDL ư c g i là các b n sao khu t (shadow copies). Sơ gi thi t r ng CSDLch là m t file trên ĩa. M t con tr ư c g i là db_pointer ư c duy trì trên ĩa, nó tr t ib n sao hi n hành c a CSDL. Trong sơ CSDL khu t (shadow-database), m t giao d ch mu n c p nh t CSDL, utiên t o ra m t b n sao y c a CSDL. T t c các thao tác c p nh t ư c làm trên b nsao này, không ng t i b n g c. N u t i m t th i i m b t kỳ giao d ch b b d , b n saom i b xoá. B n sao cũ c a CSDL không b nh hư ng. N u giao d ch hoàn t t, nó ư c ư c bàn giao như sau: u tiên, h i h i u hành m b o r ng t t c các trang c ab n sao m i ã ư c vi t lên ĩa (flush). Sau khi flush con tr db_pointer ư c c p nh t tr n b n sao m i; b n sao m i tr thành b n sao hi n hành c a CSDL. B n sao cũ bxoá i. Giao d ch ư c g i là ã ư c ư c bàn giao t i th i i m s c p nh t con trdb_pointer ư c ghi lên ĩa. Ta xét k thu t này qu n lý s c giao d ch và s c h th ngra sao? Trư c tiên, ta xét s c giao d ch. N u giao d ch th t b i t i th i i m b t kỳ trư ckhi con tr db_pointer ư c c p nh t, n i dung cũ c a CSDL không b nh hư ng. Ta cóth b d giao d ch b i xoá b n sao m i. M i khi giao d ch ư c ư c bàn giao, t t c cácc p nh t mà nó ã th c hi n là trong CSDL ư c tr b i db_pointer. Như v y, ho c t tc các c p nh t c a giao d ch ã ư c ph n ánh ho c không k t qu nào ư c ph n ánh,
  • 69. Bài gi ng tóm t t H qu n tr cơ s d li u 67b t ch p t i s c giao d ch. Bây gi ta xét s c h th ng. Gi s s c h th ng x y rat i th i i m b t kỳ trư c khi db_pointer ã ư c c p nh t ư c vi t lên ĩa. Khi ó, khih th ng kh i ng l i, nó s c db_pointer và như v y s th y n i dung g c c a CSDL– không k t qu nào c a giao d ch ư c nhìn th y trên CSDL. Bây gi l i gi s r ng sc h th ng x y ra sau khi db_pointer ã ư c c p nh t lên ĩa. Trư c khi con tr ư cc p nh t, t t c các trang ư c c p nh t c a b n sao m i ã ư c vi t lên ĩa. T gi thi tfile trên ĩa không b hư h i do s c h th ng. Do v y, khi h th ng kh i ng l i, nó s c db_pointer và s th y n i dung c a CSDL sau t t c các c p nh t ã th c hi n b igiao d ch. S th c thi này ph thu c vào vi c vi t lên db_pointer, vi c vi t này ph i lànguyên t , có nghĩa là ho c t t c các byte c a nó ư c vi t ho c không byte nào ư cvi t. N u ch m t s byte c a con tr ư c c p nh t b i vi c vi t nhưng các byte khác thìkhông thì con tr tr thành vô nghĩa và c b n cũ l n b n m i c a CSDL có th tìm th ykhi h th ng kh i ng l i. May m n thay, h th ng ĩa cung c p các c p nh t nguyên ttoàn b kh i ĩa ho c ít nh t là m t sector ĩa. Như v y h th ng ĩa m b o vi c c pnh t con tr db_pointer là nguyên t . Tính nguyên t và tính b n v ng c a giao d ch ư c m b o b i vi c th c thi b n sao bóng c a thành ph n qu n tr ph c h i. S th c thi nàyc c kỳ thi u hi u qu trong ng c nh CSDL l n, do s th c hi n m t giao d ch òi h iph i sao toàn b CSDL. Hơn n a s th c thi này không cho phép các giao d ch th c hi n ng th i v i các giao d ch khác. Phương pháp th c thi tính nguyên t và tính lâu b nm nh hơn và t n kém hơn ư c trình bày trong chương h th ng ph c h i.Các th c hi n tương tranhH th ng x lý giao d ch thư ng cho phép nhi u giao d ch th c hi n ng th i. Vi c chophép nhi u giao d ch c p nh t d li u ng th i gây ra nh ng khó khăn trong vi c b o m s nh t quán d li u. B o m s nh t quán d li u mà không quan tâm t i s th chi n tương tranh các giao d ch s c n thêm các công vi c ph . M t phương pháp ti nhành là cho các giao d ch th c hi n tu n t : m b o r ng m t giao d ch kh i ng chsau khi giao d ch trư c ã hoàn t t. Tuy nhiên có hai lý do h p lý th c hi n tươngtranh là:• M t giao d ch g m nhi u bư c. M t vài bư c liên quan t i ho t ng I/O; các bư c khác liên quan n ho t ng CPU. CPU và các ĩa trong m t h th ng có th ho t ng song song. Do v y ho t ng I/O có th ư c ti n hành song song v i x lý t i CPU. S song song c a h th ng CPU và I/O có th ư c khai thác ch y nhi u giao d ch song song. Trong khi m t giao d ch ti n hành m t ho t ng c/vi t trên m t ĩa, m t giao d ch khác có th ang ch y trong CPU, m t giao d ch th ba có th th c hi n c/vi t trên m t ĩa khác ... như v y s tăng lư ng u vào h th ng có nghĩa là tăng s lư ng giao d ch có th ư c th c hi n trong m t lư ng th i gian ã cho, cũng
  • 70. Bài gi ng tóm t t H qu n tr cơ s d li u 68 có nghĩa là hi u su t s d ng b x lý và ĩa tăng lên.• Có th có s tr n l n các giao d ch ang ch y trong h th ng, cái thì dài cái thì ng n. N u th c hi n tu n t , m t quá trình ng n có th ph i ch m t quá trình dài n trư c hoàn t t, mà i u ó d n n m t s trì hoãn không lư ng trư c ư c trong vi c ch y m t giao d ch. N u các giao d ch ang ho t ng trên các ph n khác nhau c a CSDL, s t t hơn n u ta cho chúng ch y ng th i, chia s các chu kỳ CPU và truy xu t ĩa gi a chúng. Th c hi n tương tranh làm gi m s trì hoãn không lư ng trư c trong vi c ch y các giao d ch, ng th i làm gi m th i gian áp ng trung bình: Th i gian m t giao d ch ư c hoàn t t sau khi ã ư c trình. ng cơ s d ng th c hi n tương tranh trong CSDL cũng gi ng như ng cơth c hi n a chương trong h i u hành. Khi m t vài giao d ch ch y ng th i, tính nh tquán CSDL có th b vi ph m cho dù m i giao d ch là úng. M t gi i pháp gi i quy tv n này là s d ng th i l ch (schedule). H CSDL ph i i u khi n s trao i gi a cácgiao d ch tương tranh ngăn ng a chúng phá hu s nh t quán c a CSDL. Các cơ chcho i u ó ư c g i là sơ i u khi n tương tranh (concurrency-control scheme).Xét h th ng ngân hàng ơn gi n, nó có m t s tài kho n và có m t t p h p các giao d ch,chúng truy xu t, c p nh t các tài kho n này. Gi s T1 và T2 là hai giao d ch chuy nkho n t m t tài kho n sang m t tài kho n khác. Giao d ch T1 chuy n 50$ t tài kho n Asang tài kho n B. Giao d ch T2 chuy n 10% s dư t tài kho n A sang tài kho n B, và ư c xác nh như sau: T : Read(A); T : Read(A); 1 2 A:=A-50; Temp:=A*0.1; Write(A); A:=A-temp; Read(B); Write(A); B:=B+50; Read(B); Write(B); B:=B+temp; Write(B);Gi s giá tr hi n t i c a A và B tương ng là 1000$ và 2000$. Gi s r ng hai giao d chnày ư c th c hi n theo trình t :Trư ng h p 1: th c hi n xong giao d ch T1 r i n giao d ch T2Trư ng h p 2: th c hi n xong giao d ch T2 r i n giao d ch T1
  • 71. Bài gi ng tóm t t H qu n tr cơ s d li u 69T1 T2 T1 T2Read(A); Read(A);A:=A-50; Temp:=A*0.1;Write(A); A:=A-temp;Read(B); Write(A);B:=B+50; Read(B);Write(B); B:=B+temp; Write(B); Read(A); Read(A); Temp:=A*0.1; A:=A-50; A:=A-temp; Write(A); Write(A); Read(B); Read(B); B:=B+50; B:=B+temp; Write(B); Write(B);Th i l ch 1: Giá tr sau cùng c a A là 855, Th i l ch 2: Giá tr sau cùng c a A là 850, BB là 2145, t ng 2 tài kho n (A+B) là không là 2150, t ng 2 tài kho n (A+B) là không i iTh i l ch (schedule): là m t dãy các thao tác (l nh) c a các giao tác ư c s p x p theotrình t th i gian. M t th i l ch i v i m t t p các giao d ch ph i bao g m t t c các ch th c a các giaodich này và ph i b o t n th t các ch th xu t hi n trong m i m t giao d ch. Ví d , iv i giao d ch T1, ch th Write(A) ph i xu t hi n trư c ch th Read(B), trong b t kỳ th il ch h p l nào. Các th i l ch 1 và Th i l ch 2 là nh ng th i l ch tu n t .Th i l ch tu n t g m m t dãy các ch th t các giao d ch, trong ó các ch th thu c vm t giao d ch xu t hi n cùng nhau trong th i l ch. Như v y, i v i m t t p n giao d ch,có n! th i l ch tu n t h p l khác nhau. Khi m t s giao d ch ư c th c hi n ng th i, th i l ch tương ng không nh t thi t làtu n t . N u hai giao d ch ang ch y ng th i, h i u hành có th th c hi n m t giaod ch trong m t kho ng ng n th i gian, sau ó chuy n i ng c nh, th c hi n giao d chth hai m t kho ng th i gian sau ó l i chuy n sang th c hi n giao d ch th nh t m tkho ng và c như v y (h th ng chia s th i gian). Th i l ch 3 và Th i l ch 4 là các ví d .
  • 72. Bài gi ng tóm t t H qu n tr cơ s d li u 70T1 T2 T1 T2Read(A); Read(A);A:=A-50; A:=A-50;Write(A); Read(A); Read(A); Temp:=A*0.1; Temp:=A*0.1; A:=A-temp; A:=A-temp; Write(A); Write(A); Read(B);Read(B); Write(A);B:=B+50; Read(B);Write(B); B:=B+50; Write(B); Read(B); B:=B+temp; B:=B+temp; Write(B); Write(B); Th i l ch 3 Th i l ch 4Tuy nhiên, không ph i t t c các th c hi n tương tranh u cho ra m t tr ng thái úng. Víd xét th i l ch 4: Sau khi th c hi n giao d ch này, ta t t i tr ng thái trong ó giá tr cu i c a A và Btương ng là 950$ và 2100$. Tr ng thái này là m t tr ng thái không nh t quán (A+Btrư c khi th c hi n giao d ch là 3000$ nhưng sau khi giao d ch là 3050$). Như v y, n ugiao phó vi c i u khi n th c hi n tương tranh cho h i u hành, s có th d n t i cáctr ng thái không nh t quán. Nhi m v c a h CSDL là m b o r ng m t th i l ch ư cphép th c hi n tương tranh s ưa CSDL sang m t tr ng thái nh t quán. Thành ph n c ah CSDL th c hi n nhi m v này ư c g i là thành ph n i u khi n tương tranh(concurrency-control component). Ta có th m b o s nh t quán c a CSDL v i th chi n tương tranh b ng cách n m ch c r ng m t th i l ch ư c th c hi n có cùng hi u qunhư m t th i l ch tu n t .Tính kh tu n t (Serializability) H CSDL ph i i u khi n s th c hi n tương tranh các giao d ch m b o r ngtr ng thái CSDL gi nguyên tr ng thái nh t quán. Trư c khi ta ki m tra h CSDL có thth c hi n nhi m v này như th nào, u tiên ta ph i hi u các th i l ch nào s mb otính nh t quán và các th i l ch nào không. Vì các giao d ch là các chương trình, nên th tkhó xác nh các ho t ng chính xác ư c th c hi n b i m t giao d ch là ho t ng gì và
  • 73. Bài gi ng tóm t t H qu n tr cơ s d li u 71nh ng ho t ng nào c a các giao d ch tác ng l n nhau. Vì lý do này, ta s không gi ithích ki u ho t ng mà m t giao d ch có th th c hi n trên m t m c d li u. Thay vào ó, ta ch xét hai ho t ng: Read và Write. Ta cũng gi thi t r ng gi a m t ch thRead(Q) và m t ch th Write(Q) trên m t m c d li u Q, m t giao d ch có th th chi n m t dãy tuỳ ý các ho t ng trên b n sao c a Q ư c lưu trú trong buffer c c b c agiao d ch. Vì v y ta s ch nêu các ch th Read và Write trong th i l ch, n u bi u di nv i quy ư c như v y c a th i l ch 3 s là: T1 T2 Read(A); Write(A); Read(A); Write(A); Read(B); Write(B); Read(B); Write(B);Tu n t xung t (Conflict Serializability) Xét th i l ch S trong ó có hai ch th liên ti p Ii và Ij c a các giao d ch Ti , Tj tương ng (i ≠ j). N u Ii và Ij tham kh o n các m c d li u khác nhau, ta có th i ch Ii và Ijmà không làm nh hư ng n k t qu c a b t kỳ ch th nào trong th i l ch. Tuy nhiên,n u Ii và Ij tham kh o cùng m t m c d li u Q, khi ó th t c a hai bư c này có th r tquan tr ng. Do ta ang th c hi n ch các ch th Read và Write, nên ta có b n trư ng h pc n ph i xét sau: 1. Ii = Read(Q); Ij = Read(Q): Th t c a Ii và Ij không gây ra v n nào, do Ti và Tj c cùng m t giá tr Q b t k n th t gi a Ii và Ij. 2. Ii = Read(Q); Ij = Write(Q): th t th c hi n c a Ii và Ij là quan tr ng. 3. Ii = Write(Q); Ij = Read(Q): th t th c hi n c a Ii và Ij là quan tr ng. 4. Ii = Write(Q); Ij = Write(Q): C hai ch th là ho t ng Write, th t c a hai ch th này không nh hư ng n c hai giao d ch T và T . Tuy nhiên, giá tr nh n i j ư c b i ch th Read k trong S s b nh hư ng do k t qu ph thu c vào ch th Write ư c th c hi n sau cùng trong hai ch th Write này. N u không còn ch th Write nào sau Ii và Ij trong S, th t c a th t th c hi n c a Ii và Ij s nh hư ng tr c ti p n giá tr cu i c a Q trong tr ng thái CSDL k t qu (c a th i l ch S).
  • 74. Bài gi ng tóm t t H qu n tr cơ s d li u 72 Như v y ch trong trư ng h p c I và I là các ch th Read, th t th c hi n c a hai i jch th này (trong S) là không gây ra v n . Ta nói Ii và Ij xung t n u các ho t ng này n m trong các giao d ch khác nhau, ti nhành trên cùng m t m c d li u và có ít nh t m t ho t ng là Write. Ví d , trong th i l ch schedule - 3: Ch th Write(A) trong T1 xung t v i Read(A)trong T2. Tuy nhiên, ch th Write(A) trong T2 không xung t v i ch th Read(B) trongT1 do các ch th này truy xu t các m c d li u khác nhau. Ii và Ij là hai ch th liên ti p trong th i l ch S. N u Ii và Ij là các ch th c a các giaod ch khác nhau và không xung t, khi ó ta có th i th t c a chúng mà không làm nh hư ng gì n k t qu x lý và như v y ta nh n ư c m t th i l ch m i S’ tương ương v i S. Ch ng h n, do ch th Write(A) c a T2 không xung t v i ch th Read(B)c a T1, ta có th i ch các ch th này ư c m t th i l ch tương ương – th i l ch 5dư i ây T1 T2 Read(A); Write(A); Read(A); Read(B); Write(A); Write(B); Read(B); Write(B); Th i l ch 5Ta ti p t c i ch các ch th không xung t như sau: • i ch ch th Read(B) c a T1 v i ch th Read(A) c a T2 • i ch ch th Write(B) c a T1 v i ch th Write(A) c a T2 • i ch ch th Write(B) c a T1 v i ch th Read(A) c a T2K t qu cu i cùng c a các bư c i ch này là m t th i l ch m i (th i l ch 6 –th i l chtu n t ) tương ương v i th i l ch ban u (th i l ch 3):
  • 75. Bài gi ng tóm t t H qu n tr cơ s d li u 73 T1 T2 Read(A); Write(A); Read(B); Write(B); Read(A); Write(A); Read(B); Write(B); Th i l ch 6 S tương ương này cho ta th y: b t ch p tr ng thái h th ng ban u, th i l ch-3 ssinh ra cùng tr ng thái cu i như m t th i l ch tu n t nào ó.Tương ương xung t (conflict equivalent):N u m t th i l ch S có th bi n i thànhm t th i l ch S’ b i m t dãy các thao tác i ch các ch th không xung t, ta nói S vàS’ là tương ương xung t.Ví d , trong các th i l ch ã ư c nêu trên, ta th y th i l ch-1 tương ương xung tv ith i l ch-3.Kh tu n t xung t (conflict serializable): M t th i l ch S là kh tu n t xung t(conflict serializable) n u nó tương ương xung t v i m t th i l ch tu n t .Ví d , th i l ch 3 là kh tu n t xung t còn th i l ch 7 dư i ây không tương ươngxung t v i m t th i l ch tu n t nào do v y nó không là kh tu n t xung t: T3 T4 Read(Q); Write(Q); Write(Q); Th i l ch 7Có th có hai th i l ch sinh ra cùng k t qu , nhưng không tương ương xung t. Ví d ,giao d ch T5 chuy n 10$ t tài kho n B sang tài kho n A. Ta xét th i l ch 8 như dư i ây,th i l ch này không tương ương xung t v i th i l ch tu n t < T1, T5 > do trong th il ch 8 ch th Write(B) c a T5 xung t v i ch th Read(B) c a T1 như v y ta không thdi chuy n t t c các ch th c a T1 v trư c các ch th c a T5 b i vi c hoán i liên ti pcác ch th không xung t. Tuy nhiên, các giá tr sau cùng c a tài kho n A và B sau khith c hi n th i l ch 8 ho c sau khi th c hi n th i l ch tu n t <T1, T5 > là như nhau A là
  • 76. Bài gi ng tóm t t H qu n tr cơ s d li u 74960 và B là 2040 tương ng. Qua ví d này ta th y c n thi t ph i phân tích c s tính toán ư c th c hi n b i các giao d ch mà không ch các ho t ng Read và Write. Tuy nhiêns phân tích như v y s n ng n và ph i tr m t giá tính toán cao hơn. T1 T5 Read(A); A:=A-50; Write(A); Read(B); B:=B-10; Write(B); Read(B); B:=B+50; Write(B); Read(A); A:=A+10 Write(A); Schedule - 8Tu n t View (View Serializability) Xét hai th i l ch S và S’, trong ó cùng m t t p h p các giao d ch tham gia vào c haith i l ch. Các th i l ch S và S’ ư c g i là tương ương view n u ba i u ki n sau ư cth a mãn:1. i v i m i m c d li u Q, n u giao d ch Ti c giá tr kh i u c a Q trong th i l ch S, thì giao d ch Ti ph i cũng c giá tr kh i u c a Q trong th i l ch S’.2. i v i m i m c d li u Q, n u giao d ch Ti th c hi n Read(Q) trong th i l ch S và giá tr ó ư c s n sinh ra b i giao d ch Tj thì Ti cũng ph i c giá tr c a Q ư c sinh ra b i giao d ch Tj trong S’.3. i v i m i m c d li u Q, giao d ch th c hi n ho t ng Write(Q) sau cùng trong th i l ch S, ph i th c hi n ho t ng Write(Q) sau cùng trong th i l ch S’. i u ki n 1 và 2 m b o m i giao d ch c cùng các giá tr trong c hai th i l ch vàdo v y th c hi n cùng tính toán. i u ki n 3 i c p v i các i u ki n 1 và 2 m b o chai th i l ch cho ra k t qu là tr ng thái cu i cùng c a h th ng như nhau. Trong các ví dtrư c, th i l ch-1 là không tương ương view v i th i l ch 2 do trong th i l ch-1, giá tr
  • 77. Bài gi ng tóm t t H qu n tr cơ s d li u 75c a tài kho n A ư c c b i giao d ch T2 ư c sinh ra b i T1, trong khi i u này khôngx y ra trong th i l ch-2. Th i l ch-1 tương ương view v i th i l ch-3 vì các giá tr c acác tài kho n A và B ư c c b i T2 ư c sinh ra b i T1 trong c hai th i l ch. Quan ni m tương ương view ưa n quan ni m tu n t view. Ta nói th i l ch S làkh tu n t view (view serializable) n u nó tương ương view v i m t th i l ch tu n t .Ta xét th i l ch sau: T3 T4 T6 Read(Q); Write(Q); Write(Q); Write(Q); Th i l ch 9 Nó tương ương view v i th i l ch tu n t < T3, T4, T6 > do ch th Read(Q) c giátr kh i u c a Q trong c hai th i l ch và T6 th c hi n Write sau cùng trong c hai th il ch như v y th i l ch 9 kh tu n t view. M i th i l ch kh tu n t xung t là kh tu n t view, nhưng có nh ng th i l ch khtu n t view không kh tu n t xung t (ví d th i l ch 9). Trong th i l ch 9 các giao d ch T4 và T6 th c hi n các ho t ng Write(Q) mà khôngth c hi n ho t ng Read(Q), Các Write d ng này ư c g i là các Write m (blindwrite). Các Write m xu t hi n trong b t kỳ th i l ch kh tu n t view không kh tu n txung t.Tính kh ph c h i (Recoverability) Ta ã nghiên c u các th i l ch có th ch p nh n dư i quan i m s nh t quán c aCSDL v i gi thi t không có giao d ch nào th t b i. Ta s xét hi u qu c a th t b i giaod ch trong th c hi n tương tranh. N u giao d ch Ti th t b i vì lý do nào ó, ta c n h y b hi u qu c a giao d ch này m b o tính nguyên t c a giao d ch. Trong h th ng cho phép th c hi n tương tranh,cũng c n thi t m b o r ng b t kỳ giao d ch nào ph thu c vào Ti cũng ph i b b .th c hi n s ch c ch n này, ta c n b trí các h n ch trên ki u th i l ch ư c phép trongh th ng.Th i l ch kh ph c h i (Recoverable Schedule) Xét th i l ch 10 trong ó T9 là m t giao d ch ch th c hi n m t ch th Read(A). Gis h th ng cho phép T9 bàn giao ngay sau khi th c hi n ch th Read(A). Như v y T9 bàn
  • 78. Bài gi ng tóm t t H qu n tr cơ s d li u 76giao trư c T8. Gi s T8 th t b i trư c khi bàn giao, vì T9 ã c giá tr c a m c gi li uA ư c vi t b i T8 , ta ph i b d T9 m b o tính nguyên t giao d ch. Tuy nhiên T9 ã ư c bàn giao và không th b d ư c. Ta có tình hu ng trong ó không th khôiph c úng sau th t b i c a T8. T8 T9 Read(A); Write(A); Read(A); Read(B) Th i l ch 10 Th i l ch 10 là m t ví d v th i l ch không ph c h i ư c và không ư c phép. H uh t các h CSDL òi h i t t c các th i l ch ph i ph c h i ư c. M t th i l ch kh ph c h i là th i l ch trong ó, i v i m i c p giao d ch Ti , Tj , n uTj c m c d li u ư c vi t b i Ti thì ho t ng bàn giao c a Tj ph i x y ra sau ho t ng bàn giao c a Ti .Th i l ch cascadeless (Cascadeless Schedule) Ngay c khi th i l ch là kh ph c h i, ph c h i úng sau th t b i c a m t giao d chTi ta ph i cu n l i m t vài giao d ch. Tình hu ng như th x y ra khi các giao d ch c dli u ư c vi t b i Ti . Ta xét th i l ch 11 sau T10 T11 T12 Read(A); Read(B) Write(A); Read(A); Write(A); Read (A) Th i l ch 11 Giao d ch T10 vi t m t giá tr ư c c b i T11. Giao d ch T12 c m t giá tr ư c vi tb i T11. Gi s r ng t i i m này T10 th t b i. T10 ph i cu n l i, do T11 ph thu c vào T10nên T11 cũng ph i cu n l i và cũng như v y v i T12. Hi n tư ng trong ó m t giao d chth t b i kéo theo m t dãy các giao d ch ph i cu n l i ư c g i là s cu n l i hàng lo t(cascading rollback). Cu n l i hàng lo t d n n vi c hu b m t kh i lư ng công vi c áng k . Ph i h nch các th i l ch vi c cu n l i hàng lo t không th x y ra. Các th i l ch như v y ư cg i là các th i l ch cascadeless.
  • 79. Bài gi ng tóm t t H qu n tr cơ s d li u 77 M t th i l ch cascadeless là m t th i l ch trong ó m i c p giao d ch Ti , Tj n u Tj cm t m c d li u ư c vi t trư c ó b i Ti, ho t ng bàn giao c a Ti ph i xu t hi ntrư c ho t ng c c a Tj . M t th i l ch cascadeless là kh ph c h i.Th c thi cô l p (Implementation of Isolation) Có nhi u sơ i u khi n tương tranh có th ư c s d ng m b o các tính ch tm t th i l ch ph i có (nh m gi CSDL tr ng thái nh t quán, cho phép qu n lý các giaod ch...), ngay c khi nhi u giao d ch th c hi n tương tranh, ch các th i l ch có th ch pnh n ư c sinh ra, b t k h i u hành chia s th i gian tài nguyên như th nào gi a cácgiao d ch. Ví d ta xét m t sơ i u khi n tương tranh sau: m t giao d ch ư c c p m t khóa(lock) trên toàn b CSDL trư c khi nó kh i ng và tháo khóa khi nó ã bàn giao. Trongkhi giao d ch này gi khóa, không giao d ch nào khác ư c c p khóa và như v y ph i ch n t n khi khóa ư c tháo. Trong cơ ch khóa, ch m t giao d ch ư c th c hi n t i m tth i i m và như v y ch th i l ch tu n t ư c sinh ra. Sơ i u khi n tương tranh nàycho ra m t hi u năng tương tranh th p. Ta nói nó cung c p m t b c tương tranh th p(poor degree of concurrency). M c ích c a các sơ i u khi n tương tranh là cung c p m t b c c nh tranh caotrong khi v n m b o các th i l ch ư c sinh ra là kh tu n t xung t ho c kh tu n tview và cascadeless.2. Thu t toán ki m tra tính kh tu n tThu t toán ki m tra xung t tương ương (Tính kh tu n t xung t)Cho S là m t th i l ch. Ta dùng m t th nh hư ng, ư c g i là th trình t(precedence graph), bi u di n t S=(V, E). Trong ó:V là t p các nh và E là t p các cung.T p các nh V bao g m t t c các giao d ch tham gia vào th i l ch.T p các cung E bao g m t t c các cung d ng Ti → Tj sao cho m t trong các i u ki nsau ư c tho mãn:(i). Ti th c hi n Write(Q) trư c Tj th c hi n Read(Q).(ii). Ti th c hi n Read(Q) trư c khi Tj th c hi n Write(Q).(iii). Ti th c hi n Write(Q) trư c khi Tj th c hi n Write(Q).N u m t cung Ti → Tj t n t i trong th trình t , thì trong b t kỳ th i l ch tu n t S’ nàotương ương v i S, Ti ph i xu t hi n trư c Tj.
  • 80. Bài gi ng tóm t t H qu n tr cơ s d li u 78Ví d :Th i l ch 1 ư c bi u di n b ng thvì t t c các ch th c a T1 ư c th c hi n trư c ch th u tiên c a T2.Th i l ch 2 ư c bi u di n b ng thvì t t c các ch th c a T2 ư c th c hi n trư c ch th u tiên c a T1.Th i l ch 4 ư c bi u di n b ng th ch a các cung T1 → T2 vì T1 th c hi n Read(A)trư c T2 th c hi n Write(A). Nó cũng ch a cung T2→ T1 vì T2 th c hi n Read(B) trư ckhi T1 th c hi n Write(B):N u th trình t i v i S có chu trình, khi ó th i l ch S không là kh tu n t xung t. Như v y bài toán ki m tra tính kh tu n t xung t c a th i l ch S ưa v bài toánki m tra chu trình trên th trình t bi u di n c a S.Thu t toán ki m tra kh tu n t view Không có thu t toán nào hi u qu ki m tra tính kh tu n t view c a m t th i l ch.M t cách ti p c n là c i ti n thu t toán ki m tra xung t tương ương ki m tra tínhkh tu n t view. Gi s S là th i l ch g m các giao d ch {T1 , T2 , ... , Tn}. Tb và Tf là hai giao d ch gisao cho: Tb b t ngu n l nh Write(Q) i v i m i m c d li u Q ư c truy xu t trong S,Tf b t ngu n l nh Read(Q) i v i m i m c d li u Q ư c truy xu t trong S. Ta xâyd ng th i l ch m i S’ t S b ng cách xen Tb b t u c a S và Tf cu i c a S. Bi u di nS’ b ng th trình t có gán nhãn trên cung ư c xây d ng d a trên các quy t c:1. Gán nhãn 0 cho cung Ti → Tj , n u Tj c giá tr c a m c d li u Q ư c vi t b i Ti2. Xóa t t c các cung liên quan t i các giao d ch không dùng. M t giao d ch Ti ư c g i là không dùng n u không có con ư ng nào trong th trình t d n t Ti n Tf .3. i v i m i m c d li u Q sao cho Tj c giá tr c a Q ư c vi t (Write) b i Ti và Tk th c hi n Write(Q), Tk ≠ Tb ti n hành các bư c sau : a. N u Ti = Tb và Tj ≠ Tf, gán nhãn 0 cho cung Tj →Tk trong th trình t gán
  • 81. Bài gi ng tóm t t H qu n tr cơ s d li u 79 nhãn b. N u Ti ≠ Tb và Tj = Tf gán nhãn 0 cho cung Tk → Ti trong th trình t gán nhãn c. N u Ti ≠ Tb và Tj ≠ Tf gán nhãn p cho c hai cung Tk → Ti và Tj → Tk trong th trình t gán nhãn, trong ó p là m t s nguyên duy nh t > 0 mà chưa ư c s d ng trư c ó gán nhãn cung.Quy t c 3c ph n ánh r ng n u Ti vi t m c d li u ư c c b i Tj thì m t giao d ch Tkvi t cùng m c d li u này ph i ho c i trư c Ti ho c i sau Tj. Quy t c 3a và 3b là trư ngh p c bi t là k t qu c a s ki n Tb và Tf c n thi t là các giao d ch u tiên và cu icùng tương ng.Ví d : xét th i l ch 9 T3 T4 T6 Read(Q); Write(Q); Write(Q); Write(Q); Th i l ch 9Bi u di n th c a S như sau:Và th trình t có gán nhãn bi u di n S’ như sau:
  • 82. Bài gi ng tóm t t H qu n tr cơ s d li u 80 N u th trình t gán nhãn không ch a chu trình, th i l ch tương ng là kh tu n tview, như v y th i l ch 9 là kh tu n t view. Tuy nhiên, n u th S’ ch a chu trình, i u ki n này không kéo theo th i l ch tương ng không là kh tu n t view. Bây gi tagi s r ng có n c p cung tách bi t, ó là do ta ã áp d ng n l n quy t c 3c trong s xâyd ng th trình t . Khi ó có 2n th khác nhau, m i m t th ch a úng m t cungtrong m i c p. N u m t th nào ó trong các th này là phi chu trình, khi ó th i l chtương ng là kh tu n t view. Thu t toán này òi h i m t phép ki m th vét c n cácth riêng bi t, và như v y thu c v l p bài toán NP- y .3. i u khi n tương tranh d a trên khóa M t phương pháp m b o tính kh tu n t là yêu c u vi c truy xu t n m c dli u ư c ti n hành theo ki u lo i tr tương h ; có nghĩa là trong khi m t giao d ch angtruy xu t m t m c d li u, không m t giao d ch nào khác có th s a i m c d li u này.Phương pháp chung nh t ư c dùng th c thi yêu c u này là cho phép m t giao d chtruy xu t m t m c d li u ch n u nó ang gi khóa trên m c d li u ó.Khóa (Lock) Có nhi u phương th c khóa m c d li u. Ta h n ch vi c nghiên c u trên hai phươngth c: 1. Shared: N u m t giao d ch Ti nh n ư c m t khóa phương th c shared (ký hi u là S) trên m c Q, khi ó Ti có th c, nhưng không ư c vi t Q. 2. Exclusive. N u m t giao d ch Ti nh n ư c m t khóa phương th c Exclusive (ký hi u là X), khi ó Ti có th c c l n vi t Q.Hàm tương thích
  • 83. Bài gi ng tóm t t H qu n tr cơ s d li u 81 M i giao d ch òi h i m t khóa m t phương th c thích h p trên m c d li u Q, phthu c vào ki u ho t ng mà nó s th c hi n trên Q. Gi s m t giao d ch Ti òi h i m tkhóa phương th c A trên m c Q mà trên nó giao d ch Tj (Tj ≠ Ti) hi n ang gi m t khóaphương th c B. N u giao d ch Ti có th ư c c p m t khóa trên Q ngay, b t ch p s hi ndi n c a khóa phương th c B, khi ó ta nói phương th c A tương thích v i phương th cB. Hàm tương thích gi a hai phương th c khóa ư c bi u di n b i m t ma tr n. Quan hcho b i ma tr n comp sau: S X S True False X False FalseComp(A, B) = True có nghĩa là các phương th c A và B tương thích.Các th t c c p và thu h i khóa như sau: • lock-S(Q): yêu c u m t khóa shared trên m c d li u Q. • lock-X(Q): yêu c u m t khóa exclusive trên m c d li u Q. • unlock(Q): thu h i khóa trên m c d li u Q truy xu t m t m c d li u, giao d ch Ti u tiên ph i khóa m c này. N u m cnày ã b khóa b i m t giao d ch khác phương th c không tương thích, b i u khi ntương tranh s không c p khóa cho n t n khi t t c các khóa không tương thích b gib i các giao d ch khác ư c tháo. Như v y Ti ph i ch n t n khi t t c các khóa khôngtương thích b gi b i các giao d ch khác ư c gi i phóng. Giao d ch Ti có th tháo khóa m t m c d li u mà nó ã khóa trư c ây. M t giaod ch c n thi t ph i gi m t khóa trên m t m c d li u ch ng nào mà nó còn truy xu tm c này. Hơn n a, i v i m t giao d ch vi c tháo khóa ngay sau truy xu t cu i cùng nm c d li u không luôn luôn là i u mong mu n vì như v y tính kh tu n t có th không ư c m b o. minh ho cho tình hu ng này, ta xét ví d sau: A và B là hai tài kho ncó th ư c truy xu t b i các giao d ch T1 và T2 . Giao d ch T1 chuy n 50$ t tài kho n Bsang tài kho n A và ư c xác nh như sau:T1 : Lock-X(B); Read(B); B:=B-50; Write(B); Unlock(B); Lock-X(A); Read(A);
  • 84. Bài gi ng tóm t t H qu n tr cơ s d li u 82 A:=A+50; Write(A); Unlock(A); Giao d ch T2 hi n th t ng s lư ng ti n trong các tài kho n A và B (A + B) và ư cxác nh như sau:T2 : Lock-S(A); Read(A); Unlock(A); Lock-S(B); Read(B); Unlock(B); Display(A+B); Gi s giá tr c a tài kho n A và B tương ng là 100$ và 200$. N u hai giao d ch nàyth c hi n tu n t , ho c theo th t T1, T2 ho c theo th t T2 , T1 , và khi dó T2 s hi n thgiá tr 300$. Tuy nhiên n u các giao d ch này th c hi n tương tranh, gi s theo th i l chschedule-1, trong trư ng h p như v y giao d ch T2 s hi n th giá tr 250$, m t k t qukhông úng vì giao d ch T1 ã tháo khóa m c B quá s m và T2 ã tham kh o m t tr ngthái không nh t quán. Th i l ch 12 cho th y các ho t ng ư c th c hi n b i các giao d ch cũng nhưcác th i i m khi các khóa ư c c p b i b qu n tr i u khi n tương tranh. Giao d ch ưa ra m t yêu c u khóa không th th c hi n hành ng k c a mình n t n khi khóa ư c c p b i b qu n tr i u khi n tương tranh; do ó, khóa ph i ư c c p trong kho ngth i gian gi a ho t ng yêu c u khóa và hành ng sau c a giao d ch. Sau này ta s luôngi thi t khóa ư c c p cho giao d ch ngay trư c hành ng k và như v y ta có th bqua c t b qu n tr i u khi n tương tranh trong b ng. T1 T2 B qu n tr i u khi n tương tranh Lock-X(B) Grant-X(B,T ) 1 Read(B) B:=B-50 Write(B) Unlock(B) Lock-S(A) Grant-S(A,T ) 2 Read(A)
  • 85. Bài gi ng tóm t t H qu n tr cơ s d li u 83 Unlock(A) Lock-S(B) Grant-S(B,T ) 2 Read(B) Unlock(B) Display(A+B) Lock-X(A) Grant-X(A,T ) 1 Read(A) A:=A+50 Write(A) Unlock(A) Th i l ch 12 Bây gi gi s r ng tháo khóa b làm tr n cu i giao d ch. Giao d ch T3 tương ngv i T1 v i tháo khóa b làm tr ư c nh nghĩa như sau:T3 : Lock-X(B); Read(B); B:=B-50; Write(B); Lock-X(A); Read(A); A:=A+50; Write(A); Unlock(B); Unlock(A);Giao d ch T4 tương ng v i T2 v i tháo khóa b làm tr ư c xác nh như sau:T4 : Lock-S(A); Read(A); Lock-S(B); Read(B); Display(A+B); Unlock(A); Unlock(B);
  • 86. Bài gi ng tóm t t H qu n tr cơ s d li u 84Các th i l ch có th trên T3 và T4 không cho T4 hi n th tr ng thái không nh t quán. Tuy nhiên, s d ng khóa có th d n n m t tình hu ng không mong i. Ta xét th il ch 13 g m m t ph n công vi c trên T3 và T4 sau: T3 T4 Lock-X(B) Read(B) B:=B-50 Write(B) Lock-S(A) Read(A) Lock-S(B) Lock-X(A) Th i l ch 13 Do T3 gi m t khóa phương th c Exclusive trên B, nên yêu c u m t khóa phươngth c shared c a T4 trên B ph i ch n khi T3 tháo khóa. Cũng v y, T3 yêu c u m t khóaExclusive trên A trong khi T4 ang gi m t khóa shared trên nó và như v y ph i ch . Tag p ph i tình hu ng trong ó T3 ch i T4 ng th i T4 ch i T3, m t s ch i vòngtròn, và như v y không giao d ch nào có th ti n tri n. Tình hu ng này ư c g i làdeadlock (khóa ch t). Khi tình hu ng khóa ch t x y ra h th ng bu c ph i cu n l i m ttrong các giao d ch. M i khi m t giao d ch b cu n l i, các m c d li u b khóa b i giaod ch ph i ư c tháo khóa và nó tr nên s n có cho giao d ch khác, như v y các giao d chnày có th ti p t c ư c s th c hi n c a nó. N u ta không s d ng khóa ho c tháo khóa m c d li u ngay khi có th sau c ho cvi t m c, ta có th rơi vào tr ng thái không nh t quán. M t khác, n u ta không tháo khóam t m c d li u trư c khi yêu c u m t khóa trên m t m c d li u khác, deadlock có thx y ra. Có các phương pháp tránh deadlock trong m t s tình hu ng, tuy nhiên nói chungdeadlock là khó tránh khi s d ng khóa n u ta mu n tránh tr ng thái không nh t quán.Deadlock ư c ưa thích hơn tr ng thái không nh t quán vì chúng có th i u khi n ư cb ng cách cu n l i các giao d ch trong khi ó tr ng thái không nh t quán có th d n ncác v n th c t mà h CSDL không th i u khi n.Nghi th c khóa (locking protocol) Xét { T0 , T1 , ..., Tn } m t t p các giao d ch tham gia vào th i l ch S. Ta nói Ti itrư c Tj trong S, và ư c vi t là Ti → Tj , n u t n t i m t m c d li u Q sao cho Ti gi
  • 87. Bài gi ng tóm t t H qu n tr cơ s d li u 85khóa phương th c A trên Q , Tj gi khóa phương th c B trên Q mu n hơn và comp(A,B)= false. N u Ti → Tj , thì Ti s xu t hi n trư c Tj trong b t kỳ th i l ch tu n t nào. Ta nói m t th i l ch S là h p l dư i m t nghi th c khóa n u S là m t th i l ch tuânth các quy t c c a nghi th c khóa ó. Ta nói r ng m t nghi th c khóa m b o tính khtu n t xung t n u và ch n u i v i t t c các th i l ch h p l , quan h → k t h p làphi chu trình.C p khóa Khi m t giao d ch Ti yêu c u m t khóa trên m t m c d li u Q phương th c M,khóa s ư c c p n u các i u ki n sau ư c th a mãn: (i) Không có giao d ch khác ang gi m t khóa trên Q phương th c xung t v i M. (ii) Không có m t giao d ch nào ang ch ư c c p m t khóa trên M và ã ưa ra yêu c u v khóa trư c Ti.Nghi th c khóa hai kỳ (Two-phase locking protocol) Nghi th c khóa hai kỳ là m t nghi th c m b o tính kh tu n t . Nghi th c này yêuc u m i m t giao d ch phát ra yêu c u khóa và tháo khóa qua hai giai o n: 1. Giai o n tăng trư ng (Growing phase): m t giao d ch có th nh n ư c các khóa, nhưng nó không th tháo b t kỳ khóa nào. 2. Giai o n thu h p (Shrinking phase): m t giao d ch có th tháo các khóa nhưng không th nh n ư c m t khóa m i nào. Kh i u, m t giao d ch giai o n tăng trư ng. Giao d ch ư c c p các khóa c nthi t. M i khi giao d ch tháo m t khóa, nó i vào giai o n thu h p và nó không th phátra b t kỳ m t yêu c u khóa nào n a. Các giao d ch T3 và T4 là hai kỳ. Các giao d ch T1 vàT2 không là hai kỳ. Nghi th c khóa hai kỳ m b o tính kh tu n t xung t, nhưngkhông m b o tránh ư c deadlock và vi c cu n l i hàng lo t. Cu n l i hàng lo t có thtránh ư c b i nghi th c khóa hai kỳ nghiêm ng t.Nghi th c khóa hai kỳ nghiêm ng t (Strict Two-Phase Locking) g m hai lu t: 1. M t giao d ch T mu n c (s a) m c d li u Q nó ph i yêu c u c p khóa Shared (Exclusive) trên Q. 2. T t c các khóa do m t giao d ch ang n m gi ư c gi i phóng khi giao d ch ư c bàn giao. M t s tinh ch nghi th c khóa hai kỳ cơ s d a trên vi c cho phép chuy n i khóa:nâng c p m t khóa shared sang exclusive và h c p m t khóa exclusive thành khóashared. Chuy n i khóa không th cho phép m t cách tuỳ ti n, nâng c p ch ư c phép
  • 88. Bài gi ng tóm t t H qu n tr cơ s d li u 86di n ra trong giai o n tăng trư ng, còn h c p ch ư c di n ra trong giai o n thu h p.M t giao d ch th nâng c p m t khóa trên m t m c d li u Q có th ph i ch . Nghi th ckhóa hai kỳ v i chuy n i khóa cho phép ch sinh ra các th i l ch kh tu n t xung t.N u các khóa exclusive ư c gi n t n khi bàn giao, các th i l ch s là cascadeless.Các th t c liên quan ư c s d ng trong nghi th c khóa 2 kỳ nghiêm ng t: • lock-S(Q): yêu c u m t khóa shared trên m c d li u Q. • lock-X(Q): yêu c u m t khóa exclusive trên m c d li u Q. • unlock(Q): thu h i (gi i phóng, tháo) khóa trên m c d li u Q. • Upgrade(Q): chuy n i khóa t phương th c shared (S) sang phương th c exclusive (X) trên m c d li u Q, Upgrade ch ư c phép x y ra trong giai o n tăng trư ng (giai o n xin khóa). • Downgrade(Q): chuy n i khóa t phương th c exclusive sang phương th c shared trên m c d li u Q, Downgrade ch ư c phép x y ra trong giai o n thu h p (giai o n tháo khóa). Ta xét m t ví d : Các giao d ch T8 và T9 ư c nêu trong ví d ch ư c trình bày b icác ho t ng ý nghĩa là Read và Write. T8 : Read(A1); Read(A2); ... Read(An); Write(A1). T9 : Read(A1); Read(A2); Display(A1 + A2). N u ta s d ng nghi th c khóa hai kỳ, khi ó T8 ph i khóa A1 phương th cexclusive. B i v y, s th c hi n tương tranh c a hai giao d ch tr thành th c hi n tu n t .Ta th y r ng T8 c n m t khóa exclusive trên A1 ch cu i s th c hi n c a nó, khi nówrite(A1). Như v y, T8 có th kh i ng khóa A1 phương th c shared và i khóa nàysang phương th c exclusive sau này. Như v y ta có th nh n ư c tính tương tranh caohơn, vì như v y T8 và T9 có th truy xu t n A1 và A2 ng th i. T8 T9 Lock-S(A1) Lock-S(A2)
  • 89. Bài gi ng tóm t t H qu n tr cơ s d li u 87 Lock-S(A2) Lock-S(A2) Lock-S(A3) … Unlock(A1) Unlock(A2) UpGrade(A1) Chú ý r ng m t giao d ch th c p nh t m t khóa trên m t m c d li u Q có th bu cph i ch . Vi c ch b t bu c này x y ra khi Q ang b khóa b i giao d ch khác phươngth c shared. Nghi th c khóa hai kỳ v i chuy n i khóa ch sinh ra các th i l ch kh tu n t xung t, các giao d ch có th ư c tu n t hoá b i các i m khóa c a chúng. Hơn n a, n ucác khóa exclusive ư c gi n t n khi k t thúc giao d ch, th i l ch s là cascadeless.Qu n lý khóa Trong h qu n tr CSDL, các khóa c a các giao d ch ư c qu n lý b i b ph n qu n lýkhóa (lock manager) thông qua b ng khóa (lock table). M i m c c a b ng khóa tương ng v i m t i tư ng (trang, m u tin, …) ch a các thông tin: s lư ng giao d ch anggi khóa trên i tư ng này (s lư ng giao d ch có th > 1 n u i tư ng ư c khóa theophương th c Shared), phương th c khóa (Shared hay Exclusive), con tr n hàng iyêu c u khóa trên i tư ng ó. Khi m t giao d ch Ti c n m t khóa trên m t m c d li u Q, nó g i m t yêu c u c pkhóa n b qu n lý khóa, yêu c u ư c x lý như sau: 1. N u yêu c u m t khóa Shared, hàng i các yêu c u c a m c Q là r ng và m c d li u Q không b khóa theo phương th c Exclusive thì b ph n qu n lý khóa c p khóa cho giao d ch Ti và c p nh t l i thông tin trên b ng khóa. 2. N u yêu c u m t khóa Exclusive và không có giao d ch nào ang gi khóa trên Q thì b ph n qu n lý khóa c p khóa cho giao d ch Ti và c p nh t l i thông tin trên b ng khóa. 3. Ngư c l i, thêm yêu c u này vào hàng i khóa c a m c d li u Q và giao d ch Ti t m th i ngưng. Khi giao d ch ư c bàn giao ho c b b d , nó ph i tháo t t c các khóa nó ang n mgi . Khi m t khóa ư c gi i phóng, b qu n lý khóa c p nh t l i b ng khóa và xem xétc p phát khóa cho các yêu c u khóa ang trong hàng i tương ng.
  • 90. Bài gi ng tóm t t H qu n tr cơ s d li u 88Qu n lý deadlock M t h th ng tr ng thái deadlock n u t n t i m t t p h p các giao d ch sao cho m igiao d ch trong t p h p ang ch m t giao d ch khác trong t p h p. Chính xác hơn, t n t im t t p các giao d ch { T0 , T1 , ..., Tn } sao cho T0 ang ch m t m c d li u ư c gib i T1 , T1 ang ch m t m c d li u ang b chi m b i T2 , ..., Tn-1 ang ch m t m cd li u ư c gi b i Tn và Tn ang ch m t m c T0 ang chi m. Không m t giao d chnào có th ti n tri n ư c trong tình hu ng như v y. M t cách x lý tình hu ng này làcu n l i m t vài giao d ch tham gia vào deadlock. Có hai phương pháp chính gi i quy t v n deadlock: ngăn ng a deadlock, phát hi ndeadlock và khôi ph c. Nghi th c ngăn ng a deadlock m b o r ng h th ng s khôngbao gi i vào tr ng thái deadlock. Sơ phát hi n deadlock và khôi ph c (deadlock-detection and deadlock-recovery scheme) cho phép h th ng i vào tr ng thái deadlock vàsau ó c g ng khôi ph c. C hai phương pháp u có th d n n vi c cu n l i giao d ch.Phòng ng a deadlock thư ng ư c s d ng n u xác su t h th ng i vào deadlock cao,phát hi n và khôi ph c hi u qu hơn trong các trư ng h p còn l i.Phòng ng a deadlock (Deadlock prevention) M t cách phòng ng a deadlock là s d ng th t ưu tiên và cu n l i quá trình. V i tht ưu tiên, m t giao d ch T2 yêu c u m t khóa b gi b i giao d ch T1 , khóa ã c p cho T1có th b l y l i và c p cho T2 , T1 b cu n l i. i u khi n ưu tiên, ta gán m t nhãn th igian duy nh t cho m i giao d ch. H th ng s d ng các nhãn th i gian này quy t nhm t giao d ch ph i ch hay cu n l i. Khóa v n ư c s d ng i u khi n tương tranh.N u m t giao d ch b cu n l i, nó v n gi nhãn th i gian cũ c a nó khi tái kh i ng. Haisơ phòng ng a deadlock s d ng nhãn th i gian khác nhau ư c ngh : 1. Sơ Wait-Die d a trên k thu t không ưu tiên. Khi giao d ch Ti yêu c u m t m c d li u b chi m b i Tj , Ti ư c phép ch ch n u nó có nhãn th i gian nh hơn c a Tj n u không Ti b cu n l i (die). 2. Sơ Wound-Wait d a trên k thu t ưu tiên. Khi giao d ch Ti yêu c u m t m c d li u hi n ang b gi b i Tj , Ti ư c phép ch ch n u nó có nhãn th i gian l n hơn c a Tj , n u không Tj b cu n l i (Wounded). M t i u quan tr ng là ph i m b o r ng, m i khi giao d ch b cu n l i, nó không b“ch t ói” (starvation) có nghĩa là nó s không b cu n l i l n n a và ư c phép ti n tri n. C hai sơ Wound-Wait và Wait-Die u tránh ư c s ch t ói: t i m t th i i m,có m t giao d ch v i nhãn th i gian nh nh t. Giao d ch này không th b yêu c u cu n l itrong c hai sơ . Do nhãn th i gian luôn tăng và do các giao d ch không ư c gán nhãn
  • 91. Bài gi ng tóm t t H qu n tr cơ s d li u 89th i gian m i khi chúng b cu n l i, m t giao d ch b cu n l i s có nhãn th i gian nhnh t (vào th i gian sau) và s không b cu n l i l n n a.Tuy nhiên, có nh ng khác nhau l n trong cách th c ho t ng c a hai sơ :• Trong sơ Wait-Die, m t giao d ch già hơn ph i ch m t giao d ch tr hơn gi i phóng m c d li u. Như v y, giao d ch già hơn có xu hư ng b ch nhi u hơn. Ngư c l i, trong sơ Wound-Wait, m t giao d ch già hơn không bao gi ph i ch m t giao d ch tr hơn.• Trong sơ Wait-Die, n u m t giao d ch Ti ch t và b cu n l i vì nó òi h i m t m c d li u b gi b i giao d ch Tj , khi ó Ti có th ph i tái phát ra cùng dãy các yêu c u khi nó kh i ng l i. N u m c d li u v n b chi m b i Tj , Ti b ch t l n n a. Như v y, Ti có th b ch t vài l n trư c khi nh n ư c m c d li u c n thi t. Trong sơ Wound-Wait, giao d ch Ti b thương và b cu n l i do Tj yêu c u m c d li u nó chi m gi . Khi Ti kh i ng l i, và yêu c u m c d li u, bây gi , ang b Tj gi , Ti ch . Như v y, có ít cu n l i hơn trong sơ Wound-Wait.M tv n n i tr i i v i c hai sơ là có nh ng cu n l i không c n thi t v n x y ra.Sơ d a trên timeout M t cách ti p c n khác qu n lý deadlock ư c d a trên lock timeout. Trong cáchti p c n này, m t giao d ch ã yêu c u m t khóa ph i ch nhi u nh t m t kho ng th igian xác nh. N u khóa không ư c c p trong kho ng th i gian này, giao d ch ư c g ilà mãn kỳ (time out), giao d ch t cu n l i và kh i ng l i. N u có m t deadlock, m tho c m t vài giao d ch dính líu n deadlock s time out và cu n l i, các giao d chkhác ti n tri n. Sơ này n m trung gian gi a phòng ng a deadlock và phát hi n và khôiph c deadlock. Sơ timeout d th c thi và ho t ng t t n u giao d ch ng n và n u s ch i lâu làdo deadlock. Tuy nhiên, khó quy t nh ư c kho ng th i gian timeout. Sơ này cũngcó th ưa n s ch t ói.Phát hi n deadlock và khôi ph c N u m t h th ng không dùng nghi th c phòng ng a deadlock, khi ó sơ phát hi nvà khôi ph c ph i ư c s d ng. M t gi i thu t ki m tra tr ng thái c a h th ng ư c g itheo m t chu kỳ xác nh xem deadlock có x y ra hay không. N u có, h th ng ph ikhôi ph c l i t deadlock, mu n v y h th ng ph i:• Duy trì thông tin v s c p phát hi n hành các m c d li u cho các giao d ch cũng như các yêu c u m c d li u chưa ư c gi i quy t.• Cung c p m t thu t toán s d ng các thông tin này xác nh h th ng ã i vào
  • 92. Bài gi ng tóm t t H qu n tr cơ s d li u 90 tr ng thái deadlock chưa.• Ph c h i t deadlock khi phát hi n ư c deadlock ã x y ra.Phát hi n deadlock Deadlock có th mô t chính xác b ng th nh hư ng ư c g i là th ch (waitfor graph). th này g m m t c p G = < V, E >, trong ó V là t p các nh và E là t pcác cung. T p các nh g m t t c các giao d ch trong h th ng. M i ph n t c a E là m tc p Ti → Tj , nó ch ra r ng T ch Tj gi i phóng m t m c d li u nó c n. i Khi giao d ch Ti yêu c u m t m c d li u ang b gi b i giao d ch Tj khi ó cungTi→Tj ư c thêm vào th . C nh này b xoá i ch khi giao d ch Tj không còn gi m cd li u nào mà Ti c n. Deadlock t n t i trong h th ng n u và ch n u th ch ch a m t chu trình. M igiao d ch tham gia vào chu trình này ư c g i là b deadlock. phát hi n deadlock, hth ng ph i duy trì th ch và g i theo m t chu kỳ th t c tìm ki m chu trình. Ta xét víd sau: th ch (phi chu trình) Do th không có chu trình nên h th ng không trong tr ng thái deadlock. Bây gi ,gi s T28 yêu c u m t m c d li u ư c gi b i T27 , cung T28 → T27 ư c thêm vàoth , i u này d n n t n t i m t chu trình T26 → T28 → T27 → T26 có nghĩa là h th ngrơi vào tình tr ng deadlock và T26 , T27 , T28 b deadlock. V n t ra là khi nào thì ch y th t c phát hi n? câu tr l i ph thu c hai yêu tsau:
  • 93. Bài gi ng tóm t t H qu n tr cơ s d li u 91 1. Deadlock thư ng x y ra hay không? 2. Bao nhiêu giao d ch s b nh hư ng b i deadlock? N u deadlock thư ng x y ra, vi c ch y th t c phát hi n di n ra thư ng xuyên hơn.Các m c d li u ư c c p cho các giao d ch b deadlock s không s n dùng cho các giaod ch khác n khi deadlock b phá v . Hơn n a, s chu trình trong th có th tăng lên.Trong trư ng h p x u nh t, ta ph i g i th t c phát hi n m i khi có m t yêu c u c p phátkhông ư c c p ngay.Khôi ph c t deadlock Khi thu t toán phát hi n xác nh ư c s t n t i c a deadlock, h th ng ph i khôiph c t deadlock. Gi i pháp chung nh t là cu n l i m t vài giao d ch phá v deadlock.Ba vi c c n ph i làm là: 1. Ch n n n nhân. ã cho m t t p các giao d ch b deadlock, ta ph i xác nh giao d ch nào ph i cu n l i phá v deadlock. Ta s cu n l i các giao d ch sao cho giá ph i tr là t i thi u. Nhi u nhân t xác nh giá c a cu n l i: a. Giao d ch ã tính toán ư c bao lâu và bao lâu n a. b. Giao d ch ã s d ng bao nhiêu m c d li u. c. Giao d ch c n bao nhiêu m c d li u n a hoàn t t. d. Bao nhiêu giao d ch b cu n l i. 2. Cu n l i (Rollback). M i khi ta ã quy t nh ư c giao d ch nào ph i b cu n l i, ta ph i xác nh giao d ch này b cu n l i bao xa. Gi i pháp ơn gi n nh t là cu n l i toàn b : b d giao d ch và b t u l i nó. Tuy nhiên, s là hi u qu hơn n u ch cu n l i giao d ch xa như c n thi t phá v deadlock. Nhưng phương pháp này òi h i h th ng ph i duy trì các thông tin b sung v tr ng thái c a t t c các giao d ch ang ch y. 3. S ch t ói (Starvation). Trong m t h th ng trong ó vi c ch n n n nhân d a trên các nhân t giá, có th x y ra là m t giao d ch luôn là n n nhân c a vi c ch n này và k t qu là giao d ch này không bao gi có th hoàn thành. Tình hu ng này ư c g i là s ch t ói. Ph i m b o vi c ch n n n nhân không ưa n ch t ói. M t gi i pháp xem s l n b cu n l i c a m t giao d ch như m t nhân t v giá.
  • 94. Bài gi ng tóm t t H qu n tr cơ s d li u 92 Chương 5 L P TRÌNH CƠ S D LI UI. L p trình v i ADO.NET1. Gi i thi u1.1. DataSet và DataTable: • DataSet là trung tâm c a ki n trúc ADO.NET, m c tiêu là h tr hi u qu thao tác trên d li u t nhi u ngu n, cũng như tương tác d li u trong mô hình ng d ng nhi u l p (multiple tier). • Có th xem DataSet như là m t c u trúc d li u lưu tr d li u trong b nh chính. DataSet ch a m t t p các i tư ng DataTable (có c u trúc logic tương t như m t b ng trong CSDL), các ràng bu c trên chúng và c m i quan h gi a các b ng này. • M t i tư ng DataTable (ho c m t view c a nó thu c l p DataView), có th ư c k t bu c v i các control như ComboBox, DataList, DataGrid,… • Các l p i tư ng DataSet, DataTable, DataView, DataColumn,… n m trong namespace System.Data.1.2. Data Provider : • Trong namespace System.Data có 3 namespace tương ng v i 3 lo i Data Provider: Data Provider for SQL Server (System.Data.SqlClient), Data Provider for ODBC (System.Data.Odbc) và Data Provider for OLE DB (System.Data.OleDb). • ây ta s d ng h qu n tr SQL Server, nên s s d ng tr c ti p Data Provider for SQL Server (t t nhiên ta cũng có th thông qua Provider for ODBC ho c OLE DB thao tác v i CSDL SQL Server). • Các l p i tư ng chính k t n i và thao tác v i CSDL là trong namespace System.Data.SqlClient là: SqlConnection, SqlCommand, SqlDataReader, SqlDataAdapter. (Tương t i v i hai Provider còn l i). 1.2.1. SqlConnection : M t i tư ng thu c l p này th hi n m t k t n i n CSDL. Các thông s k t n i ư c ch nh trong Connection String Ví d :
  • 95. Bài gi ng tóm t t H qu n tr cơ s d li u 93 //dùng Window Authentication ConnectionString = “Data Source = .; Initial Catalog = Northwind; Integrated Security = SSPI” ho c : ConnectionString= “Data Source = .; Initial Catalog = Northwind; User ID = ws01; Password=” (d u “.” ch local host) 1.2.2. SqlCommand : M t i tư ng thu c l p này th hi n m t l nh th c thi trên h qu n tr CSDL. Có th thi t l p thu c tính CommandType c a i tư ng Command ch ra l nh ư c khai báo d ng text hay là tên stored procedure. 1.2.3. SqlDataReader : là l p i tư ng dùng c k t qu truy v n ư c t CSDL. Có th xem SqlDataReader là m t RecordSet ch có th c và c tu n t m t chi u. 1.2.4. SqlDataAdapter : m t i tư ng Data Adapter có th xem như m t c u n i gi a DataSet và CSDL, chuy n d li u t CSDL vào DataSet và c p nh t nh ng thay i trên DataSet tr l i vào CSDL.1.3. Trình t thao tác CSDL v i ADO.Net : • T o l p và thi t l p các thông s cho i tư ng Connection (n u chưa thi t l p trư c ó). • M k t n i b ng phương th c Open c a i tư ng Connection. • Th c hi n các công vi c c/ghi v i CSDL v a k t n i t i. • óng k t n i. Lưu ý: Không ph i luôn luôn m và óng k t n i m i khi th c hi n m t l nh, có th m k t n i m t l n và th c hi n nhi u l nh trư c khi óng nó. Luôn s d ng try và catch b t các l i phát sinh t CSDL khi th c hi n các l nh m k t n i ho c th c thi l nh trong i tư ng command, n u có l i hi n th thông i p l i d hi u cho ngư i s d ng (NSD).2. c d li u Trong ph n này ch mô t m t s i m c n lưu ý, sinh viên t tìm hi u cách th c hi n c th trong các ví d và ebook ư c cung c p ho c MSDN.2.1. Data Reader DataReader là cách t t (ti t ki m tài nguyên - b nh ) c d li u trong trư ng h p ch c n l y d li u hi n th , không c n thao tác ph c t p hay thao tác trên nhi u t p
  • 96. Bài gi ng tóm t t H qu n tr cơ s d li u 94 d li u (không c n n datatable hay dataset).2.2. DataAdapter • Như ã nói trên, ta có th s d ng DataAdapter như là m t c u n i l y d li u t CSDL vào Dataset. Ta có th nh nghĩa ho c không nh nghĩa trư c b ng ( i tư ng DataTable) và c u trúc c a b ng s nh n d li u. N u l nh tr v n t p d li u, n b ng tương ng s ư c t o ra trong dataset ch a các t p d li u này. • l y d li u, ta s d ng phương th c Fill c a i tư ng DataAdapter. Phương th c này có nhi u hàm quá t i (overload), h tr nhi u cách truy n tham s (DataSet, DataTable, DataSet và tên DataTable,…). • Phương th c Fill có th ư c g i mà không c n m k t n i trư c, trong trư ng h p này, k t n i tương ng s ư c m và óng l i ngay sau khi th c hi n xong vi c l y d li u. Lưu ý: Trong trư ng h p ta mu n d li u ưa vào i tư ng DataTable th a ràng bu c khóa chính (t ng lo i b d li u trùng trên khóa chính n u có), ta có th thi t l p thu c tính MissingSchemaAction c a i tư ng DataAdapter là AddWithKey. Tuy nhiên, t l a ch n này s làm ch m áng k quá trình c d li u, thay vào ó, n u có th ta nên nh nghĩa trư c c u trúc và khóa chính c a i tư ng DataTable này, r i c bình thư ng, tác d ng cũng s tương t .2.3. ExecuteScalar : Trong trư ng h p câu truy v n ch tr v m t giá tr , ta s d ng phương th c ExecuteScalar c a i tư ng command th c thi truy v n và nh n giá tr tr v . Lưu ý: Trong trư ng h p ta g i th c thi m t th t c (v i CommandType là stored procedure), giá tr c a các tham s output mà ta khai báo trong Parameters c a command s ư c c p nh t tương ng.3. Ghi d li u3.1. ExecuteNonQuery Cách thông d ng nh t ghi d li u là ưa tr c ti p các l nh c p nh t d li u (Insert, Update, Delete, l nh t o các i tư ng trong CSDL) (và h u h t các l nh T-SQL khác), ho c tên c a th t c thư ng trú th c hi n các công vi c này vào m t i tư ng Command, sau ó g i phương th c ExecuteNonQuery c a i tư ng Command th c hi n.3.2. DataAdapter DataAdapter th c hi n c p nh t CSDL theo cách ánh x nh ng thay i trên
  • 97. Bài gi ng tóm t t H qu n tr cơ s d li u 95 DataSet vào CSDL (thành các thao tác insert, update, delete tương ng). Cơ s c a vi c ánh x này là vi c qu n lý tình tr ng c a các dòng (DataRow) trong DataTable, th hi n qua thu c tính RowState. Khi m t dòng trong DataTable ư c thêm, xóa, c p nh t, nó s có tr ng thái tương ng là Inserted, Deleted, và Updated, sau khi phương th c AcceptChanges ư c g i, nó tr l i tr ng thái UnChanged. th c hi n c p nh t ta gán InsertCommand, DeleteCommand và UpdateCommand cho i tư ng DataAdapter, sau ó g i phương th c Update c a nó. Khi ó, t t c nh ng thay i trên DataSet s ư c ánh x v CSDL theo cách mà ta ch nh trong các Commands (xem thêm ví d ). Phương th c Update c a DataAdapter cũng có nhi u hàm quá t i, cho phép ta l a ch n Update m t dòng, m t table hay toàn b DataSet.II. Thi t k ch c năng c/ ghi d li u1. Thi t k ch c năng ghi d li u: − Giao di n áp ng yêu c u chung: d s d ng (d hi u, g i nh , không “b y” ngư i s d ng), có tính th m m , tính ti n d ng (cho phép ngư i s d ng thao tác nhanh: s p x p các m c h p lý, h tr di chuy n b ng phím tab, h tr phím t t,…). − Ki m tra ch t ch các ràng bu c toàn v n, m b o thao tác thêm/c p nh t sau khi th c hi n xong không gây ra mâu thu n trong CSDL. − Cung c p cách th c nh p li u phù h p nh t v i nghi p v th c t . Ví d : n u th c t NSD nh p li u cho m t t p i tư ng cùng lúc, m i i tư ng có ít thu c tính và x lý ơn gi n thì nên nh p li u b ng lư i (grid). N u i tư ng có nhi u thu c tính ho c x lý ph c t p thì có th nh p riêng t ng i tư ng, nhưng nên hi n th song song m t lư i ch a danh sách các i tư ng ã nh p NSD có th ki m tra l i khi c n. − L a ch n cách x lý gi m thi u th i gian làm vi c c a NSD (t t nhiên v n ph i m b o tính an toàn và úng n): th i i m ki m tra ràng bu c toàn v n (xem m c 2), ghi nh n d li u m t l n hay sau m i l n NSD nh p xong m t i tư ng, th i i m m và óng k t n i v i CSDL,…2. Ki m tra ràng bu c toàn v n Khi xây d ng ch c năng nh p li u (cũng như c p nh t d li u), ph i m b o r ng cácràng bu c toàn v n không b vi ph m. Tuy nhiên, c n ph i lưu ý cân nh c xem ki m tra
  • 98. Bài gi ng tóm t t H qu n tr cơ s d li u 96ràng bu c toàn v n m c nào, th i i m nào, và dư i hình th c nào là h p lý.M t s nguyên t c: − Thi t k giao di n sao cho có th h n ch l i c a ngư i s d ng, ví d : s d ng ComboBox, Check box,… m b o ràng bu c tham chi u và ràng bu c mi n giá tr r i r c. Tuy nhiên, cũng c n cân nh c k vì giao di n quá “c ng”, quá nghiêm ng t s c n tr và làm ch m thao tác c a NSD. − Trong các trư ng h p có th , c g ng x lý ki m tra ràng bu c toàn v n m c trên (t ng giao di n, k n là t ng nghi p v ), ph n h i ngay và rõ ràng cho NSD n u có l i sai. N u chương trình y d li u xu ng CSDL, sau khi nh n báo l i t CSDL m i ph n h i cho NSD thì s m t nhi u th i gian. Các trư ng h p thông thư ng có th ki m tra ràng bu c toàn v n t ng giao di n ho c nghi p v : ràng bu c ơn gi n như mi n giá tr , liên thu c tính trên m t quan h ,…, ràng bu c ph c t p hơn (liên b , liên thu c tính) nhưng các d li u liên quan c n thi t ki m tra nó ã ư c chương trình c s n trư c ó. N u vi c ki m tra ràng bu c c n các d li u liên quan khác chưa ư c chương trình c s n trư c ó, ki m tra CSDL trong a s trư ng h p s hi u qu hơn là c các d li u ó lên ki m tra t ng trên. − N u các ràng bu c c a ng d ng có các tham s t trong b ng tham s CSDL ho c trong t p tin, nên c các tham s này lên m t l n và s d ng l i cho các l n nh p li u, thay vì ph i c l i t CSDL hay t p tin m i khi nh p m t i tư ng liên quan. − N u các i tư ng trong CSDL ư c qu n lý b ng mã, chương trình nên có cơ ch t ng phát sinh các mã này, tránh gây ra các vi ph m trên ràng bu c khóa chính (Tr nh ng trư ng h p nghi p v th c t òi h i mã cho NSD ghi).3. Thi t k ch c năng c d li u: Có th chia thành hai d ng ch c năng c d li u chính: c d li u lên Form và cd li u lên báo bi u (Report). D li u c lên Form có th ư c thay i và c p nh txu ng CSDL, d li u c lên báo bi u ch nh m m c ích hi n th thông tin. Khi c d li u lên Form, ta s d ng các i tư ng d li u c a ngôn ng l p trình(DataSet, DataTable, DataReader…) lưu tr t m d li u trong quá trình hi n th . Ta cóth sao chép d li u t các i tư ng d li u vào các i tư ng hi n th như Textbox,DataGridView, Combobox,… trên form, ho c k t bu c tr c ti p các i tư ng d li u v i i tư ng hi n th . V i cách th hai, khi d li u ư c c p nh t: khi ngư i s d ng thay i d li u trên các i tư ng hi n th , d li u trong các i tư ng d li u cũng s thay
  • 99. Bài gi ng tóm t t H qu n tr cơ s d li u 97 i theo. Khi c d li u lên report, ngo i tr nh ng trư ng h p ph c t p mà d li u ư c l yt nhi u ngu n: t CSDL, t file, t form khác,…, thông thư ng ta ưa d li u tr c ti plên report mà không thông qua các i tư ng d li u gi m b t m t kho n chi phí trunggian. Các môi trư ng thi t k report (Crystal report,… ) thư ng h tr riêng phương th c c d li u, không ph thu c vào các cách th c c d li u c a môi trư ng l p trình, dùr ng trong m t s trư ng h p v n h tr tích h p (như Crystal report for .NET, trong ódataset c a .NET ư c Crystal report xem như m t ngu n d li u ). Tuy nhiên, cho dù c d li u lên form hay lên report, ngư i thi t k v n ph i chú ý n nh ng nguyên t c cơ b n sau: − H n ch c d li u nhi u l n t CSDL: n u có th , c các d li u c n thi t m t l n thay vì c thành nhi u l n t CSDL gi m chi phí thi t l p k t n i v i d li u. Hơn n a, phía CSDL, vi c c 1 l n n dòng d li u s nhanh hơn c k l n, m i l n n/k dòng. Ví d : trên form có m t lư i li t kê danh sách các l p trong trư ng theo t ng kh i. M i l n NSD ch n l i kh i trong m t combobox, danh sách các l p trong lư i ư c l c l i theo kh i ó. V y ta nên c m t l n t t c các l p trong trư ng t CSDL vào m t i tư ng d li u (DataTable ch ng h n), sau ó tùy yêu c u mà hi n th ph n d li u phù h p, hay m i l n NSD ch n kh i ta l i c l i t CSDL? Câu tr l i cho tình hu ng này và nh ng tình hu ng tương t là: n u t t c d li u không quá l n (vài trăm dòng tr xu ng), ta nên c t t c lên ng d ng m t l n. − Gi m thi u lư ng d li u chuy n t CSDL lên ng d ng: c úng d li u c n thi t, không c th a. − D li u ph i ư c hi n th theo nh d ng thân thi n v i ngư i s d ng. Trong CSDL, t i ưu hoá lưu tr và truy xu t, d li u có th d ng mà ngư i s d ng không hi u ho c không c n (ví d nh ng mã i tư ng ư c phát sinh thêm ph c v vi c lưu tr , nh d ng ngày gi , …). Ngư i s d ng không c n bi t d li u bên dư i ư c lưu tr như th nào, c u trúc ra sao, h ch c n th y ư c nh ng thông tin ư c hi n th và s p x p theo cách quen thu c và ti n l i nh t cho nghi p v c a h .4. Lưu ý chung:− N u x lý có th m t nhi u th i gian, nên có ph n h i NSD bi t r ng chương trình v n ang làm vi c (progress bar, waiting message,…).
  • 100. Bài gi ng tóm t t H qu n tr cơ s d li u 98− Nên s d ng th t c thư ng trú thay vì vi t các l nh SQL tr c ti p trong mã ngu n chương trình, vì các th t c ã ư c biên d ch trư c nên th c hi n nhanh hơn.− Dùng try…catch b t các ngo i l (exception) có th x y ra, nh t là khi th c hi n các thao tác óng/m k t n i và c/ghi trên CSDL và thông báo l i theo cách mà NSD có th hi u ư c.− Thi t k chương trình theo mô hình 3 l p, thi t k các module nh g n, rõ ràng d ki m tra, b o trì, và tăng kh năng tái s d ng.III. T o báo bi u v i Crystal Report1. Gi i thi u Crystal Report là m t ph n m m h tr l p báo bi u t ơn gi n n ph c t p. Hi nnay ngoài các phiên b n Crystal Report riêng (Standard, Professional, Developer,Advanced), còn có m t phiên b n c bi t tích h p v i Visual Studio.NET. Ngoài vi c cung c p môi trư ng thi t k báo bi u, Crystal Report 9 phiên b nDeveloper và Advanced có h tr Report Creation API, cho phép ngư i l p trình ngd ng có th t o l p/ thay i c u trúc/ n i dung report lúc runtime. Phiên b n Crystal Report tích h p v i .NET có h tr Run Time Object Model, chophép th c hi n m t s thay i trên report khi chương trình th c hi n (truy n tham s ,thay i các thông s ăng nh p database, thay i kích thư c và v trí các i tư ng),ta cũng có th gán các i tư ng d li u c a .NET (ví d DataTable) làm data source choreport. C a s thi t k report ư c tích h p vào môi trư ng phát tri n ng d ng .NET. Crystal Report for .NET không hoàn toàn là m t ph n c a Crystal Report (xét phiênb n 9), nó có m t s tính năng h tr riêng cho .NET, ng th i Crystal Report 9 cũng cóm t s tính năng riêng mà Crystal Report for .NET không h tr . C a s thi t k reportc a Crystal Report 9 cũng y và d dùng hơn. Ta có th thi t k m t report b ngCrytal Report 9, sau ó ưa vào ng d ng .NET.2. Xây d ng m t report cơ b n 2.1. Các ph n (session) c a report: M t báo bi u (report) g m có nh ng ph n chính như sau : • Report header: ph n thông tin u tiên c a báo bi u. M t báo bi u thư ng s g m nhi u trang, report header là ph n xu t hi n ch m t l n trang u tiên c a toàn báo bi u. Ví d như báo cáo có tiêu “Báo cáo thu chi tháng 12 năm 2008” thì tiêu s ư c t trong ph n report header • Page header: ph n hi n th thông tin xu t hi n u m i trang c a báo bi u. Ví
  • 101. Bài gi ng tóm t t H qu n tr cơ s d li u 99 d như m t báo cáo d ng b ng có nhi u c t như: STT, Tên, a ch , S T… thì u m i trang c n l p l i nh ng tên c t ngư i c nh n bi t d dàng ý nghĩa m i c t. Khi ó các tiêu c t ư c t vào ph n page header. • Details: ph n hi n th thông tin chi ti t c a báo bi u. M t báo bi u thư ng bao g m nhi u m c v i vai trò như nhau tương ng v i các m u tin (record) c a database mà báo bi u s d ng. Ph n details s li t kê nh ng m u tin ó. Ví d báo cáo thu chi thì các m c thu chi s ư c li t kê trong ph n details. • Báo bi u footer: ph n hi n th thông tin xu t hi n ch m t l n cu i báo bi u. Ví d : các thông tin như t ng s (grand total), ngư i l p báo cáo là ai, t i âu, vào ngày nào, s ư c t báo bi u footer. • Page footer: ph n thông tin xu t hi n cu i m i trang. Ví d s trang ư c t page footer.2.2. Các lo i i tư ng trong report Các i tư ng trong báo bi u ư c qu n lý qua c a s Field explorer (View → Field Explorer). Các i tư ng này có th ư c ch n ưa vào hi n th trong báo bi u. G m có: • Database fields: Các trư ng thu c d ng CSDL (có th là table, stored procedure, SQL command ). Thông thư ng các trư ng trong m c này s ư c hi n th trong ph n detail c a báo bi u. • Formula fields: các trư ng t o thành t vi c thi t l p các công th c. Ta có th t o m i m t i tư ng formula b ng cách s d ng Formula Editor ho c Formula Expert. Formula ư c vi t b ng cú pháp Crystal ho c Basic. Có hai lo i: Formula Field : Là các trư ng mà d li u có ư c nh tính toán trên các trư ng khác. Ví d : Khi làm m t report báo cáo hóa ơn bán hàng, gi s CSDL ch lưu tr giá và s lư ng c a m t hàng mua trong hóa ơn mà không lưu tr thành ti n, khi ó ta có th t o m t Formula field “Thành ti n” ư c tính b ng công th c: Thành ti n = Giá * S lư ng. Khi ó ta có th t o report v i c t thành ti n (m c dù không ư c lưu trong database). Selection Formula: Là các công th c ch n d li u, g m có ch n b (tương t các i u ki n ch n trong m nh where) hay ch n nhóm (tương t i u ki n ch n trong m nh having). Selection formula có th ư c xây d ng trong c a
  • 102. Bài gi ng tóm t t H qu n tr cơ s d li u 100 s Formula Editor/ Formula Expert ho c Select Expert. • SQL Expression field: SQL Expression cũng là trư ng mà d li u c a nó ư c tính toán t nh ng trư ng khác (ví d count, sum,… hay m t công th c tính toán b t kỳ). Tuy nhiên, khác v i Formula field, SQL Exppression ư c g i v x lý CSDL (và do ó ph i ư c vi t b ng cú pháp SQL), k t qu ư c ưa tr v báo bi u qua SQL Expression field. • Parameter fields: các trư ng tham s cho report. ây có th là m t tham s ta t khai báo, ho c Crystal Report s t ng thêm vào khi ta ưa m t th t c thư ng trú có tham s vào trong database field. Lưu ý, khi ch y báo bi u trong Crystal, nh ng trư ng tham s s ư c h i giá tr , ta c n nh p vào ngay trong Crystal hi n th t m th i. • Group Name Field : Các thu c dùng gom nhóm d li u trong report. Ví d : Ta mu n hi n th danh sách h c sinh theo t ng l p, khi ó thu c tính L p s là m t i tư ng trong Group Name Field (Thêm m t nhóm b ng cách ch n Insert Group ho c ch n Group Expert t menu database). • Running Total Field : trư ng ch a giá tr t ng h p (aggregate) : max, min, sum, count,… • Special fields: các trư ng t bi t có s n c a Crystal như s trang, ngày hi n t i… Thông thư ng nh ng trư ng này s ư c hi n th trong nh ng ph n header, footer. Ngoài ra, ta có th ưa vào report nh ng ki u i tư ng khác như text(label), hình nh, ư ng k , bi u ,…2.3. Xây d ng report: a. Thi t k report : xác nh các thông tin c n hi n th , cách b trí, t ch c thông tin. M t s tiêu chí khi thi t k report : − áp ng m c tiêu nghi p v , phù h p v i ngư i s d ng (thông tin k t xu t ph i là thông tin mà ngư i s d ng có th hi u ư c, kh p v i nghi p v th c t ). − S lư ng v a , s p x p, gom nhóm h p lý, tránh làm NSD b r i m t vì báo bi u dày c d li u. − Trình bày d li u úng v trí. − Trình bày d li u úng lúc c n (ví d hi n th l i tên các c t d li u khi sang trang m i).
  • 103. Bài gi ng tóm t t H qu n tr cơ s d li u 101 b. Xây d ng report theo b n thi t k : Xem hư ng d n chi ti t trong ebook và tài li u k thu t c a Crystal Report. M t s lưu ý khi xây d ng report : − N u d li u ư c hi n th trong báo bi u s thay i trong các l n báo bi u ư c hi n th , b l a ch n Save Data with Report (File → Report Options) − Khi s d ng Formula, các tính toán, ch n dòng/nhóm s ư c th c hi n b i Crystal Report sau khi ã c toàn b d li u liên quan t CSDL lên. i u này có th làm n ng ư ng truy n và tăng chi phí c ghi n u d li u liên quan l n. Ngoài ra, m t h qu n tr CSDL luôn có cơ ch i u ch nh c i thi n t c x lý trong trư ng h p d li u l n, vì v y, vi c th c hi n x lý ch n trên dòng/nhóm hay các tính toán mà d li u k t qu nh hơn d li u trung gian (count/sum, max,…) ư c th c hi n h qu n tr CSDL s t i ưu hơn. Do ó, ta nên chuy n các công th c thành SQL Command/Expression hay th t c thư ng trú b t c khi nào có th . − Nên t n d ng stored prcedure vì các ích l i c a nó so v i vi c th c thi tr c ti p các câu l nh SQL (h tr b o m t, ư c biên d ch trư c, tái s d ng và d b o trì).2.4. Xem trư c report: Ta có th xem trư c report b ng cách nh n F5 (Refresh Report Data) và chuy n qua tab preview.3. Hi n th report trong m t ng d ng .NET3.1. Crystal Report Viewer : hi n th Crystal report trên .NET Windows form, ta s d ng control CrystalReportViewer (có th kéo th control này t toolbox vào form).3.2. K t bu c báo bi u vào Report Viewer : Gi s ta ã s d ng m t control CrystalReportViewer tên là rptViewer. Ta có th s d ng m t trong nh ng cách sau ưa m t Crystal report vào ng d ng và k t bu c vào viewer hi n th : a. K t bu c d ng “Untyped report”: Gi s ta có s n m t report tên MyReport rên ĩa C. K t bu c b ng tên: Gán tên và ư ng d n n báo bi u cho thu c tính ReportSource c a rptviewer.
  • 104. Bài gi ng tóm t t H qu n tr cơ s d li u 102 rptViewer.ReportSource = “C: MyReport.rpt” K t bu c report object : − Project → Add reference. Ch n CrystalDecisions.CrystalReports.Engine − Khai báo i tư ng thu c l p ReportDocument, t i báo bi u vào i tư ng này và k t bu c vào rptViewer (using CrystalDecisions.CrystalReports.Engine;) ReportDocument oRpt=null; oRpt = new ReportDocument(); oRpt.Load("c:MyReport.rpt"); rptViewer.ReportSource = oRpt; b. K t bu c d ng “strongly-typed report”: − N u t o báo bi u ngay trong .NET : Project → Add New Item. − N u ã có s n report: Project →Add existing Item. Tìm và ch n report mu n ưa vào. V i cách này, trong project s xu t hi n m t l p i tư ng m i tương ng v i báo bi u m i thêm vào (l p i tư ng này k th a t l p ReportClass, và ReportClass k th a ReportDocument). M t i tư ng thu c l p này, ngoài các thu c tính và phương th c k th a t l p ReportDocument, còn có m t s thu c tính th hi n các thông tin riêng c a t ng report: các session, tham s ,… Tuy nhiên các thu c tính này ph n l n là read only. thay i m t s thông tin trên báo bi u (ví d truy n tham s ), ta v n ch y u s d ng các phương th c và thu c tính c a l p ReportDocument. Gi s ta ã thêm m t strongly-typed report và project và có ư c l p rptMyReport tương ng, ta k t bu c report vào viewer như sau: rptMyReport report = new rptMyReport(); rptViewer.ReportSource = report;3.3. Thay i thông tin k t n i n ngu n d li u: Gi s ta có các chu i ServerName, DatabaseName, UserID, Password lưu thông tin k t n i n data source cho report, ta gán các thông tin này cho report như sau : (using CrystalDesisions.Shared)
  • 105. Bài gi ng tóm t t H qu n tr cơ s d li u 103 TableLogOnInfo Info; for (int i=0;i<report.Database.Tables.Count;i++) { Info = report.Database.Tables[i].LogOnInfo; Info.ConnectionInfo.ServerName = ServerName; // ”.” n u là localhost Info.ConnectionInfo.DatabaseName =DatabaseName; Info.ConnectionInfo.UserID = UserID; report.Database.Tables[i].ApplyLogOnInfo(Info); /*s a l i location c a table (có d ng Database.Owner.TenTable/storedProcedure) cho kh p v i tên database và owner m i */ string location = report.Database.Tables[i].Location; location = location.Substring(location.LastCh m cOf(".")+1); report.Database.Tables[i].Location = location;//report s t i n vào database và owner m i } Lưu ý : − N u k t n i s d ng Windows Authentication (Integrated Security), ta tr ng UserID. − Trong o n l nh trên, nên t l nh report.Database.Tables[i].Location = location; trong try…catch b t Exception có th x y ra n u các thông tin k t n i ư c gán không h p l : try { report.Database.Tables[i].Location = location; } catch (EngineException ex) { //báo l i //hi n th dialog yêu c u NSD nh p l i các thông s k tn i
  • 106. Bài gi ng tóm t t H qu n tr cơ s d li u 104 }3.4. Truy n giá tr cho tham sGi s trong report có tham s @MaNganh, dùng c danh sách sinh viên c a m tngành c th . Trong chương trình ta truy n giá tr cho tham s này như sau : (string MaNganh = "CNTT";) ParameterDiscreteValue ParamValue = new ParameterDiscreteValue(); ParamValue.Value = MaNganh; ParameterValues values = new ParameterValues(); values.Add(ParamValue); report.DataDefinition.ParameterFields["@MaNganh"].ApplyCurrentValues(values); rptViewer.ReportSource = report;(Lưu ý : L nh rptViewer.ReportSource = report; ph i ư c th c hi n sau cùng, sau khi ãc u hình cho i tư ng report (thay i thông s k t n i data source, truy n giá tr thams ,…) ).
  • 107. Bài gi ng tóm t t H qu n tr cơ s d li u 105 BÀI T P QU N LÝ SINH VIÊN Cho CSDL như sau: Khoa : M i khoa có m t mã khoa qu n lý, m t tên khoa và ghi nh n năm thành l p khoa. maKhoa tenKhoa namThanhLap varchar(10) nvarchar(100) int KhoaHoc : M i khóa h c có m t mã qu n lý, năm b t u khoá h c và năm k t thúc khóa h c. MaKhoaHoc namBatDau namKetThuc varchar(10) int int SinhVien : M i sinh viên có m t mã qu n lý và thu c v m t l p nào ó (xác nh b i maLop). MaSV hoTen namSinh danToc maLop varchar(10) nvarchar(100) int nvarchar(20) varchar(10) ChuongTrinh : M i chương trình có m t mã qu n lý và m t tên chương trình. MaCT tenChuongTrinh varchar(10) nvarchar(100) MonHoc : M i môn h c có m t mã qu n lý và thu c v m t khoa nào ó (xác nh b i maKhoa) MaMH tenMonHoc maKhoa varchar(10) nvarchar(100) varchar(10) KetQua : M i k t qu thi ghi nh n i m c a m t sinh viên làm bài thi cho 1 môn h c nào ó m t l n thi c th . (1 sinh viên có th thi 1 môn nào ó trên 1 l n) MaSV MaMH lanThi diem varchar(10) varchar(10) Int float GiangKhoa: M i dòng trong b ng này cho bi t m t môn h c ư c gi ng d y t i m t khoa nào ó trong m t chương trình nào ó. Trong chương trình này, môn h c ó ư c quy nh s ti t lý thuy t và th c hành c th và tương ương v i bao nhiêu tín ch . (soTinChi bao g m c tín ch lý thuy t l n th c hành).maCT maKhoa maMH namHoc hocKy soTietLyThuyet soTietThucHanh soTinChivarchar(10) varchar(10) varchar(10) int int int Int int Lop : M t l p có m t mã l p qu n lý, thu c v m t khoa nào ó và m ra cho m t khóa h c nh t nh, trong m t chương trình nh t nh. S th t ư c ánh tăng d n cho các l p cùng khoá h c, cùng khoa và cùng chương trình. MaLop maKhoaHoc maKhoa maCT soThuTu varchar(10) varchar(10) varchar(10) varchar(10) int Yêu c u: 1. Hãy cài t CSDL trên 2. Hãy cài t khóa chính và khóa ngo i c a CSDL trên. 3. Nh p các b d li u sau :
  • 108. Bài gi ng tóm t t H qu n tr cơ s d li u 106KhoaMaKhoa tenKhoa namThanhLapCNTT Công ngh thông tin 1995VL V t Lý 1970Khóa h c:MaKhoaHoc namBatDau namKetThucK2002 2002 2006K2003 2003 2007K2004 2004 2008SinhVienMaSV hoTen namSinh danToc maLop0212001 Nguy n Vĩnh An 1984 Kinh TH2002/010212002 Nguyên Thanh Bình 1985 Kinh TH2002/010212003 Nguy n Thanh Cư ng 1984 Kinh TH2002/020212004 Nguy n Qu c Duy 1983 Kinh TH2002/020311001 Phan Tu n Anh 1985 Kinh VL2003/010311002 Huỳnh Thanh Sang 1984 Kinh VL2003/01ChuongTrinhMaCT tenChuongTrinhCQ Chính QuiMonHocMaMH tenMonHoc maKhoaTHT01 Toán Cao c p A1 CNTTVLT01 Toán cao c p A1 VLTHT02 Toán r i r c CNTTTHCS01 C u trúc d li u 1 CNTTTHCS02 H i u hành CNTTKetQuamaSV maMH lanThi diem0212001 THT01 1 40212001 THT01 2 70212002 THT01 1 80212003 THT01 1 60212004 THT01 1 90212001 THT02 1 80212002 THT02 1 5.50212003 THT02 1 40212003 THT02 2 60212001 THCS01 1 6.50212002 THCS01 1 40212003 THCS01 1 7
  • 109. Bài gi ng tóm t t H qu n tr cơ s d li u 107GiangKhoamaCT maKhoa maMH namHoc hocKy soTietLyThuyet soTietThucHanh soTinChiCQ CNTT THT01 2003 1 60 30 5CQ CNTT THT02 2003 2 45 30 4CQ CNTT THCS01 2004 1 45 30 4LopMaLop maKhoaHoc maKhoa maCT soThuTuTH2002/01 K2002 CNTT CQ 1TH2002/02 K2002 CNTT CQ 2VL2003/01 K2003 VL CQ 14. Vi t các câu truy v n sau : 4.1. Danh sách các sinh viên khoa “Công ngh Thông tin” khoá 2002-2006 4.2. Cho bi t các sinh viên (MSSV, h tên ,năm sinh) c a các sinh viên h c s m hơn tu i qui nh (theo tu i qui nh thi sinh viên 18 tu i khi b t u khóa h c) 4.3. Cho bi t sinh viên khoa CNTT, khoá 2002-2006 chưa h c môn c u trúc d li u 1 4.4. Cho bi t sinh viên thi không u (Diem <5) môn c u trúc d li u 1 nhưng chưa thi l i. 4.5. V i m i l p thu c khoa CNTT, cho bi t mã l p, mã khóa h c, tên chương trình và s sinh viên thu c l p ó 4.6. Cho bi t i m trung bình c a sinh viên có mã s 0212003 ( i m trung bình ch tính trên l n thi sau cùng c a sinh viên)5. Hãy vi t các function sau : 5.1. V i 1 mã sinh viên và 1 mã khoa, ki m tra xem sinh viên có thu c khoa này không (tr v úng ho c sai) 5.2. Tính i m thi sau cùng c a m t sinh viên trong m t môn h c c th 5.3. Tính i m trung bình c a m t sinh viên (chú ý : i m trung bình ư c tính d a trên l n thi sau cùng), s d ng function 5.2 ã vi t 5.4. Nh p vào 1 sinh viên và 1 môn h c, tr v các i m thi c a sinh viên này trong các l n thi c a môn h c ó. 5.5. Nh p vào 1 sinh viên, tr v danh sách các môn h c mà sinh viên này ph i h c.6. Hãy vi t các Stored Procedure sau: 6.1. In danh sách các sinh viên c a 1 l p h c 6.2. Nh p vào 2 sinh viên, 1 môn h c, tìm xem sinh viên nào có i m thi môn h c ó l n u tiên là cao hơn. 6.3. Nh p vào 1 môn h c và 1 mã sv, ki m tra xem sinh viên có u môn này trong l n thi u tiên không, n u u thì xu t ra là “ u”, không thì xu t ra “Không u” 6.4. Nh p vào 1 khoa, in danh sách các sinh viên (mã sinh viên, h tên, ngày sinh) thu c khoa này. 6.5. Nh p vào 1 sinh viên và 1 môn h c, in i m thi c a sinh viên này c a các l n thi môn h c ó. Ví d : L n 1 : 10 L n 2: 8 6.6. Nh p vào 1 sinh viên, in ra các môn h c mà sinh viên này ph i h c. 6.7. Nh p vào 1 môn h c, in danh sách các sinh viên u môn này trong l n thi u tiên. 6.8. In i m các môn h c c a sinh viên có mã s là maSinhVien ư c nh p vào. (Chú ý: i m c a môn h c là i m thi c a l n thi sau cùng)
  • 110. Bài gi ng tóm t t H qu n tr cơ s d li u 108 6.8.1. Ch in các môn ã có i m 6.8.2. Các môn chưa có i m thì ghi i m là null 6.8.3. Các môn chưa có i m thì ghi i m là <chưa có i m>Thêm 1 quan h XepLoai maSV diemTrungBinh ketQua hocLuc 6.9. ưa d li u vào b ng x p lo i. S d ng function 5.3 ã vi t trên Qui nh : ketQua c a sinh viên là ” t‘ n u diemTrungBinh (ch tính các môn ã có i m) c a sinh viên ó l n hơn ho c b ng 5 và không quá 2 môn dư i 4 i m, ngư c l i thì k t qu là không t i v i nh ng sinh viên có ketQua là ” t‘ thì hocLuc ư c x p lo i như sau: diemTrungBinh >= 8 thì hocLuc là ”Gi i” 7 < = diemTrungBinh < 8 thì hocLuc là ”Khá” Còn l i là ”Trung bình” 6.10. V i các sinh viên có tham gia y các môn h c c a khoa, chương trình mà sinh viên ang theo h c, hãy in ra i m trung bình cho các sinh viên này. (Chú ý: i m trung bình ư c tính d a trên i m thi l n sau cùng). S d ng function 5.3 ã vi t trên7. Hãy cài t các ràng bu c toàn v n sau (b ng check constraint, unique constraint, rule ho c trigger):Mi n giá tr 7.1. ChuongTrinh.ma ch có th là ‘CQ‘ ho c ‘CD‘ ho c ‘TC’ 7.2. Ch có 2 h c kỳ là ‘HK1‘ và ‘HK2‘ 7.3. S ti t lý thuy t (GiangKhoa.soTietLyThuyet) t i a là 120 7.4. S ti t th c hành (GiangKhoa.soTietThucHanh) t i a là 60 7.5. S tín ch (GiangKhoa.soTinChi) c a m t môn h c t i a là 6 7.6. i m thi (KetQua.diem) ư c ch m theo thang i m 10 và chính xác n 0.5 (làm b ng 2 cách: ki m tra và báo l i n u không úng qui nh; t ng làm tròn n u không úng qui nh v chính xác)Liên thu c tính trên 1 quan h 7.7. Năm k t thúc khóa h c ph i l n hơn ho c b ng năm b t u 7.8. S ti t lý thuy t c a m i gi ng khóa không nh hơn s ti t th c hànhLiên b trên 1 quan h 7.9. Tên chương trình ph i phân bi t. 7.10. Tên khoa ph i phân bi t 7.11. Tên môn h c ph i duy nh t 7.12. Sinh viên ch ư c thi t i a 2 l n cho m t môn h c 7.13. Liên thu c tính trên nhi u quan h 7.14. Năm b t u khóa h c c a m t l p không th nh hơn năm thành l p c a khoa qu n lý l p ó 7.15. Sinh viên ch có th d thi các môn h c có trong chương trình và thu c v khoa mà sinh viên ó ang theo h cT ng h p 7.16. Hãy b sung vào quan h LOP thu c tính SISO và ki m tra sĩ s c a m t l p ph i b ng s lư ng sinh viên ang theo h c l p ó
  • 111. Bài gi ng tóm t t H qu n tr cơ s d li u 109 BÀI T P L P TRÌNH CƠ S D LI UCho cơ s d li u sau (có tên t p tin cơ s d li u QLThuVien):o NhaXuatBan( MANXB, TenNXB): M i nhà xu t b n có m t mã s (MANXB) phân bi t và tên nhà xu t b n (TenNXB)o TheLoai(MaTL, TenTL): Sách ư c phân lo i theo th lo i. M i th lo i có mã th lo i (MaTL), tên th lo i (TenTL).o Sach(MaSach, TuaDe, MANXB, TacGia, SoLuong, NgayNhap, MaTL): M i cu n sách có m t mã s phân bi t (MaSach), tên sách (TuaDe), do m t nhà xu t b n xu t b n (MANXB), tác gi (TacGia), s lư ng b n hi n có trong thư vi n (SoLuong) và ngày nh p sách (NgayNhap) và thu c v m t th lo i.o BanDoc(MaThe , TenBanDoc, DiaChi, SoDT): M i b n c có m t s th phân bi t (MaThe), h tên b n c (TenBanDoc), a ch (DiaChi) và s i n tho i (SoDT).o MuonSach(MaThe, MaSach , NgayMuon, NgayTra): M t b n c có th mư n nhi u cu n sách, v i m i cu n sách ngư i ta ghi nh n ngày mư n (NgayMuon) và ngày tr (NgayTra).Ghi chú: các field có g ch dư i là khoá c a lư c quan h tương ng.D li u m u cho các table như sau:NhaXuatBan BanDocMANXB TenNXB MaThe TenBanDoc DiaChi SoDTN001 Giáo d c 050001 Tr n Xuân 17 Yersin 858936N002 Khoa h c k thu t 050002 Lê Nam 5 Hai Bà Trưng 845623N003 Th ng kê 060001 Nguy n Năm 10 Lý T Tr ng 823456 060002 Tr n Hùng 20 Tr n Phú 841256SachMaSach TuaDe MANXB TacGia SoLuong NgayNhap MaTLTH0001 S d ng Corel Draw N002 u Quang Tu n 3 08/09/2005 THTH0002 L p trình m ng N003 Ph m Vĩnh Hưng 2 03/12/2003 THTH0003 Thi t k m ng chuyên nghi p N002 Ph m Vĩnh Hưng 5 04/05/2003 THTH0004 Th c hành m ng N003 Tr n Quang 3 06/05/2004 THTH0005 3D Studio k x o ho t hình T1 N001 Trương Bình 2 05/02/2004 THTH0006 3D Studio k x o ho t hình T2 N001 Trương Bình 3 05/06/2004 THTH0007 Giáo trình Access 2000 N001 Thi n Tâm 5 11/12/2005 THMuonSachMaThe MaSach NgayMuon NgayTra050001 TH0006 12/12/2006 01/03/2007050001 TH0007 12/12/2006050002 TH0001 08/03/2006 15/04/2007050002 TH0004 04/03/2007050002 TH0002 04/03/2007 04/04/2007050002 TH0003 02/04/2007 15/04/2007060002 TH0001 08/04/2007060002 TH0007 15/03/2007 15/04/2007TheLoaiMATL TENTLTH Tin h cHH Hoá h cKT Kinh tTN Toán h c
  • 112. Bài gi ng tóm t t H qu n tr cơ s d li u 1101) T o các table và thi t l p m i quan h (relationship) gi a các table. Căn c vào d li u m u ch n ki u d li u cho phù h p cho các field trong các b ng.2) Cài t các ràng bu c sau: RB1. S lư ng sách >=0 RB2. Mã th g m 6 ký t , ư c t o theo quy t c: hai ch cu i c a năm t o th ghép v i s th t c a th trong năm ó. (ví d : 050001 trong ó 05 là năm 2005, 1 là s th t c a th trong năm 2005) (g i ý: t o hàm sinh mã th ) RB3. Mã sách g m 6 ký t , ư c t o theo quy t c: mã th lo i ghép v i s th t c a cu n sách trong th lo i ó (g i ý: t o hàm sinh mã sách). RB4. M i c gi không ư c gi quá ba quy n sách. RB5. c gi không ư c phép mư n l i cu n sách mà h ang n . RB6. S lư ng trong b ng sách s ư c thay i tuỳ theo thao tác cho b n c mư n, nh n sách tr c a b n c hay nh p thêm sách. Các ràng bu c trên khi b vi ph m s hi n ra thông báo b ng ti ng Vi t.3) Nh p d li u cho các b ng.4) Vi t Stored Procedure CapNhatSach (X, ThaoTac) th c hi n c p nh t s lư ng c a cu n sách có mã s X tăng hay gi m 1 ơn v tuỳ theo thao tác cho nh n tr sách hay cho mư n sách, trong ó SoLuong luôn luôn tho i u ki n >=0. N u ThaoTac=1 là cho mư n sách, ThaoTac = 2 là nh n sách tr . X và ThaoTac là 2 tham s input.5) Phân tích và xây d ng các th t c thư ng trú, các hàm c n thi t.6) Thi t k , phân tích x lý và l p trình cho các form sau (lưu ý m b o các ràng bu c toàn v n d li u). a) Form c p nh t (thêm, xoá, s a) và xem thông tin c a b n c (frmNguoiMuon):
  • 113. Bài gi ng tóm t t H qu n tr cơ s d li u 111 b) Tương t thi t k các form c p nh t thông tin th lo i (frmTheLoai) và form c p nh t thông tin nhà xu t b n (frmNhaXuatBan). c) Form tra c u sách (frmTraCuu): d) Form nh p thông tin sách (frmSach):
  • 114. Bài gi ng tóm t t H qu n tr cơ s d li u 112 e) Form x lý mư n/tr sách: f) Thi t k form chính (frmManHinhChinh) v i b trí menu phù h p g i s d ng các form trên.7) Tương t như câu 6, áp d ng thi t k chương trình theo mô hình 3 l p.
  • 115. TÀI LI U THAM KH OTi ng vi t:[1] Ph m H u Khang, Qu n tr SQL Server 2000, NXB Th ng kê, 2005.[2] Dương Quang Thi n, SQL Server 2000 L p trình T-SQL, NXB Văn hoá Sài Gòn, 2007.[3] Vũ Tuy t Trinh, SQL Server 2008 (Slide bài gi ng).Ti ng Anh:[4] Bill Hamilton, ADO.NET Cookbook, OReilly, 2003 (Ebook).[5] Ramakrishnan, R. and Gehrke, J., Database Management Systems, Third Edition, McGraw Hill, 2003.[6] Ramez Elmasri, Shamkant B. Navathe, Fundamentals of database systems, Addison Wesley - 4th edition, 2004.[7] Sumathi, S. and Esakkirajan, S., Fundamentals of Relational Database Management Systems, Springer-Verlag, 2007.