[Công nghệ Thông tin] -- [Web] -- [Công nghệ phần mềm] -- [PhoThong] -- [Đăng ký các khóa học] -- [Langbiang's Portfolio] -- [Học viên cũ] -- [10.000 giờ]
--------------- <> -----------------
---  KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM --->>>  CÁC KHÓA HỌC...
---  Nhận làm website, web app, chạy quảng cáo, digital marketing --->>>  LIÊN HỆ...

Tìm kiếm trong Blog

CSDL_Thực hành (5) - Tạo khóa ngoại, nhập liệu

Bài trước: CSDL_Thực hành (4) - Tạo CSDL, bảng

-----

5. Tạo khóa ngoại, nhập liệu

5.1 Khóa chính và Khóa ngoại

Khóa (key) là gì?

Trong cơ sở dữ liệu quan hệ, "khóa" là một hoặc một tập hợp các thuộc tính (cột) trong một bảng (quan hệ), được sử dụng để xác định duy nhất một bản ghi (hàng) trong bảng đó hoặc để liên kết các bảng với nhau.

Khóa chính (primary key) là gì?

- Là khóa dùng để xác định duy nhất mỗi bản ghi trong một bảng.

- Mỗi bảng chỉ có một khóa chính.

- Giá trị của khóa chính không được trùng lặp và không được mang giá trị NULL.

- Ví dụ: Mã nhân viên (MANV) trong bảng Nhân viên.

Khóa ngoại (foreign key) là gì?

- Là khóa được sử dụng để liên kết hai bảng với nhau.

- Khóa ngoại của một bảng tham chiếu đến khóa chính của một bảng khác.

- Khóa ngoại giúp đảm bảo tính toàn vẹn tham chiếu giữa các bảng.

- Ví dụ: Mã chi nhánh (MSCN) trong bảng Nhân viên, tham chiếu đến Mã chi nhánh (MSCN) trong bảng Chi nhánh.

Thực hành tạo Khóa chính

Để tạo Khóa chính, có 2 cách: [1] tạo khóa chính khi tạo bảng (được sử dụng nhiều, bạn nên dùng cách này) và [2] tạo khóa chính sau khi tạo bảng. 

Cú pháp: sử dụng từ khóa PRIMARY KEY trong lúc tạo bảng

CREATE TABLE tên_bảng 

(tên_cột kiểu_dữ_liệu PRIMARY KEY, 

... các cột khác 

)

Ví dụ:

---Tạo bảng NhanVien

Create table NhanVien

(MaNV   char(4)primary key,

… các cột khác

)

Thực hành tạo Khóa ngoại

Để tạo Khóa ngoại, có 2 cách: [1] tạo khóa ngoại khi tạo bảng (được sử dụng nhiều, bạn nên dùng cách này) và [2] tạo khóa ngoại sau khi tạo bảng. 

Cú pháp tạo khóa ngoại khi tạo bảng:

CREATE TABLE tên_bảng 

(tên_cột kiểu_dữ_liệu, 

... các cột khác 

Tên_cột kiểu_dữ_liệu REFERENCES tên_bảng_tham_chiếu(tên_cột_tham_chiếu) 

)

Ví dụ:

---Tạo bảng NhanVien

Create table NhanVien

(MaNV   char(4) primary key,

MSCN char(2) references ChiNhanh(MSCN) --khai báo khóa ngoại

)

Cú pháp tạo Khóa ngoại sau khi tạo bảng:

- Bạn sử dụng cách này, khi muốn thêm khóa ngoại vào một bảng đã tồn tại.

Cú pháp:

ALTER TABLE tên_bảng ADD CONSTRAINT 

tên_ràng_buộc FOREIGN KEY (tên_cột) REFERENCES tên_bảng_tham_chiếu(tên_cột_tham_chiếu)

Ví dụ:

Trong CSDL Lab01_QLNV, chúng ta đã tạo xong các bảng. Do vậy, chúng ta sẽ sử dụng cú pháp này để tạo các Khóa ngoại cho các bảng.

Trong bảng NhanVien, tạo khóa ngoại cho cột MSCN tham chiếu tới cột MSCN của bảng ChiNhanh.

Trong cửa sổ SQLQuery, viết và chạy lệnh SQL sau (viết vào cuối tập tin):

---Tạo khóa ngoại cho bảng NhanVien tham chiếu tới ChiNhanh

alter table NhanVien add constraint

FK_NhanVien_ChiNhanh foreign key (MSCN) references ChiNhanh(MSCN)

Xem Khóa chính và khóa ngoại của bảng:

- Trong giao diện SSMS, cửa sổ Object Explorer > chọn CSDL (ví dụ Lab01_QLNV)

- Mở rộng mục Tables > chọn một bảng cụ thể (ví dụ NhanVien)

- Mở rộng bảng NhanVien > mở rộng mục Keys để xem khóa chính và khóa ngoại của bảng. Khóa chính sẽ bắt đầu bằng tiền tố PK_. PK là viết tắt của primary key. Tương tự, khóa ngoại là FK_. FK là viết tắt của foreign key.

Trong bảng NhanVienKyNang, tạo 2 khóa ngoại cho cột MANV và MSKN

---Tạo 2 khóa ngoại cho bảng NhanVienKyNang

alter table NhanVienKyNang 

add constraint FK_NhanVienKyNang_NhanVien foreign key (MANV) references NhanVien(MANV)

alter table NhanVienKyNang

add constraint FK_NhanVienKyNang_KyNang foreign key (MSKN) references KyNang(MSKN)

Vậy là chúng ta đã tạo xong các bảng, đã thiết lập các ràng buộc dữ liệu của các cột, thiết lập khóa chính, khóa ngoại. Nghĩa là đã định nghĩa xong Mô hình dữ liệu theo kiểu quan hệ.

Công việc tiếp theo là nhập dữ liệu vào các bảng.

5.2 Nhập dữ liệu vào bảng

Một số bảng dữ liệu mẫu:

Bảng ChiNhanh

ChiNhanh

MSCN

TenCN

01

Quận 1

02

Quận 5

03

Bình Thạnh

Bảng KyNang

KyNang

MSKN

TenKN

01

Word

02

Excel

03

Access

04

PowerPoint

05

SPSS

Bảng NhanVienKyNang

NhanVienKyNang

MANV

MSKN

MucDo

0001

01

2

0001

02

1

0002

01

2

0002

03

2

0003

02

2

0003

03

1

0004

01

5

0004

02

4

0004

03

1

0004

04

3

0004

05

4

0005

02

4

0005

04

4

0006

05

4

0006

02

4

0006

03

2

0007

03

4

0007

04

3

Bảng NhanVien

NhanVien

MANV

Ho

Ten

NgaySinh

NgayVaoLam

MSCN

0001

Lê Văn

Minh

10/06/1960

02/05/1986

01

0002

Nguyễn Thị

Mai

20/04/1970

04/07/2001

01

0003

Lê Anh

Tuấn

25/06/1975

01/09/1982

02

0004

Vương Tuấn

25/03/1960

12/01/1986

02

0005

Lý Anh

Hân

01/12/1980

15/05/2004

02

0006

Phan Lê 

Tuấn

04/06/1976

25/10/2002

03

0007

Lê Tuấn

15/08/1975

15/08/2000

03

Để nhập dữ liệu cho bảng bạn có thể sử dụng [1] giao diện đồ họa của SSMS hoặc [2] lệnh SQL.

- [1] Nhập liệu bằng SSMS: chuột phải vào tên bảng > chọn Edit Top 200 Rows > thực hiện nhập liệu

- [2] Nhập liệu bằng lệnh SQL

Khi nhập liệu, bạn cần để ý ràng buộc về khóa ngoại. Bạn chỉ có thể nhập giá trị cho cột khóa ngoại khi giá trị đó đã tồn tại trong cột khóa chính (của bảng chính). Ví dụ: trong bảng NhanVien, bạn không thể nhập giá trị cho cột MSCN là “01” nếu trong bảng ChiNhanh chưa có giá trị “01” ở cột MSCN. Do vậy, thứ tự chèn dữ liệu cho các bảng là quan trọng.

Trong cửa sổ SQLQuery, nhập và chạy các lệnh sau:

----------------NHẬP DỮ LIỆU CHO CÁC BẢNG-------

--Nhập bảng ChiNhanh

insert into ChiNhanh values('01', N'Quận 1')

insert into ChiNhanh values('02', N'Quận 5')

insert into ChiNhanh values('03', N'Bình Thạnh')

Kiểm tra dữ liệu nhập vào bảng:

- Có thể chuột phải vào bảng > chọn Edit Top 200 Rows hoặc Select Top 1000 Rows

- Hoặc dùng lệnh SQL 

-- Xem dữ liệu bảng ChiNhanh

select * from ChiNhanh

Nhập dữ liệu cho bảng NhanVien

--Nhập bảng NhanVien

Set Dateformat dmy --khai báo với SQL nhập ngày tháng theo dạng ngày/tháng/năm

Go

--ký hiệu N đứng trước chuỗi ký tự (ví dụ: N'Lê Văn', N'Minh') được sử dụng để chỉ định rằng chuỗi đó là chuỗi Unicode.

insert into NhanVien values('0001',N'Lê Văn', N'Minh','10/06/1960','02/05/1986','01')

insert into NhanVien values('0002',N'Nguyễn Thị',N'Mai','20/04/1970','04/07/2001','01')

insert into NhanVien values('0003',N'Lê Anh',N'Tuấn','25/06/1975','01/09/1982','02')

insert into NhanVien values('0004',N'Vương Tuấn',N'Vũ','25/03/1975','12/01/1986','02')

insert into NhanVien values('0005',N'Lý Anh',N'Hân','01/12/1980','15/05/2004','02')

insert into NhanVien values('0006',N'Phan Lê',N'Tuấn','04/06/1976','25/10/2002','03')

insert into NhanVien values('0007',N'Lê Tuấn',N'Tú','15/08/1975','15/08/2000','03')

--Xem bảng NhanVien

Select * from NhanVien

Nhập dữ liệu cho bảng KyNang

--Nhập bảng KyNang

insert into KyNang values('01',N'Word')

insert into KyNang values('02',N'Excel')

insert into KyNang values('03',N'Access')

insert into KyNang values('04',N'Power Point')

insert into KyNang values('05',N'SPSS')

--Xem bảng KyNang

Select * from KyNang

Nhập dữ liệu cho bảng NhanVienKyNang

--Nhập bảng nhanvienkynang

insert into NhanVienKyNang values('0001','01',2)

insert into NhanVienKyNang values('0001','02',1)

insert into NhanVienKyNang values('0002','01',2)

insert into NhanVienKyNang values('0002','03',2)

insert into NhanVienKyNang values('0003','02',1)

insert into NhanVienKyNang values('0003','03',2)

insert into NhanVienKyNang values('0004','01',5)

insert into NhanVienKyNang values('0004','02',4)

insert into NhanVienKyNang values('0004','03',1)

insert into NhanVienKyNang values('0004','04',3)

insert into NhanVienKyNang values('0004','05',4)

insert into NhanVienKyNang values('0005','02',4)

insert into NhanVienKyNang values('0005','04',4)

insert into NhanVienKyNang values('0006','05',4)

insert into NhanVienKyNang values('0006','02',4)

insert into NhanVienKyNang values('0006','03',2)

insert into NhanVienKyNang values('0007','03',4)

insert into NhanVienKyNang values('0007','04',3)

--Xem bảng NhanVienKyNang

Select * from NhanVienKyNang

Vậy là chúng ta đã nhập xong dữ liệu cho CSDL.

Bạn nên lưu lại nội dung tập tin SQLQuery (ví dụ đặt tên là Lab01_QLNV.sql), để khi phải chuyển sang một máy tính khác (hoặc cần tạo lại CSDL), bạn chỉ cần chạy lại tập tin SQLQuery là sẽ có CSDL, kèm theo dữ liệu, để có thể thực hiện các câu truy vấn trên dữ liệu.

5.3 Bài tập

Câu 5.1 Khóa chính (primary key) là gì? Phát biểu nào sau đây không đúng?

A. Khóa chính dùng để xác định duy nhất mỗi bản ghi trong một bảng.

B. Giá trị của khóa chính có thể trùng lặp.

C. Mỗi bảng chỉ có một khóa chính.

D. Giá trị của khóa chính không được mang giá trị NULL.

Câu 5.2 Khóa ngoại (foreign key) là gì? Phát biểu nào sau đây không đúng?

A. Khóa ngoại được sử dụng để liên kết hai bảng với nhau.

B. Khóa ngoại của một bảng tham chiếu đến khóa chính của một bảng khác.

C. Khóa ngoại giúp đảm bảo tính toàn vẹn tham chiếu giữa các bảng.

D. Khóa ngoại dùng để xác định duy nhất mỗi bản ghi trong một bảng.

Bài 5.3. Tạo khóa ngoại và nhập dữ liệu cho các bảng trong CSDL Lab01_QLNV.

-----

Cập nhật: 18/3/2025

-----

Bài sau: CSDL_Thực hành (6) - Truy vấn dữ liệu