LOP MALHC TENLHC

Một phần của tài liệu Giáo trình Cơ sở dữ liệu (Tập 1): Phần 1 - TS. Nguyễn Thị Thu Thuỷ (Chủ biên) (Trang 62 - 67)

11 DI20002 Nguyễn Minh Ngọc 1992 Hà Nam K47A

LOP MALHC TENLHC

K47S1 Lóp 1 Khố 47 khoa s

K48I1 Lớp lKhố48khoai

K49N3 Lớp 3 Khoá 49 khoa N

K50A4 Lớp 4 Khoá 50 khoa A

K50B1 Lớp 1 Khố 50 khoa B

Ví dụ nếu chèn bộ giá trị <‘14D140003’, ‘Vũ Hồng Ánh, ‘1991’,

‘Bắc Ninh’, ‘K47S1 ’> vào quan hệ sV thì phép chèn này sẽ bị từ chối vì phép chèn đã vi phạm ràng buộc khố chính do MSV có giá trị là

14D140003 đã tồn tại ở trong quan hệ.

2.2.1.2. Ràng buộc tham chiếu

Mỗi quan hệ giữa các thực thể trong thiết kế mức khái niệm được

ánh xạ tương ứng thành một ràng buộc tham chiếu trong thiết kế logic. Ràng buộc tham chiếu (referential constraint) này còn được gọi là ràng buộc tồn vẹn tham chiếu (referential integrity constraint). Đó là ràng

buộc bắt buộc thực hiện một quan hệ giữa các bảng trong cơ sở dữ liệu

quan hệ. Bắt buộc thực hiện ở đây có nghĩa là hệ quàn trị cơ sở dữ liệu tự

động kiểm tra để đảm bảo mỗi giá trị khóa ngồi trong bảng con ln

ln có một khóa chính tương ứng ưong bảng cha. Đơi khi, ràng buộc

tham chiếu này cịn được gọi là ràng buộc khố ngoại.

Ràng buộc tồn vẹn tham chiếu phải xác định trên 2 quan hệ: quan

hệ tham chiếu (referencing relation) và quan hệ được tham chiếu (referenced relation). Cụ thể là một bộ giá trị trong một quan hệ sẽ tham

chiếu tới một bộ giá trị đã tồn tại trong một quan hệ khác.

Ví dụ, với hai quan hệ SV(MSV, HTEN, NSINH, QQUAN, MALHC) và LOP(MALHC, TENLHC) trong ví dụ 2.16 thì quan hệ LOP

quan hệ này sẽ phải tồn tại trước các bộ frong quan hệ sv. Còn quan hệ

sv được gọi là quan hệ tham chiếu. Cụ thể hơn, thuộc tính MALHC

trong quan hệ s V tham chiếu tới thuộc tính MALHC ưong quan hệ LOP,

và khi đó thuộc tính MALHC ưong quan hệ sv được gọi là khố ngoại

cịn trong quan hệ LOP thì lại là khố chính.

Chú ỷ:

Khi cập nhật bảng, hệ qn trị cơ sở dữ liệu sẽ thực thi các ràng

buộc tham chiếu mà ta đã định nghĩa ừong bảng. Điểm mạnh của ràng buộc tham chiếu là chúng được thực thi tự động, vì thế các ràng buộc

tham chiếu ln ln có hiệu lực trừ khi nó bị quản trị viên cơ sở dữ liệu

vơ hiệu hóa. Điều này thể hiện rõ nhất khi chèn một dòng mới ưong bảng con, phép chèn sẽ bị từ chối nếu giá trị khóa ngồi trong dịng đó khơng có giá trị khóa chính tương ứng frong bảng cha.

Xét quan hệ sv và quan hệ LOP với các thể hiện như trong ví dụ

2.16. Nếu chèn bộ giá trị <‘11D14OOO7’, ‘Vũ Hồng Ánh, ‘1991’, ‘Bắc Ninh’, ‘K47S2’> vào quan hệ sv. Phép chèn này vi phạm ràng buộc tham chiếu do ưong quan hệ LOP khơng có mã lớp hành chính nào có giá trị bằng K47S2 nên phép chèn này sẽ bị loại bỏ.

Như vậy, để chèn một bộ giá trị cho một sinh viên mới vào quan hệ

sv thì ngồi các thơng tin về sinh viên như mã sinh viên, họ tên sinh viên, năm sinh, và quê quán thì ta phải đưa vào các thơng tin về lớp hành chính mà sinh viên đó theo học. Các thơng tin về lớp hành chính phải

được đưa vào một cách đúng đắn và phù hợp với các thông tin của lớp đó trong các quan hệ khác.

Khi cập nhật một khóa ngồi ứong bảng con, phép cập nhật sẽ bị từ

chối nếu giá trị khóa ngồi đó khơng tồn tại trong tập giá trị khóa chính của bảng cha.

Xét quan hệ sv và quan hệ LOP với các thể hiện như trong ví dụ

2.16. Nếu cập nhật lại giá trị mã lớp hành chính của sinh viên có MSV =

chiếu do trong quan hệ LOP khơng có mã lớp hành chính nào có giá trị bằng K49S5 nên phép cập nhật này sẽ bị từ chối.

Khi xóa một dịng trong bảng cha, nếu dịng này có liên quan tới

các dòng của bảng con thi các dòng này trong bảng con cũng phải bị xóa, nếu khơng phép xóa trong bảng cha sẽ khơng được thực hiện.

Xét quan hệ sv và quan hệ LOP với các thể hiện như trong ví dụ 2.16. Nếu xố một bộ giá trị của quan hệ LOP có MALHC có giá trị

bàng K50B1 thì phép xố này được chấp nhận. Nhưng nếu xố bộ giá trị

của quan hệ LOP có MALHC có giá trị bằng K47S1 thì phép xố này

khơng được chấp nhận bởi vì có các bộ trong quan hệ sv tham chiếu đến

bộ này, như vậy là vi phạm ràng buộc tham chiếu.

2.2.2. Ràng buộc toàn vẹn

Ràng buộc toàn vẹn (integrity constraint) là ràng buộc làm tăng

thêm tính chính xác của dữ liệu trong cơ sở dữ liệu. Ưu điểm chính của ràng buộc tồn vẹn là hệ quản trị cơ sở dữ liệu tự động thực thi những

ràng buộc này, tức là ràng buộc ln ln được duy trì, cho dù ta kết nối

tới cơ sở dữ liệu bằng bất cứ cách nào, trừ khi nó bị quản trị viên cơ sờ

dữ liệu vơ hiệu hóa. Một số kiểu ràng buộc toàn vẹn chủ yếu là ràng buộc NOT NULL, ràng buộc CHECK và ràng buộc bắt buộc với các trigger.

2.2.2.1. Ràng buộc NOT NULL

Khi định nghĩa cột trong cơ sở dữ liệu, ta có thể xác định cột có

được cho phép nhận giá trị null hay không. Giá trị null (null value) trong cơ sở dữ liệu là một mã đặc biệt, được đặt vào một cột để biểu thị giá trị của cột đó trong hàng là khơng xác định. Giá trị null khác với giá trị trống, chuỗi rỗng, hay giá trị không. Giá trị null là một mã đặc biệt,

không biểu thị ý nghĩa nào khác ưong cơ sở dữ liệu.

Cách xử lý thống nhất đối với giá trị null được quy định trong tiêu

chuẩn ANSI/ISO SQL.

Các cột là thành phần cùa khóa chính phải được chi rõ là NOT

khóa chính tự động tạo ra định nghĩa chỉ mục duy nhất trên cột khóa

chính. Các cột khóa ngồi phải có mệnh đề NOT NULL, nếu quan hệ là

bắt buộc; ngược lại, khóa ngồi có thể nhận giá trị NULL.

Ví dụ 2.17: Xét quan hệ sv và quan hệ LOP với các thể hiện như

trong ví dụ 2.14. Nếu chèn bộ giá trị <Null, ‘Vũ Hồng Ánh, ‘1991’, ‘Bắc Ninh’, ‘K47S2’> vào quan hệ sv thì phép chèn này sẽ bị từ chối do vi phạm ràng buộc NOT NULL do nhập giá trị null cho khố chính MSV

trong quan hệ sv.

2.2.2.2. Ràng buộc CHECK

Ràng buộc CHECK sử dụng một câu lệnh logic đơn giàn để kiểm tra tính họp lệ của giá trị cột. Kết quả của câu lệnh logic đó phải là giá trị logic là true hoặc false, nếu kết quả là true thì giá trị cột được đặt vào bảng; ngược lại, nếu kết quả là false thì giá trị cột khơng được đặt vào

bảng, hệ quản trị cơ sở dữ liệu sẽ đưa ra thông báo lỗi tương ứng. Thông

thường, ràng buộc CHECK chỉ được dùng trong trường hợp cần so sánh giá trị cột với một giá trị đơn, một khoảng hoặc danh sách các giá trị, hay giá trị của những cột khác trên cùng một dòng dữ liệu.

Trong một số các hệ quản trị cơ sở dữ liệu mệnh đề CHECK cho phép các miền được hạn chế rất mạnh mà hầu hết các hệ thống kiểu ngôn ngữ lập trình khơng cho phép. Đặc biệt mệnh đề CHECK cho phép người

thiết kế sơ đồ đặc tả một thuộc tính phải thoả mãn một giá trị nào đó

được gán đối với một biến có kiểu là miền này. Dạng khai báo ràng buộc miền là:

CONSTRAINT <Tên ràng buộc> CHECK <điều kiện>

Ví dụ 2.18: Khai báo ràng buộc lương của nhân viên dưới

5.000.000 đối với quan hệ NHANVIEN(MaNV, Hoten, NS, Luong)

trong ví dụ 2.1:

Với câu lệnh này thì giá tri frên cột thuộc tính lương của tất cả các

nhân viên có mức lương dưới 5.000.000 sẽ được lưu trữ trong bảng

NHANVIEN và ngược lại, thì hệ quản trị CSDL sẽ thông báo lỗi.

Mệnh đề CHECK cũng có thể được sử dụng để hạn chế một miền

khơng chứa một gjá trị nào đó hay chỉ chứa một tập các giá trị được đặc tả. Dạng tổng quát là:

CONSTRAINT <Tên ràng buộc> CHECK (<Tên cột> {IN/NOT

IN} (tập giá trị))

Ví dụ 2.19: Khai báo ràng buộc về giới tính đối với thuộc tính GT

của nhân viên chỉ nhận một trong hai giá trị là Nam hoặc Nữ đối với

quan hệ NHANVIEN:

CONSTRAINT Gioitinh CHECK (GT IN (‘Nam’, ‘Nữ’))

2.2.23. Các ràng buộc thực thi sử dụng trigger

Một số ràng buộc phức tạp không thể sử dụng khai báo để thực thi

được. Khi đó, ta có thể sử dụng trigger, trigger là một mơ-đun logic lập trình, được kích hoạt khi xảy ra một sự kiện cụ thể ưong cơ sở dữ liệu. Khi trigger được kích hoạt, tùy thuộc vào kết quả xử lý mà nó chấp nhận

hay không chấp nhận thao tác của người sử dụng, nếu không chấp nhận thao tác của người sử dụng thì nó sẽ đưa ra thơng báo lỗi.

Trong Microsoft Access, các trigger được viét dưới dạng macro sử

dụng ngôn ngữ Microsoft Visual Basic for Applications. Một số hệ quản

trị cơ sở dữ liệu cung cấp một ngôn ngữ đặc biệt để viết các mơ-đun chương trình trigger như PL/SQL của Oracle, Transact SQL ữong

Microsoft SQL Server và Sybase ASE. Một số hệ quản trị cơ sở dữ liệu

có thể sử dụng ngơn ngữ c như DB2.

Ví dụ 2.20: Đoạn Trigger với MS SQL server sau đây sẽ có chức

năng tự động giảm số lượng hàng hiện cỏ khi một mặt hàng nào đó được bán (tức là khi câu lệnh INSERT được thực thi trên bảng

CREATE TRIGGER trg_nhatkybanhang_insert ON NHATKYBANHANG FOR INSERT

AS

UPDATE MATHANG

SET mathang.soluong=mathang.soluong-inserted.soluong FROM

MATHANG

INNER JOIN inserted ON mathang.mahang=inserted.mahang

Một phần của tài liệu Giáo trình Cơ sở dữ liệu (Tập 1): Phần 1 - TS. Nguyễn Thị Thu Thuỷ (Chủ biên) (Trang 62 - 67)