II. Chuyển từ mô hình ER sang mô hình dữ liệu quan hệ

Quan hệ một – một (1:1)

1) Dùng 1 bảng

Về nguyên tắc, quan hệ một – một giữa các thực thể trong mô hình ER có thể được chuyển thành một bảng trong mô hình dữ liệu quan hệ. Ví dụ giả sử một kỹ sư chỉ làm việc trên một dự án và một dự án chỉ được đảm nhiệm bởi một kỹ sư. Chúng ta cũng giả định kỹ sư có thể tham gia một hay không tham gia dự án nào hay một dự án không có kỹ sư thực hiện. Quan hệ này có thể được chuyển thành một bảng như ví dụ sau:

MAKSTENKSMADATENDA
12KellyX99Venus
34RossS03Mercury
56SmithZ22Apollo

Lúc này có hai khóa ứng viên là MAKS và MADA có thể đóng vai trò khóa chính cho bảng. Nếu quan hệ có tính hai chiều (như dữ liệu minh họa bảng trên) nghĩa là một kỹ sư bắt buộc phải đảm làm việc trên một dự án và một dự án phải đảm bảo một kỹ sư thì khóa chính trong trường hợp này có thể là một trong hai khóa ứng viên hay cả hai, miễn sao thuận tiện.

Trường hợp quan hệ là một chiều, nghĩa là một chiều là bắt buộc (giá trị khác null) và một chiều tùy ý (có thể là null) thì chọn khóa ưu tiên chiều bắt buộc. Ví dụ bảng dữ liệu KYSU-DUAN như sau:

MAKSTENKSMADATENDA
12KellyX99Venus
34RossS03Mercury
45JonesNullNull
56SmithZ22Apollo

Trong bảng trên kỹ sư Jones không tham gia dự án nào và giá trị MADA là Null nên MADA không thể là khóa chính (khóa chính bắt buộc khác Null). Khóa chính lúc này là MAKS.

Một trường hợp chiều ngược lại là một dự án không có kỹ sư nào thực hiện

MAKSTENKSMADATENDA
12KellyX99Venus
34RossS03Mercury
NullNullT15Zeus
56SmithZ22Apollo

Khóa chính trong trường hợp này là MADA.

1) Dùng 2 bảng

Được sử dụng phổ biến. Hai bảng có quan hệ với nhau thông qua giá trị một (hay nhiều) cột chung gọi là toàn vẹn hay ràng buộc tham chiếu (xem lại khóa chính, khóa ngoại và toàn vẹn tham chiếu trong mục I).

Ví dụ chúng ta có bảng KYSU

MAKSTENKSMADA
12KellyX99
34RossS03
56SmithZ22

Và bảng DUAN

MADATENDA
X99Venus
Z22Apollo
S03Mercury

MADA là khóa chính từ bảng DUAN nhưng là khóa ngoại trong bảng KYSU.

Dùng 2 bảng thông quan toàn vẹn tham chiếu là cách thức cơ bản xử lý quan hệ một – nhiều đề cập ngay sau đây.

Quan hệ một – nhiều (1:n)

1) Dùng 2 bảng

Là cách thức cơ bản thông qua ràng buộc (toàn vẹn) tham chiếu. Ví dụ một kỹ sư chỉ đảm nhiệm một dự án nhưng một dự án có thể được thực hiện bởi nhiều kỹ sư, các bảng KYSU và DUAN như sau:

Bảng KYSU

MAKSTENKSMADA
12KellyX99
34RossS03
56SmithZ22

Bảng DUAN

MADATENDA
X99Venus
Z22Apollo
S03Mercury

MADA là khóa chính từ bảng DUAN nhưng là khóa ngoại trong bảng KYSU.

Chú ý: Khóa ngoại (FK) sẽ được đặt trong bảng hướng “nhiều” (KYSU) và là khóa chính trong bảng hướng “một” (DUAN). Đây là nguyên tắc quan trọng cần chú ý cho những người bắt đầu làm quen mô hình dữ liệu quan hệ.

2) Dùng 3 bảng

Cách này có thể được sử dụng nhưng không được khuyên dùng trong quan hệ một – nhiều. Cách dùng 3 bảng là trọng tâm trong việc xử lý quan hệ nhiều – nhiều được đề cập ngay sau đây.

Quan hệ nhiều – nhiều (n:n)

1) Dùng 3 bảng

Là cách thức tùy chọn trong quan hệ một – nhiều nhưng là bắt buộc trong quan hệ nhiều – nhiều.

Một quan hệ nhiều – nhiều không được phép tồn tại trong các hệ quản trị cơ sở dữ liệu (Access, SQL Server, MySQL,…) và vì lý do này mà các quan hệ nhiều – nhiều bắt buộc phải chuyển sang các quan hệ một – nhiều (hay nhiều – một).

Xét lại quan hệ KYSU – DUAN với giả định rằng (trong thực tế) mỗi kỹ sư có thể làm nhiều dự án và mỗi dự án có thể được đảm nhiệm bởi nhiều kỹ sư. Mô hình ERD như sau:

Lúc này cần thêm một thực thể trung gian là Hợp đồng để chuyển ERD sang quan hệ nhiều nhiều:

Trong mô hình dữ liệu quan hệ chúng ta dùng 3 bảng tương ứng là KYSU, HOPDONG và DUAN. Bảng HOPDONG hình thành từ các cột là khóa chính của bảng KYSU (MAKS) và khóa chính bảng DUAN (MADA)

Bảng KYSU

MAKSTENKS
12Kelly
29Brown
34Ross
56Smith
62Adams

Bảng DUAN

MADATENDA
X99Venus
Z22Apollo
S03Mercury

Bảng HOPDONG

MAKSMADA
12X99
29S03
34S03
34X99
56Z22
62Z22
62S03

Bảng trung gian bên cạnh các cột là khóa chính từ hai bảng quan hệ nhiều – nhiều, chúng ta có thể thêm một hay nhiều cột phụ khác miễn là hợp lý. Ví dụ bảng HOPDONG có thể thêm cột GIOLAMVIEC

Bảng HOPDONG

MAKSMADAGIOLAMVIEC
12X99210
29S0335
34S0390
34X99200
56Z2265
62Z2215
62S0347

Bàn thêm về Khóa chính (PK) – Khóa ngoại (FK)

Sử dụng khóa ngoại (FK) để thể hiện liên kết giữa các bảng. Giá trị khóa ngoại và khóa chính phải như nhau và đây là nguyên tắc toàn vẹn (ràng buộc) tham chiếu. Tuy nhiên, giá trị khóa ngoại có thể là Null nếu quan hệ đó không phụ thuộc như ERD sau:

Tương ứng là các bảng KYSU và DUAN trong mô hình dữ liệu quan hệ

Bảng KYSU

MAKSTENKSMADA
12KellyX99
34RossS03
56SmithNull

Bảng DUAN

MADATENDA
X99Venus
Z22Apollo
S03Mercury

Một kỹ sư có thể tham gia dự án hoặc không (kỹ sư Smith có MADA là Null). MADA là khóa ngoại của bảng KYSU.

Các kỹ thuật bổ sung

Chọn khóa chính

Khóa chính có thể được chọn từ các khóa ứng viên. Tuy nhiên, trong các hệ quản trị cơ sở dữ liệu có một kỹ thuật phổ biến gọi là bộ đếm tuần tự (sequential counter) cho phép phát sinh ra các giá trị khóa duy nhất. Trong Access có kiểu dữ liệu gọi là Autonumber, trong SQL Server có thể chọn kiểu dữ liệu int, kế tiếp trong cửa sổ Column properties tìm đến Identity Specification đảm bảo chọn Yes cho Is Identity và 1 cho Identity Increment

Các thuộc tính đa trị (Multi-valued attributes)

Ví dụ chúng ta có thực thể Lập trình viên với các thuộc tính mã nhân viên, tên nhân viên, và ngôn ngữ lập trình

Nếu lập trình viên thông thạo nhiều ngôn ngữ lập trình thì thuộc tính này gọi là thuộc tính đa trị. Các thuộc tính đa trị có thể được biểu diễn nhiều giá trị trong một cột của mô hình dữ liệu quan hệ nhưng sẽ gây phức tạp khi truy vấn dữ dữ liệu (dùng ngôn ngữ truy vấn SQL sẽ được tìm hiểu chi tiết trong một bài khác).

Một trong những giải pháp xử lý các thuộc tính đa trị là chuyển nó đến một thực thể mới, ví dụ thực thể Kinh nghiệm như ERD sau:

Để ý rằng, thuộc tính mà chúng ta dự định chọn là khóa chính từ thực thể Lập trình viên là Mã nhân viên sẽ là một trong những thuộc tính của thực thể mới (Kinh nghiệm) và thuộc tính còn lại chính là thuộc tính đa trị (Ngôn ngữ lập trình). Trong mô hình dữ liệu quan hệ sẽ trông như sau:

Lập trình viên

Mã nhân viênTên nhân viênNăm kinh nghiệmMã dự án
127Jones4P001
258Green8P001
361Allen2P002
677Orr10P001
780Grant4P002

Kinh nghiệm

Mã nhân viênNgôn ngữ lập trình
127Oracle
258Oracle
258Access
361C++
361HTML
361Java
677HTML
677Java
780Oracle
Các thuộc tính phụ thuộc yếu tố thời gian (Time-varying attributes)

Thuộc tính có giá trị thay đổi theo thời gian cũng cần được xử lý tương tự thuộc tính đa trị. Ví dụ hệ thống quản lý đầu tư cổ phiếu cần lưu trữ thông tin lịch sử sự thay đổi về giá của các cổ phiếu trên thị trường chứng khoán. Căn cứ vào sự biến động về gia theo thời gian để các nhà đầu tư có kế hoạch mua – bán hợp lý nhất.