Các loại ràng buộc dữ liệu

Một phần của tài liệu TÀI LIỆU DẠY HỌC CƠ SỞ DỮ LIỆU (Trang 77 - 82)

Ràng buộc (Constraint) là các qui tắc được áp đặt cho các cột dữ liệu trên table. Chúng được sử dụng để giới hạn kiểu dữ liệu nhập vào một bảng. Điều này đảm bảo tính chính xác và tính đáng tin cậy cho dữ liệu trong CSDL.

Ràng buộc có thể là mức cột hoặc mức bảng. Ràng buộc cấp độ cột chỉ được áp dụng cho các cột (column), trong khi ràng buộc cấp độ bảng được áp dụng cho toàn bộ bảng (table).

Các ràng buộc có sẵn và được sử dụng phổ biến trong SQL:

Ràng buộc NOT NULL: Bảo đảm một cột không thể có giá trị NULL.

o Theo mặc định, một cột có thể giữ các giá trị NULL. Nếu không muốn một cột có giá trị NULL, thì cần định nghĩa ràng buộc NOT NULL trên cột này.

o Ví dụ 3.1. Tạo một bảng mới với tên SINH_VIEN có 5 cột, trong đó 3 cột là MaSV, HoTenSVNamSinh không nhận giá trị NULL.

CREATE TABLE SINH_VIEN (

MaSV NUMBER(10) NOT NULL,

78

HoTenSV VARCHAR (20) NOT NULL,

NamSinh INT NOT NULL,

GioiTinh CHAR (3), QueQuan VARCHAR (40), PRIMARY KEY (MaSV));

o Nếu bảng đã được tạo, thì thêm một ràng buộc NOT NULL cho cột QueQuan như sau:

ALTER TABLE SINH_VIEN

MODIFY QueQuan VARCHAR (40) NOT NULL;

Ràng buộc DEFAULT: cung cấp một giá trị mặc định cho một cột khi lệnh INSERT INTO không cung cấp một giá trị cụ thể.

o Ví dụ 3.2. Tạo bảng mới với tên SINH_VIEN, cột GioiTinh được thiết lập giá trị mặc định là “Nam”, vì thế, khi lệnh INSERT INTO không cung cấp một giá trị cho cột này, thì theo mặc định, cột này sẽ được thiết lập là “Nam”.

CREATE TABLE SINH_VIEN (

MaSV NUMBER(10) NOT NULL,

HoTenSV VARCHAR (20) NOT NULL,

NamSinh INT NOT NULL,

GioiTinh CHAR (3) DEFAULT “Nam”, QueQuan VARCHAR (40),

PRIMARY KEY (MaSV) );

o Nếu bảng đã được tạo từ trước, thì để thêm một ràng buộc DEFAULT cho cột GioiTinh, ta sẽ viết lệnh như sau:

ALTER TABLE SINH_VIEN

MODIFY GioiTinh CHAR (3) DEFAULT “Nam”;

o Để xóa một ràng buộc DEFAULT, ta sử dụng lệnh SQL sau:

ALTER TABLE SINH_VIEN

ALTER COLUMN GioiTinh DROP DEFAULT;

Ràng buộc UNIQUE: Bảo đảm tất cả giá trị trong một cột là khác nhau.

o Ví dụ 3.3. Trong bảng LOP, ta muốn cột TenLop không trùng nhau.

CREATE TABLE LOP (

MaLop NUMBER(10) NOT NULL,

TenLop VARCHAR (20) NOT NULL UNIQUE, MaKhoa NUMBER(4) NOT NULL,

PRIMARY KEY (MaLop) );

o Nếu bảng đã được tạo, thì để thêm một ràng buộc UNIQUE cho cột MaLop, ta sẽ viết lệnh như sau:

ALTER TABLE LOP

79

MODIFY MaLop NUMBER(10) NOT NULL UNIQUE;

o Ta cũng có thể sử dụng cú pháp sau, mà hỗ trợ việc đặt tên ràng buộc trong nhiều cột.

ALTER TABLE LOP

ADD CONSTRAINT myUniqueConstraint UNIQUE (TenLop, MoTa);

o Để xóa một ràng buộc UNIQUE trong SQL, ta sử dụng:

ALTER TABLE LOP

DROP CONSTRAINT myUniqueConstraint;

Ràng buộc PRIMARY Key: Mỗi hàng/bản ghi được nhận diện một cách duy nhất trong một bảng.

o Một bảng có thể chỉ có một PRIMARY KEY, mà gồm một trường đơn hay nhiều trường. Khi nhiều trường được sử dụng như là một PRIMARY KEY, chúng được gọi là một Composite Key.

o Ví dụ 3.4. Định nghĩa thuộc tính MaLop như là một PRIMARY KEY trong bảng LOP.

CREATE TABLE LOP (

MaLop NUMBER(10) NOT NULL, TenLop VARCHAR (20) NOT NULL, MaKhoa NUMBER(4) NOT NULL, PRIMARY KEY (MaLop) );

o Để tạo một ràng buộc PRIMARY KEY trên cột MaLop khi bảng này đã tồn tại, sử dụng cú pháp SQL sau:

ALTER TABLE LOP ADD PRIMARY KEY (MaLop);

o Lưu ý: Nếu sử dụng lệnh ALTER TABLE để thêm một PRIMARY KEY, thì cột với PRIMARY KEY phải đã được khai báo để không chứa các giá trị NULL (khi bảng được tạo lần đầu tiên).

o Để định nghĩa một ràng buộc PRIMARY KEY trên nhiều cột, sử dụng cú pháp SQL sau:

CREATE TABLE KET_QUA (

MaSV NUMBER(10) NOT NULL,

MaHP NUMBER(10) NOT NULL,

LanThi NUMBER(10),

DiemThi NUMBER(4, 2), PRIMARY KEY (MaSV, MaHP) );

o Để tạo một ràng buộc PRIMARY KEY trên các cột MaSVMaHP khi bảng KET_QUA đã tồn tại, sử dụng cú pháp SQL sau:

ALTER TABLE KET_QUA

ADD CONSTRAINT PK_SVID PRIMARY KEY (MaSV, MaHP);

o Xóa ràng buộc PRIMARY KEY trong SQL

80

ALTER TABLE SINH_VIEN DROP PRIMARY KEY;

Ràng buộc FOREIGN KEY: Mỗi hàng/bản ghi được nhận diện một cách duy nhất trong bất kỳ bảng nào.

o Một FOREIGN KEY là một khóa được sử dụng để liên kết hai bảng với nhau. Đôi khi, nó còn được gọi như là một khóa tham chiếu.

o FOREIGN KEY là một cột hoặc một tổ hợp các cột có các giá trị so khớp với một PRIMARY KEY trong một bảng khác.

o Mối quan hệ giữa 2 bảng so khớp là PRIMARY KEY ở một trong hai bảng với một FOREIGN KEY trong bảng thứ hai.

o Ví dụ 3.5. Giả sử cấu trúc của hai bảng như sau:

Bảng SINH_VIEN:

CREATE TABLE SINH_VIEN (

MaSV NUMBER(10) NOT NULL,

HoTenSV VARCHAR (20) NOT NULL,

NamSinh DATE NOT NULL,

GioiTinh CHAR (3), QueQuan VARCHAR (40), PRIMARY KEY (MaSV) );

Bảng LOP:

CREATE TABLE LOP (

MaLop NUMBER(6) NOT NULL, TenLop VARCHAR (20) NOT NULL, MaKhoa NUMBER(4) NOT NULL, PRIMARY KEY (MaLop) );

o Nếu bảng LOP đã được tạo, và FOREIGN KEY vẫn chưa được thiết lập, ta sử dụng cú pháp sau để xác định một FOREIGN KEY.

ALTER TABLE SINH_VIEN

ADD FOREIGN KEY (MaLop) REFERENCES LOP (MaLop);

o Để xóa một ràng buộc FOREIGN KEY, ta sử dụng cú pháp sau:

ALTER TABLE SINH_VIEN DROP FOREIGN KEY;

Ràng buộc CHECK: Bảo đảm tất cả giá trị trong một cột thỏa mãn các điều kiện nào đó.

o Ràng buộc CHECK cho phép một điều kiện để kiểm tra giá trị đang được nhập vào một bản ghi. Nếu điều kiện được ước lượng là False, thì bản ghi vi phạm ràng buộc này và không được nhập vào trong bảng.

o Ví dụ 3.6. Thêm một ràng buộc CHECK cho cột GioiTinh, để bảng không nhận bất kỳ dữ liệu nào khác “Nam” hoặc “Nữ”.

CREATE TABLE SINH_VIEN (

81

MaSV NUMBER(10) NOT NULL,

HoTenSV VARCHAR (20) NOT NULL,

NamSinh DATE NOT NULL,

GioiTinh CHAR (3) CHECK (“Nam”,”Nữ”), QueQuan VARCHAR (40),

PRIMARY KEY (MaSV) );

o Nếu bảng đã được tạo, thì để thêm một ràng buộc CHECK cho cột GioiTinh, ta viết lệnh như sau:

ALTER TABLE SINH_VIEN

MODIFY GioiTinhCHAR (3) NOT NULL CHECK (“Nam”,”Nữ”);

o Ta có thể sử dụng cú pháp sau, mà hỗ trợ việc đặt ràng buộc trong nhiều cột:

ALTER TABLE SINH_VIEN

ADD CONSTRAINT myCheckConstraint CHECK (GioiTinh=“Nam” OR “Nữ”);

o Để xóa một ràng buộc CHECK, ta sử dụng cú pháp sau:

ALTER TABLE SINH_VIEN

DROP CONSTRAINT myCheckConstraint;

Ràng buộc INDEX: Sử dụng để tạo và lấy dữ liệu từ Database một cách nhanh chóng.

o INDEX (chỉ mục) được sử dụng để tạo và lấy dữ liệu từ Database một các nhanh chóng. INDEX có thể được tạo bởi sử dụng một hay một nhóm các cột trong một bảng. Khi index được tạo, nó được gán một ROWID cho mỗi hàng trước khi nó sắp xếp dữ liệu.

o Các chỉ mục hợp lý sẽ làm tăng hiệu suất trong một Databse lớn, nhưng cần cẩn thận trong khi tạo chỉ mục. Việc lựa chọn các trường phụ thuộc vào những gì đang sử dụng trong các truy vấn SQL.

o Ví dụ 3.7.

CREATE TABLE SINH_VIEN (

MaSV NUMBER(10) NOT NULL,

HoTenSV VARCHAR (20) NOT NULL,

NamSinh DATE NOT NULL,

GioiTinh CHAR (3), QueQuan VARCHAR (40), PRIMARY KEY (MaSV) );

o Có thể tạo chỉ mục trên một hay nhiều cột bởi sử dụng cú pháp:

CREATE INDEX ten_chi_muc ON ten_bang ( cot1, cot2...);

o Để tạo một INDEX trên cột NamSinh, để tối ưu hóa việc tìm kiếm một năm sinh cụ thể trong các sinh viên, sử dụng cú pháp SQL sau:

82

CREATE INDEX idx_ns

ON SINH_VIEN (NamSinh);

o Để xóa một ràng buộc INDEX, sử dụng cú pháp:

ALTER TABLE SINH_VIEN

DROP INDEX idx_ns;

Một phần của tài liệu TÀI LIỆU DẠY HỌC CƠ SỞ DỮ LIỆU (Trang 77 - 82)

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

(188 trang)