Professional Documents
Culture Documents
– Cơ sở dữ liệu là tập hợp các bản ghi (record) thông tin. Một
trong những nhiệm vụ quan trọng của hệ thống máy tính là lưu
trữ và xử lý dữ liệu.
– Hệ quản trị cơ sở dữ liệu (Database Management System
DBMS) ñược thiết kế ñể quản lý khối lượng dữ liệu rất lớn.
Mục ñích chính của hệ quản trị CSDL là:
• Cung cấp môi trường và công cụ ñể lưu trữ và truy xuất dữ liệu từ
cơ sở dữ liệu một cách hiệu quả.
• Lưu giữ thông tin về người dùng của hệ quản trị cơ sở dữ liệu và
những tác vụ mà người dùng này có thể tương tác với dữ liệu
ñược lưu trữ.
TRANSACTION A TRANSACTION B
DISTRIBUTOR PRODUCTS
UPDATE Position
SET iCurrentStrength = iCurrentStrength + 1
WHERE cPositionCode = '0001'
COMMIT TRANSACTION trnUpdatePosition
UPDATE Requisition
set siNoOfVacancy=siNoOfVacancy - 10
WHERE cRequisitionCode='000004‘
UPDATE Position
set iCurrentStrength=iCurrentStrength + 10
WHERE cPositionCode='0015’
UPDATE Position
SET iCurrentStrength=iCurrentStrength + 10
WHERE cPositionCode='0015'
UPDATE Requisition
SET siNoOfVacancy=siNoOfVacancy - 10
WHERE cRequisitionCode='000004'
UPDATE Position
SET iCurrentStrength=iCurrentStrength+10
WHERE cPositionCode='0015‘
1 of 27
Mục Tiêu
• Khái niệm an toàn dữ liệu.
• Các loại sự cố.
• Sao lưu và phục hồi dữ liệu.
• Cài ñặt trên SQL Server.
2 of 27
An Toàn Dữ Liệu
• Các cơ chế an toàn dữ liệu:
– Mã hóa dữ liệu
– Phân quyền truy cập
3 of 27
Phân quyền truy cập
• Tạo bảng ảo View
• Dùng lệnh grant và revoke
– Grant Update On Product To Smith
• Cấp quyền sửa trên bảng Product cho user Smith
– Revoke Update on Product To Smith
• Bỏ quyền sửa trên bảng Product của user Smith
• Tạo user truy cập CSDL với quyền giới
hạn
– Demo Flash SQLSecurity Demo.rar
4 of 27
Bảng Ảo View
• View là bảng ảo giúp giới hạn truy cập một số cột
dòng trên các bảng dữ liệu.
• Views ñảm bảo tính bảo mật bằng các giới hạn truy cập
sau:
• Trích chọn một số dòng của bảng
• Trích chọn một số cột của bảng
• Trích chọn một số dòng và cột của bảng
• Kết các dòng từ nhiều bảng
• Cú Pháp tạo View:
• Create View ViewName
• As
• Select Col1, Col2 From Table1 Where Col = …
5 of 27
Bảng Ảo View
6 of 27
Bảng Ảo View
Problem statement
Bạn thường xuyên phải thực hiện các câu truy vấn dạng như
sau:
7 of 27
Bảng Ảo View
SELECT vFirstName, vLastName, vSkill
FROM Employee JOIN PositionSkill
ON Employee.cCurrentPosition =PositionSkill.cPositionCode
JOIN Skill ON PositionSkill.cSkillCode =Skill.cSkillCode
AND vFirstName = 'Angela‘
8 of 27
Bảng Ảo View
Giải pháp
• The tables from where the view derives
its data are Employee, positionSkill, and
Skill
• The columns that are to be included in the
view are vFirstName, vLastName, and
vQualification from the Employee table
and vSkill from the Skill table
9 of 27
Bảng Ảo View
Triển khai giải pháp trên T-SQL
CREATE VIEW vwEmpSkill
AS
SELECT vFirstName, vLastName, vQualification,
vSkill
FROM Employee
JOIN PositionSkill
ON Employee.cCurrentPosition =
PositionSkill.cPositionCode
JOIN Skill
ON PositionSkill.cSkillCode =
Skill.cSkillCode
10 of 27
Bảng Ảo View
Query on View:
• SELECT vFirstName, vSkill
FROM vwEmpSkill
11 of 27
Bảng Ảo View
Create the view
• A view can be created using the CREATE VIEW
statement
• Syntax
CREATE VIEW view_name
[(column_name [, column_name]...)]
[WITH ENCRYPTION]
AS select_statement [WITH CHECK OPTION]
12 of 27
Bảng Ảo View
Altering, Dropping Views
• Altering Views
• You can modify a view by using the ALTER VIEW statement
• Syntax
ALTER VIEW view_name [(column_name)]
[WITH ENCRYPTION]
AS select_statement
[WITH CHECK OPTION]
13 of 27
Bảng Ảo View
Altering, Dropping Views (Contd.)
• Dropping Views
• You can drop a view from a database
by using the DROP VIEW statement
• Syntax
DROP VIEW view_name
14 of 27
Một số loại sự cố
• Sự cố do thực hiện thao tác sai: thêm xóa
sửa dữ liệu không ñúng
– Trên CSDL thường không thể nhấn Crtl + Z ñể undo lại một thao tác
như insert, delete, update hay drop….
15 of 27
Khôi Phục Dữ Liệu
• Khôi phục sau sự cố từ một giao tác
– Dựa vào file log
• Khôi phục sau sự cố hệ thống
– Dựa vào file backup
• Khôi phục sau sự cố từ thiết bị lưu trữ
– ???
16 of 27
Cài ñặt trên SQL Server
• Sao lưu (backup)
• Khôi phục (Restore)
17 of 27
Saolưu (Backup)
• Full Database Backups : Copy tất cả data files trong
một database . Tất cả những user data và database
objects như system tables, indexes, user-defined tables
ñều ñược backup.
• Differential Database Backups : Copy những thay ñổi
trong tất cả data files kể từ lần full backup gần nhất.
• Incremental Database Backups: Copy những thay ñổi
trong tất cả data files kể từ lần full backup hay
Incremental backup gần nhất.
• File or File Group Backups : Copy một data file ñơn hay một file group.
• Differential File or File Group Backups : Tương tự như differential
database backup nhưng chỉ copy những thay ñổi trong data file ñơn hay
một file group.
• Transaction Log Backups : Ghi nhận một cách thứ tự tất cả các
transactions chứa trong transaction log file kể từ lần transaction log backup
gần nhất. Loại backup này cho phép ta phục hồi dữ liệu trở ngược lại vào
một thời ñiểm nào ñó trong quá khứ mà vẫn ñảm bảo tính ñồng nhất
(consistent). 18 of 27
Saolưu (Backup)
•
19 of 27
Thuật ngữ về Backup
Thuật
Giải Thích
Ngữ
Quá trình copy toàn bộ hay một phần của database, transaction log, file
hay file group hình thành một backup set. Backup set ñược chứa trên
Backup
backup media (tape or disk) bằng cách sử dụng một backup device (tape
drive name hay physical filename)
Backup Một file vật lý (như C:\SQLBackups\Full.bak) hay tape drive cụ thể (như
Device \\.\Tape0) dùng ñể record một backup vào một backup media.
Backup
File chứa một backup set
File
Disk hay tape ñược sử dụng ñể chứa một backup set. Backup media có
Backup
thể chứa nhiều backup sets (ví dụ như từ nhiều SQL Server 2000
Media
backups và từ nhiều Windows 2000 backups).
Backup
Một bộ backup từ một lần backup ñơn ñược chứa trên backup media.
Set
20 of 27
Backup
• Chúng ta có thể tạo một backup device cố ñịnh
(permanent) hay tạo ra một backup file mới cho mỗi lần
backup. Thông thường chúng ta sẽ tạo một backup
device cố ñịnh ñể có thể dùng ñi dùng lại ñặc biệt cho
việc tự ñộng hóa công việc backup. Ðể tạo một backup
device dùng Enterprise Manager bạn chọn
Management->Backup rồi Right-click->New Backup
Device.
• Ngoài ra bạn có thể dùng sp_addumpdevice system
stored procedure như ví dụ sau:
– USE Master
– Sp_addumpdevice 'disk' , 'FullBackupDevice' ,
'E:\SQLBackups\Full.bak'
21 of 27
Backup
• Ðể backup database bạn có thể dùng Backup Wizard hoặc click lên trên
database muốn backup sau ñó Right-click->All Tasks->Backup Database
22 of 27
Phục Hồi (Restore)
• Full Recovery Model : Ðây là model cho phép phục hồi dữ liệu với ít rủi ro
nhất. Nếu một database ở trong mode này thì tất cả các hoạt ñộng không
chỉ insert, update, delete mà kể cả insert bằng Bulk Insert, hay bcp ñều
ñược log vào transaction log file. Khi có sự cố thì ta có thể phục hồi lại dữ
liệu ngược trở lại tới một thời ñiểm trong quá khứ. Khi data file bị hư nếu ta
có thể backup ñược transaction log file thì ta có thể phục hồi database ñến
thời ñiểm transaction gần nhất ñược commited.
• Bulk-Logged Recovery Model : Ở mode này các hoạt ñộng mang tính
hàng loạt như Bulk Insert, bcp, Create Index, WriteText, UpdateText chỉ
ñược log minimum vào transaction log file ñủ ñể cho biết là các hoạt ñộng
này có diễn ra mà không log toàn bộ chi tiết như trong Full Recovery Mode.
Các hoạt ñộng khác như Insert, Update, Delete vẫn ñược log ñầy ñủ ñể
dùng cho việc phục hồi sau này.
• Simple Recovery Model : Ở mode này thì Transaction Log File ñược
truncate thường xuyên và không cần backup. Với mode này bạn chỉ có thể
phục hồi tới thời ñiểm backup gần nhất mà không thể phục hồi tới một thời
ñiểm trong quá khứ.
23 of 27
Phục Hồi (Restore)
• Trước khi restore database ta phải xác ñịnh ñược thứ tự file cần restore.
Các thông tin này ñược SQL Server chứa trong msdb database và sẽ cho
ta biết backup device nào, ai backup vào thời ñiểm nào. Sau ñó ta tiến hành
restore. Ðể restore bạn Right-click->All Tasks->Restore database
24 of 27
Phục Hồi (Restore)
• Nếu bạn restore từ một instance khác của SQL Server hay từ một server khác bạn có chọn From
device option và chọn backup device (file backup) tương ứng .
• Lưu ý nếu bạn muốn overwrite database có sẵn với data ñược backup bạn có thể chọn option
Force restore over existing database như hình vẽ sau:
25 of 27
Tóm lại
• An toàn dữ liệu
• Các loại sự cố thường xảy ra
• Sao lưu và phục hồi dữ liệu trên SQL
Server
26 of 27
Câu hỏi
• Phân biệt: thông tin (information), dữ liệu (data) và
tri thức (knowlegde)
• Transaction là gì?
• Nếu không sao lưu dữ liệu thường xuyên thì gặp phải
vấn ñề gì?
• Một số database object trong SQL Server?
Table, View, Store, Trigger, Index, User, (Cursor)
• Một số action object trong SQL Server?
Backup, Restore, Transaction, DTS, BCP
27 of 27
Kiến Trúc của Hệ Quản Trị Cơ
Sở Dữ Liệu
Kiến Trúc của Hệ CSDL
• External
• Conceptual
• Internal
Ngôn ngữ truy vấn
• Ngôn ngữ truy vấn là sự kết hợp của 3
ngôn ngữ thành phần
– Ngôn ngữ ñịnh nghĩa dữ liệu (Data Definition
Language – DDL)
– Ngôn ngữ thao tác dữ liệu (Data Manipulation
Language – DML)
– Ngôn ngữ ñiều khiển (Data Control Language
– DCL)
Câu Hỏi
• Liệt kê các câu lệnh trong SQL thuộc về
– DDL
– DML
– DCL
Chức năng của Hệ QTCSDL
• Quản Lý Dữ Liệu
• Quản Lý File
• Quản Lý ðĩa
Ứng dụng của Hệ QTCSDL
• Hàng không
• Ngân hàng
• Sản xuất
• Quản lý ñơn ñặt hàng
• Quản lý bệnh viện
• Thư viện
• Khách sạn
Một số Hệ QTCSDL
• Sysbase
• Oracle
• Microsoft SQL Server
• Ingress
• DB2
Bài tập tình huống.
• Công ty SMX sử dụng phần mềm kế toán
EasyAccount của công ty NVS trên nền hệ quản trị
cơ sở dữ liệu SQL Server 2000 ñể quản lý sổ sách thu
chi. Nhân viên kế toán sử dụng phần mềm này ñể
nhập số liệu kế toán và in ấn các báo cáo ñưa cho
giám ñốc xem. Nhân viên IT của SMX có nhiệm vụ
quản lý sao lưu, bảo mật CSDL này trên SQL Server
2000. Lập trình viên của NVS thì dùng DOT.NET ñể
viết ra chương trình EasyAccount.
• Cho biết Kế Toán, Giám ðốc, IT của SMX và lập
trình viên của NVS là các loại user nào của CSDL kế
toán trên?
Mô hình thực thể
• Thực thể (Entity) Bảng (Table)
• Thuộc tính (attribute) Cột (column)
• Record Dòng (row)
Mô hình thực thể
• Thực thể (Entity) Bảng (Table)
– ðược biểu diễn bởi hình gì?
– Hình chữ nhật
• Thuộc tính (attribute) Cột (column)
– ðược biểu diễn bởi hình gì?
– Hình elip hay chấm ñen
• Record Dòng (row)
• Mối kết hợp (1-1, 1-n, n-n) Relationship
– ðược biểu diễn bởi hình gì?
– Hình thoi hay elip
Bài tập tình huống
Kết quả khảo sát hiện trạng hệ thống quản lý nhân sự tiền lương tại một
doanh nghiệp thu thập ñược các thông tin sau:
• Mỗi nhân viên có một mã nhân viên duy nhất, và có họ tên,
ngày tháng năm sinh và ñược lãnh lương theo hệ bậc lương
của mình. ðồng thời một nhân viên thì chỉ thuộc biên chế của
một và chỉ một phòng ban. Ví dụ: Nhân viên tên A có mã số
NV1 thuộc biên chế phòng Tổng Hợp (với mã phòng TH) sinh
năm 1986 lãnh lương chuyên viên chính.
• Thông tin cần quản lý về phòng ban bao gồm: tên phòng ban,
mã phòng ban và số lương nhân viên và người trưởng
phòng.Ví dụ: phòng Tổng Hợp có mã TH, số lượng nhân viên
là 5 có trưởng phòng là Nhân Viên A.
• Mức lương gồm tên, số tiền và mô tả yêu câu công việc. Ví
dụ: Mức lương chuyên viên chính là 2,5 triệu VNð, cần tối
thiểu 5 năm kinh nghiệm.
Vẽ sơ ñồ CSDL quản lý Nhân Sự Tiền Lương nói trên theo mô hình
thực thể
• Transaction (Giao dịch) trong SQL Server
là một tập hợp tuần tự của các câu lệnh
SQL ñơn lại ñể tạo thành một ñơn vị luận
lý duy nhất. ðơn vị luận lý này làm việc
phải ñảm bảo 4 tích chất: tính nguyên tử
(atomicity), tính nhất quán (consistency),
tính cô lập (isolation) và tính bền vững
(durability)- (ACID).
MaNV TenNv TuoiNV NhanVien
M1 NVA 40
M2 NVB 45 ThanNhan
• Master : Chứa tất cả những thông tin cấp hệ thống (system-level information) bao
gồm thông tin về các database khác trong hệ thống như vị trí của các data files, các
login account và các thiết ñặt cấu hình hệ thống của SQL Server (system
configuration settings).
• Tempdb : Chứa tất cả những table hay stored procedure ñược tạm thời tạo ra trong
quá trình làm việc bởi user hay do bản thân SQL Server engine. Các table hay stored
procedure này sẽ biến mất khi khởi ñộng lại SQL Server hay khi ta disconnect.
• Model : Database này ñóng vai trò như một bảng kẻm (template) cho các database
khác. Nghĩa là khi một user database ñược tạo ra thì SQL Server sẽ copy toàn bộ
các system objects (tables, stored procedures...) từ Model database sang database
mới vừa tạo.
• Msdb : Database này ñược SQL Server Agent sử dụng ñể hoạch ñịnh các báo ñộng
và các công việc cần làm (schedule alerts and jobs).
• Cấu Trúc Vật Lý Của Một SQL Server Database
Mỗi một database trong SQL Server ñều chứa ít nhất một data file
chính (primary), có thể có thêm một hay nhiều data file phụ
(Secondary) và một transaction log file.
• Primary data file (thường có phần mở rộng .mdf) : ñây là file chính
chứa data và những system tables.
• Secondary data file (thường có phần mở rộng .ndf) : ñây là file
phụ thường chỉ sử dụng khi database ñược phân chia ñể chứa trên
nhiều dĩa.
• Transaction log file (thường có phần mở rộng .ldf) : ñây là file ghi
lại tất cả những thay ñổi diễn ra trong một database và chứa ñầy ñủ
thông tin ñể có thể roll back hay roll forward khi cần.
Cấu Trúc Lưu Trữ và Phương Thức
Truy Xuất
Creater: Trần Sơn Hải
10 10
20 20 ục
30
40 30
40
50
60
50
70
80
60
70
80
10 20
10 30
20
20 30
20
20
30
10
30
30
20
10
30
Data entries
Data entries
(IndexFile)
(Data file)
CLUSTERED UNCLUSTERED
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 12 of 45
Cây B+
• d là bậc
• Mỗi node có >= d và <= 2d keys trừ nút gốc
30 120 240
Keys k < 30
Keys 30<=k<120 Keys 120<=k<240 Keys 240<=k
• Nút lá:
40 50 60
Next leaf
40 50 60
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 13 of 45
B+ Tree Example
d=2
80
20 60 100 12 140
0
10 1 18 20 3 40 50 60 6 80 8 90
5 0 5 5
10 15 18 20 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 14 of 45
B+ Tree Design
• How large d ?
• Example:
– Key size = 4 bytes
– Pointer size = 8 bytes
– Block size = 4096 byes
• 2d x 4 + (2d+1) x 8 <= 4096
• d = 170
• Range queries:
Select name
– As above
From people
– Then sequential traversal Where 20 <= age
and age <= 30
20 60 100 12 140
0
10 1 18 20 3 40 50 60 6 80 8 90
5 0 5 5
10 15 18 20 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 17 of 45
Insertion in a B+ Tree
After insertion
80
20 60 100 12 140
0
10 1 18 19 20 3 40 50 60 6 80 8 90
5 0 5 5
10 15 18 19 20 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 18 of 45
Insertion in a B+ Tree
Now insert 25
80
20 60 100 12 140
0
10 1 18 19 20 3 40 50 60 6 80 8 90
5 0 5 5
10 15 18 19 20 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 19 of 45
Insertion in a B+ Tree
After insertion
80
20 60 100 12 140
0
10 1 18 19 20 2 30 4 5 60 6 80 8 90
5 5 0 0 5 5
10 15 18 19 20 25 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 20 of 45
Insertion in a B+ Tree
But now have to split !
80
20 60 100 12 140
0
10 1 18 19 20 2 30 4 5 60 6 80 8 90
5 5 0 0 5 5
10 15 18 19 20 25 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 21 of 45
Insertion in a B+ Tree
After the split
80
20 30 60 100 12 140
0
10 1 18 19 20 2 30 4 5 60 6 80 8 90
5 5 0 0 5 5
10 15 18 19 20 25 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 22 of 45
Deletion from a B+ Tree
Delete 30
80
20 30 60 100 12 140
0
10 1 18 19 20 2 30 4 5 60 6 80 8 90
5 5 0 0 5 5
10 15 18 19 20 25 30 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 23 of 45
Deletion from a B+ Tree
After deleting 30
May change to 80
40, or not
20 30 60 100 12 140
0
10 1 18 19 20 2 40 5 60 6 80 8 90
5 5 0 5 5
10 15 18 19 20 25 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 24 of 45
Deletion from a B+ Tree
Now delete 25
80
20 30 60 100 12 140
0
10 1 18 19 20 25 40 5 60 6 80 8 90
5 0 5 5
10 15 18 19 20 25 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 25 of 45
Deletion from a B+ Tree
After deleting 25
Need to rebalance
80
Rotate
20 30 60 100 12 140
0
10 1 18 19 20 40 5 60 6 80 8 90
5 0 5 5
10 15 18 19 20 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 26 of 45
Deletion from a B+ Tree
Now delete 40
80
19 30 60 100 12 140
0
10 1 18 19 2 40 5 60 6 80 8 90
5 0 0 5 5
10 15 18 19 20 40 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 27 of 45
Deletion from a B+ Tree
After deleting 40
Rotation not possible
Need to merge nodes 80
19 30 60 100 12 140
0
10 1 18 19 2 50 60 6 80 8 90
5 0 5 5
10 15 18 19 20 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 28 of 45
Deletion from a B+ Tree
Final tree
80
19 60 100 12 140
0
10 1 18 19 2 5 60 6 80 8 90
5 0 0 5 5
10 15 18 19 20 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 29 of 45
Deletion from a B+ Tree
Quá trình tìm 85 sẽ như thế nào cần bao nhiêu lần so sánh.
Thử tiến hành xóa 50, sau ñó thêm 49.
80
19 60 100 12 140
0
10 1 18 19 2 5 60 6 80 8 90
5 0 0 5 5
10 15 18 19 20 50 60 65 80 85 90
6/17/2009 Hệ Quản Trị Cơ Sở Dữ Liệu 30 of 45
Variation on B+tree: B-tree (no +)
• Idea:
– Avoid duplicate keys
– Have record pointers in non-leaf nodes
• h(a)=h(c)=3 2
g
• h(ê)=0 3 a
c
• Action:
• In the Query Analyzer window, type:
execute prcListContractRecruiter Boston
Press F5 to execute the procedure
• Syntax
CREATE TRIGGER trigger_name
ON table_name
[WITH ENCRYPTION]
FOR [INSERT | DELETE | UPDATE]
AS sql_statements
INSERT Requisition
VALUES('000003','0001',getdate(), getdate() + 7, '0001', 'North', 20)
Problem Statement
Create a trigger to disable deleting rows from the
ContractRecruiter table.
1. Viết các câu lệnh tạo bảng và insert dữ liệu vào 2 bảng trên?
2. Viết các câu lệnh chuyển E2 từ Project P001 qua Project P002
dưới dạng Transaction ñể ñảm bảo ràng buộc của dữ liệu.
3. Tạo bảng ảo vwEmpPrj(EID, Ename, PrName)
4. Bạn thường truy xuất thông tin Employees theo Ename. Hãy
viết câu lệnh tạo Index ñể tăng tốc ñộ truy vấn của các câu truy
vấn dạng này.
5. Viết câu lệnh tạo store prcGetEmpByName với một tham số là
ñộ tuổi. Store này sẽ trả ra thông tin các nhân viên có ñộ bằng
với tham số của store. Sau ñó sử dụng store này tìm các nhân
viên 20 tuổi.
6. Tạo trigger không cho phép xóa bất cứ record nào trong bảng
Projects
Chương 5
SELECT B, D
FROM R, S
WHERE R.A=‘c’ AND S.E=2 AND R.C=S.C
R A B C S C D E
a 1 10 10 x 2
b 1 10 20 y 2
c 2 10 30 z 2
d 2 10 40 x 1
e 3 10 50 y 3
Kết quả
B D
2 x
6/17/2009 Hệ Quản Trị CSDL 4 of 82
Giới thiệu (tt)
• Cách 1
– Tích cartesian
– Phép chọn (selection)
– Phép chiếu (projection)
σR A B C σS C D E
a 2 10 10 x 10
20 y 10
30 z 10
6/17/2009 Hệ Quản Trị CSDL 8 of 82
Giới thiệu (tt)
• Cách 3 - sử dụng chỉ mục trên R.A và S.C
– Tìm các bộ trong R thỏa R.A=‘c’
– Với mỗi bộ tìm thấy, tìm tiếp các bộ trong S
thỏa R.C=S.C
– Bỏ ñi những bộ S.E ≠ 2
– Kết các bộ phù hợp của R và S
– Chiếu trên thuộc tính B và D
Bộ có A=‘c’ kế tiếp
<c, 5, 20>
Select logical
query plan
Query optimization Logical query plan tree
Select physical
plan
Execute plan
6/17/2009 Hệ Quản Trị CSDL 13 of 82
Quá trình biên dịch
Query
Parse
Parse tree
Answer
Convert
Logical query plan Execute
statistics
Apply laws Pi
Improve logical query plan Pick the best
Estimate {(P1,C1), (P2,C2) … }
result sizes
Logical query plan + sizes Estimate costs
Consider
physical plans {P1, P2, … }
6/17/2009 Hệ Quản Trị CSDL 14 of 82
Cây phân tích
<Query>
<SFW>
<SFW>
cusID <SFW>
<SFW>
– Alias name
6/17/2009 Hệ Quản Trị CSDL 21 of 82
Tiền xử lý (preprocessing)
• Kiểm tra ngữ nghĩa
– Quan hệ
– Thuộc tính
• Select
• From
– Kiểu dữ liệu
• Where
Parse
Parse tree
Answer
Convert
Logical query plan Execute
statistics
Apply laws Pi
Improve logical query plan Pick the best
Estimate {(P1, C1), (P2,C2) … }
result sizes
Logical query plan + sizes Estimate costs
Consider
physical plans {P1, P2, … }
6/17/2009 Hệ Quản Trị CSDL 23 of 82
Biến ñổi sang ðSQH
• Truy vấn ñơn
– Xét câu trúc <SFW>
• Thay thế <FromList> thành các biến quan hệ
– Sử dụng phép tích cartesian cho các biến quan hệ
• Thay thế <Condition> thành phép chọn σC
• Thay thế <SelectList> thành phép chiếu πL
π L
R S T …
6/17/2009 Hệ Quản Trị CSDL 24 of 82
Xét ví dụ 2
πcusNm
σCustomer.cusID=Account.cusID ∧ balance=100
x
Customer Account
R <Condition>
Tuple Operator S
<tuple> IN ΠcusID
<attribute> σbalance=100
cusID Account
σ
σ C
x
R <Condition>
R δ
Tuple Operator S
6/17/2009 Hệ Quản Trị CSDL S 28 of 82
Xét ví dụ 1 (tt)
πcusNm
σCustomer.cusID=Account.cusID
X
Customer δ
πcusID
σbalance=10
6/17/2009 Account
Hệ Quản Trị CSDL 29 of 82
Xét ví dụ 1 (tt)
πcusNm
Customer.cusID=Account.cusID
Customer δ
πcusID
σbalance=10
Account
6/17/2009 Hệ Quản Trị CSDL 30 of 82
Ví dụ 3
• Customer(cusID, cusNm, cusStreet,
cusCity)
• Account(accID, cusID, balance)
SELECT c.cusNm Truy vấn lồng tương quan
FROM Customer c
WHERE 10000 >= (
SELECT SUM(a.balance)
FROM Account a
WHERE a.cusID=c.cusID)
6/17/2009 Hệ Quản Trị CSDL 31 of 82
Ví dụ 3 (tt)
πcusNm
σ
X
Customer c <Condition>
<Pattern> ≥ γSUM(a.balance)
10000 σc.custID=a.cusID
Account a
6/17/2009 Hệ Quản Trị CSDL 32 of 82
Ví dụ 3 (tt)
πc.cusNm
σ10000 ≥ SoB
c.cusID = a.cusID
Account a
Parse
Parse tree
Answer
Convert
Logical query plan Execute
statistics
Apply laws Pi
Improve logical query plan Pick the best
Estimate {(P1, C1), (P2,C2) … }
result sizes
Logical query plan + sizes Estimate costs
Consider
physical plans {P1, P2, … }
6/17/2009 Hệ Quản Trị CSDL 35 of 82
Qui tắc: Kết tự nhiên, tích cartesian,
hội
R S = S R
(R S) T = R (S T)
RxS=SxR
(R x S) x T = R x (S x T)
R∪S=S∪R
R ∪ (S ∪ T) = (R ∪ S) ∪ T
6/17/2009 Hệ Quản Trị CSDL 36 of 82
Qui tắc: Phép chọn σ
• Cho
– p là vị từ chỉ có các thuộc tính của R
– q là vị từ chỉ có các thuộc tính của S
– m là vị từ có các thuộc tính của R và S
σp1∧∧p2(R)
Pushing selections
σp (R S) = [ σp (R)] S
σq (R S) = R σq (S)]
[
σp∨q (R σp (R)
S) [ = S] ∪ [R σq (S)]
6/17/2009 Hệ Quản Trị CSDL 39 of 82
Qui tắc: σ, ∪ và σ, –
σc (R ∪ S) = σc (R) ∪ σc (S)
σc (R – S) = σc (R) – S = σc (R) – σc (S)]
πXZ
πX [σp (R)] = πX {σp [πX (R)]}
σC (R S) = R C S
δ[ σC (R)] = σC [δ(R)]
δ(R ∩B S) = δ(R) ∩B S = R ∩B δ(S)
= δ(R) ∩B δ(S)
Except: ∪B , −B , π
6/17/2009 Hệ Quản Trị CSDL 48 of 82
γ Qui tắc:
• Cho
– X = tập thuộc tính trong R ñược gom nhóm
– Y = X ∪ {một số thuộc tính khác của R}
δ[γX(R)] = γX(R)
γX(R) = γX [πY (R)]
πcusNm
σCustomer.cusID=Account.cusID ∧ balance=100
x
Customer Account
Qui tắc σ
πcusNm
σbalance=100
σCustomer.cusID=Account.cusID
x
Customer Account
Customer.cusID=Account.cusID
Customer Account
Pushing σ
πcusNm
Customer.cusID=Account.cusID
Customer σbalance=100
Account
Customer.cusID=Account.cusID
Parse
Parse tree
Answer
Convert
Logical query plan Execute
statistics
Apply laws Pi
Improve logical query plan Pick the best
Estimate {(P1, C1), (P2,C2) … }
result sizes
Logical query plan + sizes Estimate costs
Consider
physical plans {P1, P2, … }
6/17/2009 Hệ Quản Trị CSDL 55 of 82
Ước lượng chi phí
• Ước lượng kích thước cây truy vấn
– Quan hệ
– Các phép toán
S(W) = S(R)
T(R)
T(W) =
V(R, Z)
Số bộ trung bình thỏa ñiều kiện Z=val
• Cách 1 T(R)
T(W) =
2
T(R)
T(W) =
• Cách 2 3
6/17/2009 Hệ Quản Trị CSDL 61 of 82
Ví dụ
• Cho
– R(A, B, C)
– T(R) = 10000
– V(R, A) = 50
S= σA=10 ∧ B<20 (R)
• Ước lượng kích thước biểu thức
T(R) 10000
T(S) = = = 67
V(R, A) x 3 50 x 3
6/17/2009 Hệ Quản Trị CSDL 62 of 82
Ví dụ (tt)
• Ước lượng kích thước biểu thức
σ
S = A=10 ∨ B<20 (R)
• Giả sử
– n là T(R)
– m1 là số bộ thỏa A=10 trong R
– m2 là số bộ thỏa B<20 trong R
m1 m2
T(S) = n(1 – (1 – )(1 – ))
n n
6/17/2009 Hệ Quản Trị CSDL 63 of 82
Ước lượng: W = R1 R2
• Cho
– X = tập thuộc tính của R1
– Y = tập thuộc tính của R2
• Giả sử
– V(R1, A) ≤ V(R2, A)
• Mọi giá trị của A trong R1 thì có trong R2
– V(R2, A) ≤ V(R1, A)
• Mọi giá trị của A có trong R2 thì có trong R1
Chọn 1 bộ
Tìm
T(R2)
T(W) = T(R1) x
V(R2, A)
6/17/2009 Hệ Quản Trị CSDL 66 of 82
Ước lượng: W = R1 R2 (tt)
• V(R1, A) ≤ V(R2, A)
T(W) = T(R1) x
T(R2)
V(R2, A)
• V(R2, A) ≤ V(R1, A)
T(W) = T(R2) x
T(R1)
V(R1, A)
T(T1) T(R2)
T(W)
• Tổng quát=
max{V(R1, A), V(R2, A)}
6/17/2009 Hệ Quản Trị CSDL 67 of 82
Ước lượng: W = R1 R2 (tt)
• Xét trường hợp X ∩ Y = A
R1 A B C R2 A D
• W(A, B, C, D)
– Các thuộc tính không tham gia vào phép kết thì
số lượng các giá trị vẫn giữ nguyên
– V(W, A) = min {V(R1, A), V(R2, A)}
– V(W, B) = V(R1, B)
– V(W, C) = V(R1, C)
– V(W, D) = V(R2, D)
6/17/2009 Hệ Quản Trị CSDL 68 of 82
Ví dụ
R1 R2 R3
T(R1) = 1000 T(R2) = 2000 T(R3) = 3000
V(R1, A) = 50 V(R2, B) = 200 V(R3, C) = 90
V(R1, B) = 100 V(R3, C) = 300 V(R3, D) = 500
U = R1(A, B) R2(B, C)
V(U, A) = 50
T(U) = 1000 x 2000
V(U, B) = 100
200
V(U, C) = 300
Z=U R3(C, D)
V(Z, A) = 50
T(Z) = 1000 x 2000 x 3000 V(Z, B) = 100
200 x 300 V(Z, C) = 90
V(Z, D) = 500
• R1 và R2 là set
T’(W) = T(R1) + T(R2)
T’’(W) ≤ T(R1) + T(R2)
T’(W) + T’’(W)
→T(W) =
6/17/2009
2
Hệ Quản Trị CSDL 73 of 82
Ước lượng: W = R1 ∩ R2
• Cách 1 R1 R2
– TH1: T’(W)=0
• TH1: T(W) = 1
• S(b, c)
R S
– T(S)=2000
– V(S, b)=200
– V(S, c)=100
6/17/2009 Hệ Quản Trị CSDL 78 of 82
Ví dụ (tt)
250 500
δ
50 δ δ 1000 1000
R R
5000 5000
(1) (2)
6/17/2009 Hệ Quản Trị CSDL 79 of 82
Ví dụ (tt)
• Cộng kích thước sau khi thực hiện các phép
toán, ngoại trừ
– Các nút lá
– Nút gốc
• (1): 100+50+1000=1150
• (2): 100+1000=1100
• Quan tâm
– Quan hệ R có ñược gom thành cụm không (clustered)?
– Thuộc tính trong các phép toán có chỉ mục không
(index)?
– Chỉ mục có gom cụm không (clustering index)?
– Kết quả cần ñược sắp thứ tự không?
6/17/2009 Hệ Quản Trị CSDL 81 of 82
Clustering
• Clustered-file
R R R R T T T …
S S S S S U U
• Clustered
R relation
R S T …
• Clustering
r1 r1index
r1 r1 r1 r1 r1 r1 r1 r1 r2 r2 r2 …
r1 r1 r1 r1 r1 r1 r1 r1 r1 r1 r2 r2 r2 r2 r2 r2 …
• 2.So sánh sữ giống và khác nhau giữa Clustered Index và Non Clustered.
Cho ví dụ dùng SQL Script tạo các ñối tượng trên.
• 3.Transaction là gì, các ñặc ñiểm của transaction? Cho ví dụ bằng SQL
Script.
• 4.Hãy viết script tạo database có tên CNTT2, có kích thứơc ban ñầu là
10Mb và mỗi lần tăng thêm 1Mb khi ñầy.
• 5.Hãy trình bày ý nghĩa và cách thức sử dụng các công cụ: Backup và
Restore, DTS, BCP và Index Turning trong SQL Server.
• 6.So sánh sữ giống và khác nhau giữa Store và Trigger. Cho ví dụ dùng
SQL Script tạo các ñối tượng trên.
Bài Tập
• Bài tập chuyển câu truy vấn thành DSQH.
• Bài tập chuyển câu truy vấn thành cây <SFW>.
• Các bước thực hiện một câu truy vấn theo một
cách nào ñó.
• Viết Script SQL: tạo bảng, thêm xóa sửa dữ liệu.
Tạo, xóa, sửa và sử dụng View, Index, Store,
Trigger;
• Viết script triển khai transaction, grant, revoke
Tóm tắt các câu lệnh TSQL ñã học
1) Trên c s d liu (database)
Các phiên bản của SQL Server: Enterprise, Personal, Desktop, Developer,..
Các bộ phận của SQL Server: Enterprise Manager, Query Analyzer, Books Online,..
Các loại tập tin của SQL Server: data file (primary, secondary), log file
Các loại cơ sở dữ liệu của SQL Server: system database, user database
2) Trên bng (table)
Nhớ các kiểu số liệu: text, binary, numberic, money, datetime, bit, variant
Nhớ các các ràng buộc: default, check, unique, foreign, primary
Nhớ các kiểu toàn vẹn: entity, domain, referential, user
Nhớ các thuộc tính bổ trợ: identity, null
1
Tạo với các ràng buộc
create table SinhVien (
MaSV int primary key,
TenSV nvarchar(50) not null,
QueQuan int references DiaPhuong(MaDP)
)
2
alter table..add default: thêm ràng buộc mặc ñịnh
alter table SinhVien
add default 'khong ten' for TenSV
3
update SinhVien
set NhomTruong = 4
where (MaSV > 3 and MaSV < 8)
select..order by: Hiện và sắp xếp theo ñiểm rồi theo tên
select TenSV, DiemTB
from SinhVien
order by DiemTB desc, TenSV asc
4
4.2) Truy vấn lồng nhau (nested query)
select..where (select)
Hiện tất cả những người trong bảng nhân viên có lương bằng lương lớn nhất của
những người có trong công ty
select TenNV, Luong
from NhanVien
where Luong = (select max(Luong) from NhanVien)
select..where (in)
Hiện tất cả những người trong bảng nhân viên có lương lớn nhất hoặc lớn nhì của
những người có trong công ty.
select TenNV, Luong
from NhanVien
where Luong in (select top 2 Luong from NhanVien order by Luong)
Câu lệnh select trong sẽ tạo ra một tập hai giá trị (top 2) ñó là lương lớn nhất và lương
lớn nhì. Và câu lệnh select thứ nhất sẽ chọn ra những người mà lương nằm trong tập lớn
nhất và lớn nhì
5
from NhanVien
group by Phong
Chỉ hiện ra những phòng nào có tổng thu nhập lớn hơn 500000
select Phong, sum(Luong)
from NhanVien
group by Phong
having sum(Luong) > 5000000
4.4) Truy vấn liên bảng (cross table query / joining query)
select..inner join: ghép các cặp bản ghi thỏa mãn ñiều kiện
Ghép bảng nhân viên và hiện ra tên nhân viên và tên ñịa phương
select NhanVien.TenNV, DiaPhuong.TenDP
from NhanVien inner join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP
select..left outer join: lấy tất cả phía trái và ghép (nếu có) với phải
Lấy tất cả những nhân viên kể cả những nhân viên có quê quán không hợp lệ (nghĩa là
mã quê quán không có trong bảng ñịa phương)
select NhanVien.TenNV, DiaPhuong.TenDP
from NhanVien left outer join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP
select..right outer join: lấy tất cả phía phải và ghép (nếu có) với phía
trái
Lấy tất cả những ñịa phương ghép với nhân viên, các ñịa phương không hợp lệ sẽ
ñược ghép với bộ dữ liệu rỗng. Không hiện ra các nhân viên không có mã quê quán phù
hợp
select NhanVien.TenNV, DiaPhuong.TenDP
from NhanVien right outer join DiaPhuong on NhanVien.QueQuan =
DiaPhuong.MaDP
6
select..full outer join: lấy từ hai phía và ghép nếu có
Lấy tất cả những nhân viên (nếu không có quê quán phù hợp thì ghép với bộ dữ liệu
rỗng) và tất cả những ñịa phương kể cả không có nhân viên.
select NhanVien.TenNV, DiaPhuong.TenDP
from NhanVien right outer join DiaPhuong on NhanVien.QueQuan =
DiaPhuong.MaDP
7
set @x = (select id from sysobjects where name='Employees')
select * from syscolumns where id = @x
Trong ví dụ này, ta khai báo biến @x kiểu int, sau ñó lấy id của bảng Employees vào
biến @x, rồi ta lấy tất cả các cột trong bảng syscolumns mà có id bằng @x, cũng có
nghĩa là id của bảng Employees. Do vậy ta sẽ liệt kê ñược tất cả các cột trong bảng
Employees
select * from @x
Khai báo bảng, tải bảng khác từ trong cơ sở dữ liệu lên bảng vừa khai báo, và hiện
bảng
declare @x table(MaSV int, TenSV nvarchar(20))
insert into @x
select EmployeeID, firstname
from Northwind.dbo.Employees
select * from @x
8
Các khái niệm cơ bản
+ Cơ sở dữ liệu (database)
+ Bảng (table) hoặc quan hệ (relation)
+ Bản ghi (record) hoặc dòng (row) hoặc bộ (tuple)
+ Trường (field) hoặc cột (column)
+ Mối quan hệ (relationship) ñược biểu hiện bằng bảng (table) hoặc khóa (key)
+ Ràng buộc khóa ngoài (foreign key constraint): các giá trị phải hợp lệ với cột khóa
chính tương ứng
+ Ràng buộc khóa chính (primary key constraint): phải duy nhất và không trống
+ Thuộc tính ñịnh danh (identity property): có thể ñược tăng tự ñộng
+ Thuộc tính không trống (not null property): không ñược phép ñể trống
9
Giá trị số thực chính xác: decimal, numberic
Giá trị tiền tệ: money, smallmoney
Giá trị hời gian: datetime, smalldatetime
10
baigiai4_2
begin tran
update employee
set prid = 'p2'
where empid = 'e1'
update project
set numofpr = numofpr - 1
where prid = 'p1'
update project
set numofpr = numofpr + 1
where prid = 'p2'
commit tran
Page 1/1