1. Định nghĩa các thuật ngữ: cơ sở dữ liệu, hệ quản trị cơ sở dữ liệu, hệ cơ sở dữ
19.5.3. Các ràng buộc toàn vẹn (TBTV) và cách tạor àng buộc trên bảng
- NOT NULL - NULL - UNIQUE - DEFAULT - PRIMARYKEY - FOREIGNKEY/REFERENCES - CHECK Ràng buộc CHECK
Ràng buộc CHECK được sử dụng để chỉ định các giá trịhay khuôn dạng dữ liệu có thể được chấp nhận đối với một cột.Trên một cột có thể có nhiều ràng buộc CHECK. Để khai báo ràng buộc CHECK đối với một cột nào đó,ta sử dụng cú pháp như sau:
[CONSTRAINT constraint_name] CHECK (expression)
Trong đó expression là một biểu thức logic quy định giá trị hay khuôn dạng của dữ liệu được cho phép. Khi đó, chỉ những giá trị dữ liệu nào làm cho expression nhận giá trị đúng mới được chấp nhận.
Ví dụ: Khi tạo bảng NHANVIEN, để quy định số điện thoại của nhân viên có dạng’######’(chẳng hạn 713153) chúng ta sẽ viết câu lệnh như sau:
CREATE TABLE NHANVIEN( MANV CHAR(9), HONV VARCHAR(10), TENLOT VARCHAR(20), TENNV VARCHAR(10), NGSINH DATETIME, DCHI VARCHAR(50), PHAI CHAR(3), LUONG INT, MA_NQL CHAR(9), PHG INT,
DIENTHOAI CHAR(6) NULL constraint check_dienthoai CHECK (DIENTHOAI like '[0-9][0-9][0-9][0-9][0-9] [0-9]'))
Đặt tên ràng buộc
CREATE TABLE NHANVIEN(
HONV VARCHAR(10) CONSTRAINT NV_HONV_NN NOT NULL,
TENLOT VARCHAR(20) NOT NULL, TENNV VARCHAR(10) NOT NULL,
MANV CHAR(9) CONSTRAINT NV_MANV_PK PRIMARY KEY,
NGAYSINH DATETIME, DCHI VARCHAR(50),
PHAI CHAR(3) CONSTRAINT NV_PHAI_CHK CHECK(PHAI IN(‘Nam’,’Nu’)),
LUONG INT CONSTRAINT NV_LUONG_DF DEFAULT(10000),
PHG INT )
Ràng buộc DEFAULT
Ràng buộc DEFAULT dược sử dụng để quy định cho một
cột.Giá trị này sẽ tự động được gán cho cột này khi người sử dụng bổ sung một bản ghi mà không chỉ định giá trị cho cột.Trên mỗi cột chỉ có thể có nhiều nhất một ráng buộc DEFAULT(tức là chỉ có thể có một giá trị mặc định).
Để khai báo một giá trị mặc định cho một cột, ta cho chỉ định một ràng buộc DEFAULT cho một cột bằng cách sử dụng cú pháp sau:
[CONSTRAINT constraint_name] DEFAULT{const_expression
|nonarguments_function |NULL}
Câu lệnh dưới đây chỉ định giá trị mặc định là’khong biet’cho cột address trong bảng Person
CREATE TABLE Person( LastName varchar,
FirstName varchar,
Address varchar default ‘khong biet’, Age int )
Ràng buộc PRIMARY KEY
Ràng buộc PRIMARY KEY được dử dụng để định nghĩa khóa chính của bảng. Một ràng buộc PRIMARY KEY đảm bảo không có giá trị trùng lặp được đưa vào trong các cột. Hay nói cách khác, giá trị của khóa chính sẽ giúp cho ta xác định được duy nhất một dòng(bản ghi) trong bảng dữ liệu. Một bảng ghi chỉ có duy nhất một khóa chính và bản thân khóa chính không chấp nhận giá trị NULL. Ràng buộc PRIMARY KEY là cơ sở cho việc dảm bảo tính toàn vẹn thực thể cũng như toàn vẹn tham chiếu.
Để khai báo một ràng buộc PRIMARY KEY, bạn sử dụng cú pháp sau:
[CONSTRAINT constraint_name]
PRIMARY KEY[ ( colname[ ,colname2[…, colname16] ] ) ] Nếu khóa chính của một bảng chỉ là một cột, khi đó bạn cần thiết phải chỉ dịnh danh sách các cột (sử dụng ràng buộc ở mức cột). Trong trường hợp khóa chính là một tập hợp từ hai cột trở lên, bạn phải chỉ định danh các cột(sử dụng ràng buộc ở mức bảng).
Ràng buộc FOREIGN KEY
Các bảng bên trong một CSDL thường có mối quan hệ với nhau.Các mối quan hệ này được xác định dựa trên tính bằng nhau giữa một hay nhiều trường của bảng này với một hay nhiều trường cảu bảng khác. Nếu một hay nhiều cột nào đócủa một bảng có giá trị được xác định từ một hay nhiều trường khóa của bảng khác thì các cột đó được gọi là có ràng buộc khóa ngoại (foreign key). Các ràng buộc FOREIGN KEY được sử dụng với các ràng buộc PRIMARY KEY và UNIQUE nhằm đảm bảo tính toàn vẹn tham chiếu giữa các bảng được chỉ định.
Để khai báo khóa ngoại, ta sử dụng cú pháp như sau: [CONSTRAINT constraint_name]
[FOREIGN KEY (colname[ ,colname2[...,colname16] ] ) ] REFERENCES reference_table [ (ref_colname
[, ref_colname2
[...,ref_colname16] ] ) ] Ví dụ: Tạo hai bảng NHANVIEN(MANV, HOTEN, NGAYSINH, DIACHI, DIENTHOAI, MADV) và DONVI(MADV, TENDV) theo sơ đồ dưới đây
1
∞
Chúng ta sẽ viết câu lệnh tạo hai bảng trên như sau:
Ràng buộc UNIQUE
Thay vì sử dụng khóa chính, bạn có thể sử dụng ràng buộc UNIQUE để dảm bảo tính toàn vẹn thực thể. Sử dụng ràng buộc UNIQUE trên một (hay nhiều) cột bắt buộc các giá trị dữ liệu trên một (hay nhiều)cột này không được trùng lặp nhau. Để khai báo một ràng buộc UNIQUE, bạn sử dụng cú pháp sau:
[CONSTRAINT constraint_name]
UNIQUE[ colname[ ,colname2[...,colname16] ] ) ]
- Ràng buộc NOT NULL quy định các giá trị khi thêm vào cột trong bảng CSDL phải luôn luôn khác rỗng.
- Ràng buộc NULL cho phép các giá trị rỗng được thêm vào cột trong bảng CSDL, khi tạo bảng nếu không khai báo ràng buộc thì các cột được mặc định ràng buộc NULL.
19.5.4.Lệnh sửa đổi bảng(alter table)
Được dùng để DONVI #MADV TENDV NHANVIEN #MADV HOTEN NGAYSINH DIACHI DIENTHOAI MADV
CREATE TABLEdonvi( madv char(2) primary key, tendv char(20) not null )
CREATE TABLEnhanvien( manv char(10) not null, hoten char(30) not null, ngaysinh datetime null, diachi char(50) null, dienthoai char(6) null,
madv char(2) foreign key (madv)
- Thay đổi cấu trúc bảng
- Thay đổi ràng buộc
Thêm cột
Ví dụ: thêm vào bảng NHANVIENcột NGHENHIEP
ALTER TABLENHANVIENADDNGHENGHIEPCHAR(20)
Xóa cột
Ví dụ: Xóa cột NGHENGHIEP
ALTER TABLENHANVIENDROP COLUMNNGHENGHIEP CHAR(20)
Mở rộng cột
Ví dụ: Thay dổi kiểu dữ liệu của cột DCHI thành VARCHAR (60) ALTER TABLENHANVIENALTER COLUMNDCHI
VARCHAR(60) Lệnh thêm RBTV ALTER TABLE<Ten_bang>ADD CONSTRAINT<Ten_RBTV><RBTV>, CONSTRAINT< Ten_RBTV><RBTV>, ... Lệnh xóa RBTV Ví dụ thay đổi ràng buộc toàn vẹn
Thêm ràng buộc khóa chính, ràng buộc khóa ngoại, ràng buộc mặc định và ràng buộc kiểm tra vào bảng NHANVIEN
ALTER TABLEPHONGBANADD
CONSTRAINTPB_MAPHG_PKPRIMARY KEY(MAPHG), CONSTRAINTPB_TRPHGFOREIGN KEY(TRPHG)
REFERENCESNHANVIEN(MANV)
ALTER TABLE<tên_bảng>ADD
<tên _cột><kiểu_dữ_liệu>[<RBTV>]
ALTER TABLE<tên_bảng>DROP COLUMN <tên_cột>
ALTER TABLE<tên_bảng>ALTER
CONSTRAINTPB_NGNHANCHUC_DFDEFAULT
GETDATE()
FOR NG_NHANCHUC,
CONSTRAINTPB_TENPB_UNI UNIQUE(TENPB)
Lệnh xóa bảng
Được dùng để xóa cấu trúc bảng Tất cả dữ liệu của bảng đều bị xóa. Cú pháp:
DROP TABLE<Ten_bang>
Ví dụ:
DROP TABLE PHONGBAN
Lưuý khi tạo ràng buộc khóa ngoại
- Các cột tham gia vào liên kết giữa 2 bảng phải có cùng kiểu dữ liệu mặc dù tên cột có thể khác nhau.
- Bảng bị tham chiếu phải được tạo trước.
-Lưuý 2 tùy chọn khi tạo ràng buộc khóa ngoại và ràng buộc tham chiếu: Ví dụ: Tạo bảng thuctap
CREATE TABLE thuctap (masv VARCHAR(10), madt VARCHAR(10) , NTT NVARCHAR(25), kqtt FLOAT CONSTRAINT c_kqtt CHECK(kqtt>0 AND kqtt<=10), CONSTRAINT p_tt PRIMARY key(masv,madt),
CONSTRAINT f1_tt FOREIGN key(masv) REFERENCES sv(masv) ON DELETE CASCADE ON UPDATE CASCADE ,
CONSTRAINT f2_tt FOREIGN key(madt) REFERENCES dt(madt) ON DELETE CASCADE ON UPDATE CASCADE )
10.6. Bài tập
Hãy tạo cơ sở dữ liệu có tên là Qly_vtu, tạo tất cả các bảng trong cơ sở dữ liệu quản lý vật tư trênvà các ràng buộc toàn vẹn trên các bảng nếu có.
Bài 20: THỰC HÀNH CÂU LỆNH CREATE DATABASE, CREATE
TABLE, ALTER TABLE, DROP TABLE
Bài 21: THỰC HÀNH RBTV
Bài 22: TRUY VẤN DỮ LIỆU VÀ CẬP NHẬT DỮ LIỆU