CHUẨN HOÁ LƯỢC ĐỒ QUAN HỆ

Một phần của tài liệu Cơ sở dữ liệu (Trang 88)

4.3.1. Các định nghĩa

Quan hệ (LĐQH) được chuẩn hóa là quan hệ trong đó miền trị của mỗi thuộc tính chỉ chứa các giá trị nguyên tố (không phân nhỏ được nữa).

Quan hệ (LĐQH) có chứa một miền giá trị của một thuộc tính nào đó không nguyên tố được gọi là quan hệ chưa chuẩn.

Một quan hệ chưa chuẩn hóa luôn có thể đưa về quan hệ chuẩn. Chuẩn hoá lược đồ quan hệ là quá trình biến đổi các lược đồ quan hệ thành các dạng chuẩn thích hợp để tránh dư thừa và các dị thường dữ liệu.

Ví dụ: Quan hệ chưa chuẩn

Sanpham MaNCC TenNCC DiachiNCC

TenSP Gia 1 Bia Hà Nội Hà Nội Bia chai

Bia hơi

7000 3000 2 Kinh Đô TP Hồ Chí Minh Bánh trung thu 1

Bánh trung thu 2 Bánh trung thu 3 Bánh quy 35000 8000 250000 45000

Quan hệ chuẩn hóa

MaNCC TenNCC DiachiNCC TenSP Gia 1 1 Bia Hà Nội Bia Hà Nội Hà Nội Hà Nội Bia chai Bia hơi 7000 3000 2 2 2 2 Kinh Đô Kinh Đô Kinh Đô Kinh Đô TP Hồ Chí Minh TP Hồ Chí Minh TP Hồ Chí Minh TP Hồ Chí Minh Bánh trung thu 1 Bánh trung thu 2 Bánh trung thu 3 Bánh quy 35000 8000 250000 45000

Trong giáo trình này, ta chỉ xem xét các lược đồ chuẩn hoá.

Định nghĩa: Cho lược đồ quan hệ R trên tập thuộc tính U = { A1, ... , An}. F là tập phụ thuộc hàm trên U. Thuộc tính A∈U được gọi là thuộc tính khóa nếu A là thành phần của một khóa nào đó của R. Ngược lại A được gọi là thuộc tính không khóa.

Ví dụ: Cho lược đồ quan hệ R trên tập thuộc tính U = { A, B, C, D} và các phụ thuộc hàm AB →C, B → D, BC →A. Khi đó các khóa của R là AB và BC nên A, B, C là thuộc tính khóa, còn D là thuộc tính không khóa.

Định nghĩa: Cho lược đồ quan hệ R(U) và tập phụ thuộc hàm F trên U. X, Y ⊆U. Y được gọi là phụ thuộc hàm đầy đủ vào X nếu :

+ Y phụ thuộc hàm vào X (nghĩa là X→Y∈F+)

+ Y không phụ thuộc hàm vào bất kỳ tập con thực sự nào của X (nghĩa là với mọi Z⊂X thì Z→Y∈F+ ).

Nói cách khác Y được gọi là phụ thuộc hàm đầy đủ vào tập thuộc tính X nếu:

i) Y ⊂ X+,

ii) Với mọi Z⊂X thì Z+ ∋ Y.

Định nghĩa: Cho lược đồ quan hệ R(U) và tập phụ thuộc hàm F trên U. X, Y ⊆ U. Y được gọi là phụ thuộc bắc cầu vào X nếu tồn tại

Z⊂U sao cho X→Z, Z → Y ∈ F+ nhưng Z → X ∉ F+. Ngược lại, ta nói rằng Y không phụ thuộc hàm bắc cầu vào X.

Nói cách khác tập thuộc tính Y được gọi là phụ thuộc bắc cầu

vào tập thuộc tính X nếu tồn tai Z⊂X sao cho: i) X →Z ∈ F+ và Z → Y ∈ F+,

ii) Z → X ∉ F+ 4.3.2. Các dạng chuẩn

Trong mục này ta sẽ xem xét các dạng chuẩn sau: - Dạng chuẩn 1 (1NF)

- Dạng chuẩn 2 (2NF) - Dạng chuẩn 3 (3NF)

Định nghĩa: Lược đồ quan hệ R được gọi là ở dạng chuẩn 1 (1NF) nếu toàn bộ các miền trị của các thuộc tính trong R đều chỉ chứa các giá trị nguyên tố. Một quan hệ xác định trên lược đồ 1NF được gọi là quan hệ 1NF.

Như vậy mọi lược đồ chuẩn hoá đều ở dạng chuẩn 1.

Định nghĩa: Lược đồ quan hệ R được gọi là ở dạng chuẩn 2 (2NF) nếu:

i) R ở dạng chuẩn 1,

ii) Mọi thuộc tính không khóa của R đều phụ thuộc hàm đầy đủ vào khóa chính.

Định nghĩa: Lược đồ quan hệ R được gọi là ở dạng chuẩn 3 (3NF) nếu:

i) R ở dạng chuẩn 2,

ii) Mọi thuộc tính ngoài khóa của R đều không phụ thuộc bắc cầu vào khóa chính.

4.3.3. Phép tách lược đồ quan hệ thành các lược đồ 3NF

Thuật toán tách lược đồ thành tập các lược đồ 3NF với phép tách không mất mát thông tin:

+ Vào: Lược đồ quan hệ R(U). Tập phụ thuộc hàm F.

+ Ra: ρ={R1(U1), ...,Rm(Um) | Ri(Ui), i=1, ..., m là 3NF} với phép tách không mất mát thông tin.

+ Phương pháp:

Bước 1: Tìm phủ tối thiểu F' của F.

Bước 2:

i) Đặt U0= X với X là tập các thuộc tính không xuất hiện trong bất kỳ một phụ thuộc hàm nào (cả vế trái lẫn vế phải) của F'.

Nếu U0 ≠∅ thì lập một lược đồ R0(U0).

ii) Nếu tồn tại phụ thuộc hàm dạng L → A ∈F' mà LA = U\U0

thì ta lập một lược đồ R1(U\U0) và khi đó ρ (R0(U0), R1(U\U0)) là phép tách R thành các lược đồ 3NF.

iii) Nếu ∃Li→Ai1, ..., Li →Aik , k≥1 thì lập lược đồ Ri(LiAi1 . . . Aik). Khi đó ρ (R0(U0), Ri(Ui)) là phép tách R thành các lược đồ 3NF.

Bước 3:

i) Tìm một khóa K của R(U).

ii) Nếu tồn tại Ui mà K ⊆ Ui thì ρ(R0(U0), Ri(Ui)) là phép tách R thành các lược đồ 3NF, không mất mát thông tin (Giữ nguyên kết quả bước 2).

iii) Nếu không tồn tại Ui thoả ii) nhưng tồn tại Ui mà K⊆ U0 ∪ Ui

thì ρ(Ri(Ui), R0(K)) (thay U0 =K) là phép tách R thành các lược đồ 3NF, không mất mát thông tin.

iv) Nếu không tồn tại Ui thoả iii) thì ρ(Ri(Ui), R0(U0), R(K)) là phép tách R thành các lược đồ 3NF, không mất mát thông tin (Thêm vào lược đồ R(K)).

Ví dụ 1: Cho lược đồ quan hệ R(U), với U={A, B, C, D, E, G } và tập phụ thuộc hàm F={A→G, CG→D, CD→A, AE→B, CE→D}.

Hãy tách lược đồ R thành dạng 3NF với phép tách không mất mát thông tin.

Phủ tối thiểu của F là F' = F

* Không tồn tại thuộc tính không xuất hiện trong mọi PTH của F' (U0=∅)

* Không tồn tại PTH dạng L → A mà LA = U\U0

* Không tồn tại các PTH có vế trái giống nhau Vậy ta có phép tách là

ρ(R1(AG), R2(CGD), R3(CDA), R4(AEB), R5(CED)).

Ta tìm được một khóa của R là K=EC. Do K ⊆ U5=CED nên ρ(R1(AG), R2(CGD), R3(CDA), R4(AEB), R5(CED)).

là lược đồ chuẩn hoá không mất mát thông tin.

Ví dụ 2: Cho lược đồ quan hệ R(U) với U= {A, B, C, D, E, F, G} và tập phụ thuộc hàm F={A→BC, D→E, AD→F}. Hãy tách lược đồ quan hệ trên thành tập các lược đồ dạng 3NF với phép tách không mất mát thông tin.

1. Tìm phủ tối thiểu F' của F

Ta có F' = {A→B, A →C, D→E, AD →F}. 2. Tách

i) Do G có mặt trong bất kỳ PTH nào của F' nên đặt U0 = G và xác định lược đồ R0(G).

ii) Không tồn tại phụ thuộc hàm dạng L → A mà LA = U - U0.

iii) Từ A →B, A → C ta xác định lược đồ : R1(ABC) Từ D →E xác định R2(DE)

Từ AD →F xác định R3(ADF)

Vậy phép tách là: ρ (R0(G),R1(ABC), R2(DE), R3(ADF)). 3. Đưa ra kết quả:

+ Không tồn tại Ui mà K ⊆ Ui,

+ Tồn tại U3= ADF để K = ADG ⊆U3∪G = ADGF nên ta có phép tách thành các lược đồ 3NF không mất mát thông tin của R là: ρ (R0(ADG), R1(ABC), R2(DE), R3(ADF)).

CÂU HỎI VÀ BÀI TẬP

1. Cho lược đồ quan hệ R(U), quan hệ r xác định trên R và tập phụ thuộc hàm

F = {AB → E, AG → D, BE → I, E → G, GI → H}

Chứng minh rằng nếu quan hệ r xác định trên R thoả F thì r cũng thoả AB→GH.

2. Cho lược đồ quan hệ R, quan hệ r xác định trên R và tập phụ thuộc hàm

F = {AB → C, B → D, CD → E, CE → GH, G → A}

Chứng minh rằng nếu quan hệ r thoả F thì r cũng thoả AB→E, AB→G.

3. Cho lược đồ quan hệ R trên tập thuộc tính U={A, B, C, D, E, F, G, H} và tập phụ thuộc hàm F = {A → D, AB → DE, CE → G, E → H}

a. Tính (AB)+.

b. Tìm các khóa của R.

4. Cho lược đồ quan hệ R(U) với U = {A, B, C, D, E, F, G, H, I, K, L} và tập phụ thuộc hàm

F = {BK → FG, G → F, A → CDL, ABEK → H} Hãy tìm một khóa của R.

5. Cho lược đồ quan hệ R(U), U={A, B, C, D, E, F, G, H} và tập phụ thuộc hàm F={A → CD, C →D, EG → F, B → H} trên U.

Hãy tách lược đồ trên thành tập các lược đồ 3NF với phép tách không mất mát thông tin.

6. Cho lược đồ quan hệ R trên tập thuộc tính U={A, B, C, D, E, F, G, H} và tập phụ thuộc hàm

F = {AEF → CD, A → GH, EF → B, G → H}

Hãy tách lược đồ R thành tập các lược đồ ở dạng chuẩn 3 với phép tách không mất mát thông tin.

7. Cho lược đồ quan hệ R(U) với U = {A, B, C, D, E} và tập phụ thuộc hàm

F = {A → BC, B → C, AD → E}

Hãy tách lược đồ R thành tập các lược đồ 3NF với phép tách không mất mát thông tin.

8. Cho lược đồ quan hệ R(U) với U={A, B, C, D, E, G, H} và tập phụ thuộc hàm F xác định trên U như sau: F={A→BH, B→H, C→D, DE→G, D→E}.

Tính (AD)+ . AD có phải là một khóa của R không? Tại sao? Tìm một khóa của R.

Tách lược đồ R thành các lược đồ 3NF với phép tách không mất mát thông tin.

Chương 5

AN TOµN Vµ TOµN VÑN D÷ LIÖU

5.1. AN TOÀN DỮ LIỆU

5.1.1. Khái niệm an toàn dữ liệu

Khái niệm an toàn dữ liệu đề cập đến việc giữ bí mật và quyền khai thác cơ sở dữ liệu. Đa số những người sử dụng cơ sở dữ liệu đều muốn cơ sở dữ liệu của mình được đảm bảo an toàn, bí mật không để người khác “nhòm” vào. Vì vậy cơ sở dữ liệu phải có khả năng giữ gìn tính cá nhân của nó.

An toàn dữ liệu là sự bảo vệ dữ liệu trong cơ sở dữ liệu chống lại sự truy nhập, sửa đổi hay phá hủy bất hợp pháp.

Để đảm bảo sự an toàn dữ liệu, chúng ta cần phải:

- Phân quyền: Mỗi người dùng sẽ có nhu cầu truy nhập khác nhau đối với cơ sở dữ liệu, có thể toàn bộ hay một phần của cơ sở dữ liệu; có quyền đọc hay ghi dữ liệu. Các quyền của người dùng thường ở các dạng sau:

+ Các quyền thao tác trên các phần của cơ sở dữ liệu:

Quyền đọc: Chỉ cho phép đọc nhưng không cho phép sửa đổi dữ liệu,

Quyền bổ sung: Chỉ cho phép bổ sung thêm nhưng không cho phép sửa đổi dữ liệu sẵn có trong cơ sở dữ liệu,

Quyền cập nhật: Chỉ cho phép sửa đổi nhưng không cho phép xoá dữ liệu,

+ Các quyền thao tác trên lược đồ cơ sở dữ liệu: Quyền tạo chỉ dẫn: Cho phép xoá và tạo các chỉ dẫn,

Quyền quản lý tài nguyên: Cho phép tạo thêm quan hệ mới trong cơ sở dữ liệu,

Quyền thay đổi: Cho phép thêm, xoá một số thuộc tính trong quan hệ,

Quyền loại bỏ quan hệ: Cho phép xoá quan hệ trong cơ sở dữ liệu. Trên đây là danh sách các quyền cơ bản của người dùng đối với cơ sở dữ liệu, chúng ta chưa thể vét cạn được tất cả các trường hợp có thể.

- Xác minh người dùng: Tức là phải kiểm tra người truy nhập vào cơ sở dữ liệu có hợp pháp không. Những người dùng hợp pháp đối với cơ sở dữ liệu cũng phải có chính sách mật khẩu tốt để tránh việc bị đánh cắp mật khẩu, như: mật khẩu cần phải được thay đổi thường xuyên; không nên dùng mật khẩu dễ đoán.

Sau đây chúng ta sẽ xem xét một số lệnh an toàn dữ liệu được cung cấp bởi SQL.

5.1.2. Các lệnh an toàn dữ liệu của SQL

a) Tạo khung nhìn cho người dùng

Khung nhìn được xem như một cơ chế bảo vệ dữ liệu đối với người sử dụng, nhờ việc tạo khung nhìn chúng ta tạo ra các bảng ảo cho người sử dụng mà trên đó ta đã che dấu đi các dữ liệu không cần thiết hay không được phép truy cập của người sử dụng.

Lệnh tạo khung nhìn:

CREATE VIEW <Tên khung nhìn> [<Danh sách cột> AS <Câu lệnh truy vấn>

Trong đó:

- <Tên khung nhìn>: được xác định giống như tên bảng, - <Danh sách cột>: Tên các cột của khung nhìn.

- <Câu lệnh truy vấn>: là câu lệnh SQL bất kỳ. Ví dụ. Cho cơ sở dữ liệu gồm hai quan hệ sau:

NhanVien( MaNV, TenNV, DChiNV, MucLuong, NamLL, MaPh, DanhGia)

Phong(Maph, TenPh, TruongPh, VitriPh)

Tạo khung nhìn cho đối tượng người dùng là trưởng phòng của phòng ‘Phần mềm’ như sau:

CREATE VIEW PKT(TenNV, Diachi, MucLuong, DanhGia) AS

SELECT TenNV, DChiNV, MucLuong, DanhGia FROM NhanVien

WHERE MaPh In SELECT Maph FROM Phong

WHERE TenPh = ‘Phần mềm’.

b) Tuyên bố và kiểm tra quyền truy nhập

Việc tuyên bố và kiểm tra quyền truy nhập cơ sở dữ liệu được thực hiện nhờ lệnh GRANT có dạng:

GRANT <Danh sách thao tác> ON <Đối tượng> TO <Danh sách người dùng> [WITH GRANT OPTION ];

Trong đó:

- <Danh sách thao tác> bao gồm: read, select ,write, insert, update, delete, craete, run.

- <Đối tượng>: Tên bảng, tên view, tên chương trình ứng dụng nào đó.

- <Danh sách người dùng>: Tên người dùng, tên nhóm người dùng hay một danh sách người dùng. Nếu cho mọi người dùng ta sử dụng từ khóa Public hay World.

- WITH GRANT OPTION: Đảm bảo người dùng có thể tiếp tục trao quyền truy nhập cho người sử dụng khác tiếp theo.

Ví dụ. Trao quyền đọc, bổ sung bảng NhanVien cho người dùng tên "Hung" và ông “Hung” có quyền trao quyền cho người khác.

GRANT read, insert ON NhanVien TO Hung WITH GRANT OPTION;

c) Bỏ quyền truy nhập

REVOKE <Danh sách thao tác> ON <đối tượng> FROM <Danh sách người dùng>;

Ví dụ. Bỏ quyền bổ sung bảng NhanVien của người dùng tên "Hung"

REVOKE insert ON NhanVien FROM Hung;

5.2. TOÀN VẸN DỮ LIỆU

5.2.1. Khái niệm toàn vẹn dữ liệu

Toàn vẹn dữ liệu là việc đảm bảo tính chính xác của dữ liệu trong cơ sở dữ liệu ở mọi lúc, mọi nơi. Toàn vẹn dữ liệu còn thể hiện tính chặt chẽ của dữ liệu trong cơ sở dữ liệu.

Đảm bảo tính toàn vẹn dữ liệu là sự bảo vệ dữ liệu trong cơ sở dữ liệu chống lại sự sửa đổi hay phá hủy không có căn cứ. Để đảm bảo tính toàn vẹn dữ liệu chúng ta sử dụng: các ràng buộc toàn vẹn, các xác nhận, các kích hoạt,…

5.2.2. Các ràng buộc toàn vẹn

Các ràng buộc toàn vẹn đảm bảo tính nhất quán của dữ liệu trong cơ sở dữ liệu khi bổ sung, xoá, hay sửa đổi dữ liệu. Các ràng buộc toàn vẹn gồm: ràng buộc miền và ràng buộc về khóa.

a) Ràng buộc miền

Ràng buộc miền là một dạng cơ bản của ràng buộc toàn vẹn, được sử dụng để kiểm tra tính hợp lệ của dữ liệu vào. Trong SQL ràng buộc miền được xác định bởi kiểu dữ liệu và mệnh đề CHECK, là một phần của câu lệnh CREATE.

Ví dụ. Tạo bảng DIEM(MaSV, MaMon, Diem). Với thuộc tính Diem chỉ nhận giá trị tư 0 đến 10.

Ta viết:

CREATE TABLE DIEM (MaSV varchar(10),

MaMon varchar(10),

Diem int,

CHECK ((Diem>=0) and (Diem<=10))); b) Ràng buộc về khóa

Trong SQL để khai báo các ràng buộc khóa ta sử dụng các mệnh đề sau:

- PRIMARY KEY: Khai báo ràng buộc khóa chính, - UNIQUE KEY: Khai báo ràng buộc khóa dự phòng, - FOREIGN KEY: Khai báo ràng buộc khóa ngoài.

Các mệnh đề này là một phần trong câu lệnh CREATE TABLE đã được tìm hiểu ở chương 3.

5.2.3. Xác nhận (Assertion)

Một xác nhận (khẳng định) là điều kiện mà ta mong muốn cơ sở dữ liệu phải luôn luôn thoả mãn. Các ràng buộc miền và các ràng buộc về khóa là các dạng đặc biệt của các khẳng định. Trong SQL để khai báo một xác nhận ta dùng lệnh sau:

CREATE ASSERTION <Tên xác nhận> CHECK <Điều kiện>;

Khi một xác nhận được tạo lập, hệ thống sẽ kiểm tra tính hiệu lực của nó. Nếu xác nhận có hiệu lực thì một sự thay đổi cơ sở dữ liệu chỉ được phép thực hiện khi <Điều kiện> là đúng.

Ví dụ. Cho cơ sở dữ liệu

HANG (MãH, TênH, TìnhTrạng, ĐiaChi ) - Các hãng cung ứng hàng.

MH(MãMH, TênMH, Màu, TLượng) - Các mặt hàng.

CUNGUNG (MãH, MãMH, Chấtlượng) - Các mặt hàng đã được cung ứng.

Hãy thiết lập một xác nhận sao cho: Số mặt hàng được cung cấp bởi một hãng có Tinhtrang < 15 phải nhỏ hơn 5.

CREATE ASSERTION MatHang

CHECK (not exists (SELECT * FROM Hang WHERE (SELECT (Tinhtrang < 15) and (SELECT Count(MaMH) FROM SP

WHERE CUNGUNG.MaH = HANG.MaH) > 4))

5.2.4. Kích hoạt (Trigger)

Một kích hoạt là một câu lệnh được thực hiện một cách tự động bởi hệ thống, nó như một hành động phụ của một thay đổi

Một phần của tài liệu Cơ sở dữ liệu (Trang 88)

Tải bản đầy đủ (PDF)

(121 trang)