Bài tự trắc nghiệm kiến thức Chương 2
Chọn đáp án đúng cho các câu hỏi lựa chọn và câu hỏi điền vào chỗ trống. Chú ý, có thể có nhiều
đáp án đúng cho mỗi câu hỏi.
1. Ví dụ nào sau đây là thực thể?
A. Một khách hàng.
B. Một đơn hàng của khách hàng.
C. Tiền lương của nhân viên.
D. Tên của khách hàng.
2. Ví dụ nào sau đây là thuộc tính?
A. Một nhân viên.
B. Tên của nhân viên.
C. Tiền lương của nhân viên.
D. Một danh sách tên của các nhân viên được sắp xếp theo thứ tự ABC.
3. Dấu hiệu nào sau đây biểu thị cho lực lượng quan hệ bằng “0, 1, hoặc nhiều” trên đường biểu
diễn quan hệ?
A. Một dấu vuông góc và dấu ký hiệu hình vương miện gần vị trí kết thúc của đường quan hệ.
B. Một vòng tròn gần vị trí kết thúc của đường quan hệ và dấu ký hiệu hình vương miện ở
vị trí kết thúc của đường quan hệ.
C. Hai dấu vuông góc gần vị trí kết thúc của đường quan hệ.
D. Một vòng tròn và dấu vuông góc gần vị trí kết thúc của đường quan hệ.
56 trang |
Chia sẻ: vutrong32 | Lượt xem: 1135 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Bài giảng Nhập môn Cơ sở dữ liệu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
xảy ra giữa các thực thể. Trong thực tế, quan hệ
một - một bắt buộc theo cả hai chiều và không có tính khả chuyển thể hiện lỗi thiết kế, song lỗi
này có thể chỉnh sửa được bằng cách kết hợp hai thực thể với nhau. Như vậy, sổ ghi nợ có phải
chỉ là một thông tin thêm của khách hàng? Chúng ta không có ý định thu thập dữ liệu về sổ ghi
nợ; thay vào đó, thông tin về thực thể Account Receivable đơn giản chỉ là thông tin về khách
hàng được thu thập thêm. Mặt khác, nếu chúng ta mua một phần mềm tài chính từ nhà cung cấp
phần mềm độc lập (thực tế, thường là như vậy), gần như chắc chắn phần mềm đó đã kèm theo
một cơ sở dữ liệu được định nghĩa trước, do đó, chúng ta không có lựa chọn nào khác. Chúng ta
không thể thay đổi các thiết kế cơ sở dữ liệu của nhà cung cấp để thêm những dữ liệu chúng ta
muốn có về khách hàng, và cũng không thể làm cho phần mềm của nhà cung cấp đó nhận biết
được những dữ liệu lưu trong cơ sở dữ liệu của chúng ta.
Hình 2-2 cho thấy một quan hệ một - một “đặc biệt” khác, trong đó, hai phía của quan hệ là
tùy chọn (optional), hay đôi khi gọi là có điều kiện (conditional), theo cả hai chiều. Giả sử, chúng
ta đang thiết kế cơ sở dữ liệu cho một đại lý ô tô. Đại lý này phát một số ô tô cho nhân viên,
thường là nhân viên bán hàng, để họ lái thử trong thời gian nhất định. Rõ ràng, đại lý đó không
muốn phát tất cả ô tô cho nhân viên (nếu làm như vậy, họ sẽ không còn ô tô để bán). Chúng ta
có thể hiểu quan hệ giữa thực thể Employee và Automobile như sau: “Tại một thời điểm bất kỳ,
mỗi nhân viên có thể được phát cho một ô tô hoặc không được phát ô tô nào cả; và ngược lại, mỗi
ô tô có thể được gán cho một nhân viên hoặc không nhân viên nào cả”. Hãy chú ý mệnh đề Tại
Employee
Employee ID
First Name
Last Name
Job Title
Automobile
VIN
Make
Model
Year
Color
Employee ID (FK)
Hình 2-2 Quan hệ Employee-automobile.
33Chương 2: Tìm hiểu các thành phần của cơ sở dữ liệu quan hệ
một thời điểm bất kỳ. Nếu một chiếc ô tô được thu hồi lại từ một nhân viên, sau đó được đưa cho
một nhân viên khác thì quan hệ vẫn là một - một. Đó là do khi xem xét các quan hệ, chúng ta luôn
tư duy vấn đề xảy ra trong một thời điểm cụ thể. Và như đã mô tả trước đó, quan hệ Employee-
Automobile là quan hệ khả chuyển.
Quan hệ một - nhiều
Quan hệ một - nhiều (one-to-many relationship) là sự kết hợp giữa hai thực thể, trong đó một thể
hiện bất kỳ của thực thể thứ nhất có thể liên kết với một hoặc nhiều thể hiện của thực thể thứ hai,
và bất kỳ thể hiện nào của thực thể thứ hai đều có thể liên kết với nhiều nhất một thể hiện của
thực thể thứ nhất. Hình 2-1 có hai quan hệ một - nhiều: Quan hệ Customer - Order và quan hệ
Employee - Order. Quan hệ giữa thực thể Customer và Order bắt buộc phải theo một chiều, có thể
được hiểu như sau: “Tại một thời điểm bất kỳ, mỗi khách hàng có thể không có hoặc có nhiều đơn
hàng, và mỗi đơn hàng phải thuộc về một và chỉ một khách hàng”.
Quan hệ một - nhiều rất phổ biến. Trong thực tế, quan hệ một - nhiều là thành phần cơ bản tạo
nên mô hình cơ sở dữ liệu quan hệ, vì các quan hệ trong cơ sở dữ liệu quan hệ đều được cài đặt là
quan hệ một - nhiều. Trong quan hệ một - nhiều, rất ít khi phía “một” là tùy chọn, và càng hiếm
khi phía “nhiều” là bắt buộc, song những tình huống như vậy vẫn xảy ra. Hãy xem xét ví dụ trong
Hình 2-3. Khi đóng một tài khoản khách hàng, chúng ta lưu lại lý do tài khoản bị đóng bằng cách
Hình 2-3 Quan hệ một - nhiều.
Account Closure Reason
Account Closure Reason Code
Description
Customer
Customer ID
Company Name
Address
City
State / Province
Country / Region
Business Phone
Account Closure Reason Code (FK)
Credit Report
Credit Report Number
Report Date
Credit Score
Notes
Customer ID (FK)
34 Nhập môn Cơ sở dữ liệu
sử dụng một mã lý do đóng tài khoản. Vì một số tài khoản có thể đang mở, nên mã lý do đóng tài
khoản là tùy chọn. Chúng ta có thể hiểu quan hệ này như sau: “Tại một thời điểm xác định, mỗi
mã lý do đóng tài khoản có thể được gán cho 0, 1, hoặc nhiều khách hàng, và mỗi khách hàng có
thể có 0 hoặc 1 mã lý do đóng tài khoản”. Giả sử, một công ty có chính sách là không cho phép
mở bất kỳ tài khoản khách hàng nào khi chưa nhận được báo cáo tín dụng về khách hàng đó, và
tất cả các báo cáo đều được lưu trong cơ sở dữ liệu. Điều đó có nghĩa là, một khách hàng bất kỳ
có thể có nhiều hơn một báo cáo tín dụng trong cơ sở dữ liệu. Điều này làm cho quan hệ giữa thực
thể Customer và Credit Report là quan hệ một - nhiều, và bắt buộc theo cả hai chiều. Chúng ta có
thể hiểu quan hệ này như sau: “Tại một thời điểm xác định, mỗi khách hàng có thể có một hoặc
nhiều báo cáo tín dụng, và mỗi báo cáo tín dụng thuộc về một và chỉ một khách hàng”.
Quan hệ nhiều - nhiều
Quan hệ nhiều - nhiều (many-to-many relationship) là sự kết hợp giữa hai thực thể, trong đó một
thể hiện bất kỳ của thực thể thứ nhất có thể liên kết với 0, 1 hoặc nhiều thể hiện của thực thể thứ
hai, và ngược lại. Trở lại Hình 2-1, quan hệ giữa thực thể Order và Product là quan hệ nhiều -
nhiều. Chúng ta có thể hiểu quan hệ này như sau: “Tại một thời điểm bất kỳ, mỗi đơn hàng có thể
không chứa hoặc chứa nhiều sản phẩm, và mỗi sản phẩm có thể xuất hiện trong nhiều đơn hàng
hoặc không xuất hiện trong đơn hàng nào cả”.
Quan hệ này có dữ liệu liên kết, được biểu diễn trong hình thoi ở Hình 2-1. Dữ liệu thuộc
về quan hệ nhiều - nhiều được gọi là dữ liệu tương giao (intersection data). Dữ liệu tương giao
không có ý nghĩa, trừ khi nó được liên kết với cả hai thực thể cùng một lúc. Ví dụ, thuộc tính
Quantity (số lượng) không có ý nghĩa, trừ khi bạn biết khách hàng là ai và sản phẩm là gì. Nếu
nhìn lại Hình 1-7 trong Chương 1, bạn sẽ nhận thấy dữ liệu tương giao trong bảng Order Detail
của mô hình cơ sở dữ liệu Northwind. Vậy tại sao không coi Order Detail là một thực thể? Câu
trả lời rất đơn giản: Order Detail không thỏa mãn định nghĩa của một thực thể. Chúng ta không
thu thập dữ liệu về các dòng chi tiết trong đơn hàng; thay vào đó, những dòng chi tiết này chỉ đơn
giản là thông tin thêm về đơn hàng.
Quan hệ nhiều - nhiều rất phổ biến, và hầu hết đều có dữ liệu tương giao đi kèm. Dù vậy, mô
hình quan hệ không trực tiếp hỗ trợ kiểu quan hệ nhiều - nhiều. Trong thiết kế mức khái niệm,
quan hệ nhiều - nhiều có thể được biểu diễn dễ dàng, bởi thiết kế mức khái niệm hoàn toàn không
phụ thuộc vào bất kỳ công nghệ cụ thể nào. Tuy nhiên, nếu cơ sở dữ liệu được chọn theo mô hình
quan hệ, khi ánh xạ mô hình khái niệm sang mô hình lôgíc tương ứng, bạn cần thay đổi một chút.
Giải pháp là ánh xạ dữ liệu tương giao thành một bảng riêng, gọi là bảng tương giao (intersection
table), đồng thời ánh xạ quan hệ nhiều - nhiều thành hai quan hệ một - nhiều, bảng tương giao sẽ
nằm ở giữa và ở phía “nhiều” trong cả hai quan hệ một - nhiều. Hình 1-7 đưa ra kết quả cho giải
pháp này, bảng Order Detail chứa dữ liệu tương giao và tham gia vào hai quan hệ một - nhiều,
thay thế cho quan hệ nhiều - nhiều ban đầu. Quy trình nhận biết và xử lý các vấn đề liên quan tới
quan hệ nhiều - nhiều sẽ được đề cập chi tiết trong Chương 6.
35Chương 2: Tìm hiểu các thành phần của cơ sở dữ liệu quan hệ
Quan hệ đệ quy
Đến đây, bạn đã tìm hiểu về quan hệ giữa những thể hiện của các thực thể khác nhau. Tuy nhiên,
quan hệ có thể tồn tại giữa các thể hiện cùng loại. Và những quan hệ như vậy được gọi là quan
hệ đệ quy (recursive relationship). Tất cả các quan hệ đã được trình bày (một - một, một - nhiều,
nhiều - nhiều) cũng có thể là quan hệ đệ quy. Hình 2-4 và danh sách dưới đây đưa ra một số ví dụ
về quan hệ đệ quy:
● Một - một Nếu muốn thống kê các nhân viên kết hôn với nhân viên khác, chúng ta mong
muốn mỗi nhân viên có thể kết hôn với một hoặc không nhân viên khác tại một thời điểm.
Employee
Employee ID
Last Name
First Name
Job Title
Spouse Employee ID (FK)
Employee
Employee ID
Last Name
First Name
Job Title
Manager Employee ID (FK)
Part
Part ID
Description
Một - một: Mỗi nhân viên
có thể kết hôn với một nhân
viên khác hoặc không kết
hôn với ai cả.
Một - nhiều: Một nhân viên
có thể quản lý các nhân
viên khác.
Nhiều - nhiều: Mỗi bộ phận
có thể chứa các bộ phận
khác; mỗi bộ phận có thể là
một thành phần của các bộ
phận khác.
Hình 2-4 Các ví dụ về quan hệ đệ quy.
● Một - nhiều Việc theo dõi và quản lý nhân viên là việc làm rất phổ biến. Trong hầu hết
các tổ chức, mọi người thường có một người quản lý cấp trên. Vì vậy, chúng ta thường mong
muốn mỗi nhân viên chịu sự quản lý của một nhân viên khác hoặc không ai cả, và những
người làm quản lý, giám sát lại trực tiếp quản lý một hoặc nhiều nhân viên.
● Nhiều - nhiều Trong môi trường sản xuất, một quan hệ rất phổ biến là quan hệ giữa các bộ
phận tạo thành sản phẩm hoàn thiện. Ví dụ, ổ đĩa CD-ROM trong máy tính cá nhân, bạn có
thể hình dung rằng ổ đĩa CD gồm rất nhiều linh kiện khác nhau, tuy nhiên trong toàn bộ dây
chuyền lắp ráp máy tính, các linh kiện đó không được nhìn thấy và chỉ có một bộ phận duy
nhất là ổ CD. Như vậy, một bộ phận bất kỳ có thể được tạo thành từ nhiều bộ phận khác, đồng
thời bộ phận đó có thể là một thành phần của các bộ phận khác.
Quy tắc nghiệp vụ
Quy tắc nghiệp vụ (business rule) là các chính sách, thủ tục hay những tiêu chuẩn mà một tổ chức
tuân thủ và làm theo. Quy tắc nghiệp vụ rất quan trọng trong thiết kế cơ sở dữ liệu vì nó quyết
định việc đặt các điều khiển lên dữ liệu. Trong Hình 2-1, bạn có thể thấy một quy tắc nghiệp vụ
quy định rằng, các đơn hàng chỉ được chấp nhận khi khách hàng không có dư nợ quá hạn. Hầu
hết quy tắc nghiệp vụ có thể được thực thi thông qua những thủ tục sổ sách mà nhân viên là người
được chỉ đạo làm theo, hoặc thông qua các quy tắc lôgíc trong chương trình ứng dụng. Dù vậy,
quy tắc nghiệp vụ có thể không được tuân thủ - các nhân viên có thể quên hoặc cố tình không làm
36 Nhập môn Cơ sở dữ liệu
theo các thủ tục đã được quy định trong các tài liệu liên quan. Một số người dùng được cấp quyền
đặc biệt có thể cập nhật trực tiếp cơ sở dữ liệu, bỏ qua sự kiểm soát của chương trình ứng dụng.
Cơ sở dữ liệu có thể đóng vai trò “tuyến phòng thủ cuối cùng” bảo vệ dữ liệu và thực thi các quy
tắc nghiệp vụ. Trong cơ sở dữ liệu, quy tắc nghiệp vụ được cài đặt bởi các ràng buộc (constraint),
đó là những quy tắc được định nghĩa chính thức, có tác dụng giới hạn giá trị dữ liệu trong cơ sở
dữ liệu. Những thông tin bổ sung về ràng buộc có thể được tìm thấy trong mục “Ràng buộc” của
chương này. Lưu ý, quy tắc nghiệp vụ thường không xuất hiện trong lược đồ mô hình dữ liệu khái
niệm; quy tắc nghiệp vụ trong Hình 2-1 chỉ có tính chất minh họa. Quy tắc nghiệp vụ thường được
bao gồm trong các tài liệu văn bản đi kèm lược đồ khái niệm.
Bài tập mẫu 2-1 Tìm hiểu về cơ sở dữ liệu Northwind
Trong phần còn lại của chương này cũng như ở Chương 3, chúng ta sử dụng Microsoft Access
2007 và cơ sở dữ liệu Northwind để giải thích cho các khái niệm được đề cập. Trong bài tập mẫu
này, bạn sẽ kết nối tới cơ sở dữ liệu mẫu Northwind theo một trong hai cách: Trên máy tính cá
nhân và thông qua Microsoft Office Online, sau đó làm quen với việc điều hướng trong Access
để dễ dàng theo dõi các bài tập ví dụ ở chương này và Chương 3. Bạn nên biết, Access 2007 có
giao diện và cách sử dụng hoàn toàn khác so với những phiên bản cũ, vì thế, nếu bạn sử dụng
phiên bản Access cũ thì việc theo dõi các ví dụ trong cuốn sách này có thể gặp khó khăn. Tuy
nhiên, có một giải pháp rất đơn giản là Microsoft Office Online, bạn chỉ cần một trình duyệt web
và máy tính có kết nối Internet.
Việc lựa chọn Microsoft Access để giải thích các khái niệm chỉ đơn giản nhằm mục đích
thuận tiện hơn, và ở đây không có ý định so sánh Access 2007 với những sản phẩm khác. Thực
tế, khi đề cập về SQL trong Chương 4, chúng ta sẽ sử dụng một RDBMS khác là Oracle để minh
họa các ví dụ.
Các bước tiến hành
1. Nếu bạn đã có sẵn Microsoft Access 2007, hãy tải và cài đặt cơ sở dữ liệu mẫu Northwind
theo các bước sau đây:
a. Khởi động Access 2007 từ menu Start mà không mở cơ sở dữ liệu.
b. Ở bên trái bảng điều khiển Getting Started, nhấn vào Sample nằm dưới tiêu đề From
Microsoft Office Online.
c. Nhấn vào biểu tượng Northwind 2007.
d. Ở góc dưới cùng bên phải của bảng điều khiển, nhấn vào nút Download và đáp ứng lại
bất kỳ yêu cầu nào xuất hiện.
e. Khi đã kết nối tới cơ sở dữ liệu, một màn hình như trong Hình 2-5 sẽ được hiển thị.
37Chương 2: Tìm hiểu các thành phần của cơ sở dữ liệu quan hệ
2. Nếu chưa cài đặt Microsoft Access 2007, bạn có thể truy cập thông qua Microsoft Office
Online bằng cách sử dụng trình duyệt web và làm theo các bước sau:
a. Nhập địa chỉ URL vào trình duyệt và nhấn ENTER.
b. Tại chính giữa màn hình trình duyệt, tìm và nhấn vào liên kết Try Office 2007 Online.
c. Trong trang tiếp theo, nhấn nút Launch Test Drive và phản hồi lại bất kỳ yêu cầu nào xuất
hiện. Quá trình tải phần mềm và thiết lập kết nối tới cơ sở dữ liệu có thể mất vài phút.
Hình 2-5 Màn hình khởi động của cơ sở dữ liệu Northwind.
d. Trong trang Tutorial Menu, nhấn vào Office Access 2007.
e. Ở lề trái bảng điều khiển Getting Started, hãy nhấn Sample nằm dưới tiêu đề From Mi-
crosoft Online.
f. Tại góc dưới cùng bên trái của bảng điều khiển (bạn có thể phải mở rộng trình duyệt toàn
màn hình mới có thể nhìn thấy được), nhấn nút Download và phản hồi lại bất kỳ yêu cầu
nào xuất hiện. Đặc biệt, hãy chú ý một số điều sau đây:
38 Nhập môn Cơ sở dữ liệu
● Có thể có một hoặc nhiều thông báo về việc chạy các add-on từ trang web. Những
thông báo này xuất hiện ở gần phía trên cùng màn hình, ngay bên dưới dòng các ngôi
sao màu vàng, thường có màu nền vàng nhạt (giống như thông báo Security Warning
trong Hình 2-5).
● Bạn sẽ phải phản hồi lại thông báo Security Warning trong Hình 2-5. Hãy nhấn nút
Options trên dòng thông báo và lựa chọn cho phép kích hoạt nội dung.
● Khi mở cơ sở dữ liệu lần đầu tiên, một màn hình hiển thị yêu cầu bạn đăng nhập. Nếu
điều này xảy ra, hãy nhấn vào tùy chọn Cancel.
g. Khi đã kết nối tới cơ sở dữ liệu, một màn hình như trong Hình 2-5 sẽ hiển thị.
3. Trên dải chức năng (vùng nằm dài theo phía trên cùng của bảng điều khiển, chứa các tùy
chọn), nhấn vào Database Tools và chọn Relationships. Bảng điều khiển Relationships xuất
hiện, hiển thị 18 bảng cùng quan hệ giữa các bảng đó. Các bảng được bố trí rất sát nhau, song
nếu dựa vào những đường nối giữa chúng, bạn có thể dễ dàng quan sát từng quan hệ.
4. Đóng bảng điều khiển Relationships bằng cách nhấn vào nút X ngay bên phải tab Relationships.
5. Mở rộng khung Navigation Pane (nằm dọc lề trái của bảng điều khiển) bằng cách nhấn vào
biểu tượng >> trên cùng của khung. Cơ sở dữ liệu Northwind chứa một số màn hình, báo cáo
và các đối tượng được sử dụng để minh họa cho những tính năng lập trình trong Microsoft
Access 2007. Tuy nhiên, chúng ta sẽ chỉ quan tâm tới những đối tượng liên quan tới cơ sở
dữ liệu (việc lập trình ứng dụng không thuộc phạm vi của cuốn sách này). Mở rộng nhóm
Supporting Objects để quan sát danh sách tất cả các bảng có trong cơ sở dữ liệu Northwind.
Với mỗi bảng, bạn có thể nhấn chuột phải vào tên bảng và chọn Open để xem nội dung của
bảng, hoặc Design View để xem định nghĩa của bảng. Bạn không cần hiểu mọi thứ vào thời
điểm này - các bảng điều khiển trên sẽ được giới thiệu chi tiết ở những phần tiếp theo.
6. Đóng Microsoft Access 2007 (hoặc Office 2007 Online và cửa sổ trình duyệt).
Tổng kết bài tập mẫu
Bạn vừa truy cập thành công tới cơ sở dữ liệu mẫu Northwind sẽ được sử dụng để minh họa cho
các khái niệm trong phần còn lại của chương này cũng như chương tiếp theo. Bạn cũng đã điều
hướng qua bảng điều khiển Relationships và nhóm Supporting Objects trong Navigation Pane.
Các thành phần của thiết kế cơ sở dữ liệu mức
lôgíc/mức vật lý
Thiết kế cơ sở dữ liệu mức lôgíc được thực hiện trong lớp lôgíc theo mô hình ANSI/SPARC đã
đề cập ở Chương 1. Thiết kế cơ sở dữ liệu mức vật lý được thực hiện trong lớp vật lý của mô hình
ANSI/SPARC. Tuy nhiên, lớp vật lý được cài đặt thông qua DBMS, khiến việc phân tách lớp
lôgíc và lớp vật lý trở nên khó khăn. Ví dụ, khi tạo bảng, chúng ta thêm một mệnh đề vào trong
lệnh create table để thông báo cho DBMS biết vị trí cần đặt bảng. Sau đó, DBMS sẽ tự động cấp
phát không gian cho bảng trên các file hệ điều hành đã được chỉ định. Do hầu hết phép cài đặt vật
39Chương 2: Tìm hiểu các thành phần của cơ sở dữ liệu quan hệ
lý đều diễn ra trong định nghĩa DBMS của cấu trúc lôgíc, nên chúng ta sẽ không tách riêng hai
lớp này. Trong quá trình thiết kế cơ sở dữ liệu mức lôgíc, các thuộc tính lưu trữ vật lý (như tên file
hoặc tên không gian bảng (tablespace), vị trí lưu trữ, thông tin về kích thước) có thể được gán cho
từng đối tượng trong cơ sở dữ liệu khi ánh xạ chúng từ mô hình khái niệm, hoặc chúng ta có thể
bỏ qua những thuộc tính đó và thêm vào sau trong quá trình thiết kế vật lý. Để tiết kiệm thời gian,
hầu hết các DBA đều thực hiện việc thiết kế lôgíc song song với việc thiết kế vật lý.
Bảng
Đơn vị lưu trữ cơ bản trong mô hình quan hệ là bảng (table), có cấu trúc hai chiều được tạo thành
từ các hàng và cột. Mỗi hàng tương ứng với một thể hiện của thực thể mà bảng đại diện, và mỗi
cột tương ứng với một thuộc tính của thực thể đó. Quá trình ánh xạ các thực thể trong thiết kế khái
niệm thành các bảng trong thiết kế lôgíc được gọi là chuẩn hóa (normalization), sẽ được đề cập
chi tiết ở Chương 6. Thường thì một thực thể trong mô hình khái niệm sẽ ánh xạ chính xác tới một
bảng tương ứng trong mô hình lôgíc, tuy nhiên, điều này không phải luôn đúng trong mọi trường
hợp. Lý do bạn cần hiểu rõ về quá trình chuẩn hóa là, thông thường, các thực thể được phân chia
thành nhiều bảng, nhưng trong một số ít trường hợp, nhiều thực thể lại được kết hợp thành một
bảng duy nhất. Hình 2-6 liệt kê một phần nội dung của bảng Orders trong cơ sở dữ liệu Northwind.
Bạn cần nhớ, bảng quan hệ là một cấu trúc lưu trữ lôgíc và thường không tồn tại ở dạng bảng
trong lớp vật lý. Khi người quản trị gán một bảng cho một số file hệ điều hành trong lớp vật lý
Hình 2-6 Bảng Orders trong (một phần) cơ sở dữ liệu Northwind.
40 Nhập môn Cơ sở dữ liệu
(trong hầu hết RDBMS, đơn vị lưu trữ lôgíc được tạo từ các file này được gọi là không gian bảng),
nhiều bảng có thể được đặt trong cùng một không gian bảng. Tuy nhiên, các bảng lớn có thể được
đặt trong không gian bảng riêng, hoặc được phân chia vào nhiều không gian bảng khác nhau, điều
này được gọi là phân hoạch (partitioning). Tính năng linh hoạt này thường không được hỗ trợ
trong các RDBMS trên máy tính cá nhân như Microsoft Access.
Mỗi bảng phải được gán một tên duy nhất và do DBA quy định. Độ dài tối đa của tên bảng
rất khác nhau tùy thuộc vào từng sản phẩm RDBMS, từ ít nhất là 18 ký tự tới nhiều nhất là 255 ký
tự. Nên đặt tên bảng mang tính chất mô tả và phản ánh đúng ý nghĩa của thực thể tương ứng trong
thế giới thực. Theo quy ước, một số DBA thường sử dụng danh từ số ít để đặt tên cho các thực thể
và danh từ số nhiều cho tên của các bảng, bạn sẽ thấy quy ước này trong cơ sở dữ liệu Northwind.
(Tôi thích sử dụng danh từ số ít để đặt tên cho cả thực thể và bảng, nhưng rõ ràng, các chuyên gia
khác có những ý kiến ngược lại). Bạn nên thiết lập một tiêu chuẩn đặt tên riêng nhằm đảm bảo
tính thống nhất, nếu không, rất dễ gây nhầm lẫn sau này. Thực tế, Microsoft Access cho phép sử
dụng ký tự khoảng trắng trong tên của bảng và cột, nhưng như vậy được coi là trái với tiêu chuẩn
công nghiệp. Ngoài ra, Microsoft Access, Sybase ASE, và Microsoft SQL Server đều cho phép sử
dụng kết hợp chữ thường và chữ hoa để đặt tên cho các bảng và cột, ví dụ tên bảng OrderDetails.
Trong khi đó, Oracle, DB2, MySQL trên Windows lại tự động chuyển đổi tên các đối tượng thành
dạng chữ hoa, trừ khi những tên đó được đặt trong dấu ngoặc kép (“ ”). Những tên chữ hoa như
ORDERDETAILS rất khó theo dõi, vì thế, việc sử dụng dấu gạch chân để phân tách các từ là một
lựa chọn tốt, phù hợp với tiêu chuẩn công nghiệp. Có thể bạn sẽ muốn một tiêu chuẩn cấm việc sử
dụng các tên, trong đó có cả ký tự khoảng trắng, hoặc tên có cả chữ hoa và chữ thường, vì những
tên như vậy không tuân theo tiêu chuẩn nào và khiến việc chuyển đổi dữ liệu giữa các sản phẩm
RDBMS trở nên khó khăn hơn.
Hỏi chuyên gia
Câu hỏi: Bạn đã đề cập tới cả file và không gian bảng. Vậy chúng có giống nhau
không?
Trả lời: Bạn có thể hình dung không gian bảng giống như một file lôgíc tạo thành một
lớp trừu tượng nằm giữa lớp vật lý và lớp lôgíc, do đó, không gian bảng giúp
tăng tính độc lập dữ liệu lôgíc. Một không gian bảng có thể bao gồm một hoặc
nhiều file vật lý. Và thay vì gán bảng vào file vật lý, bạn gán chúng vào không
gian bảng. Điều này cho phép xử lý linh hoạt file vật lý tạo nên cơ sở dữ liệu.
Ví dụ, khi không gian bảng đầy, người quản trị có một lựa chọn là thêm vào
không gian bảng một file từ một thiết bị lưu trữ khác (như ổ đĩa).
Các cột và kiểu dữ liệu
Như đã đề cập, mỗi cột trong bảng quan hệ biểu diễn một thuộc tính trong mô hình khái niệm.
Cột (column) là đơn vị dữ liệu nhỏ nhất được đặt tên mà có thể được tham chiếu tới trong cơ sở
41Chương 2: Tìm hiểu các thành phần của cơ sở dữ liệu quan hệ
dữ liệu quan hệ. Mỗi cột phải được gán một tên duy nhất (trong phạm vi một bảng) và một kiểu
dữ liệu xác định. Kiểu dữ liệu (data type) là kiểu định dạng cho một cột cụ thể. Kiểu dữ liệu có
những ưu điểm sau:
● Giới hạn dữ liệu trong cột để chỉ chấp nhận những ký tự phù hợp với kiểu dữ liệu (ví dụ, tất
cả các chữ số, hoặc chỉ những ký tự ngày tháng hợp lệ).
● Cung cấp một tập các hành vi hữu dụng cho người dùng cơ sở dữ liệu. Ví dụ, nếu trừ một số
cho một số khác, bạn sẽ có kết quả là một số; nhưng nếu trừ các giá trị ngày tháng cho nhau,
bạn sẽ nhận về một số biểu diễn số ngày nằm giữa hai ngày đó.
● Hỗ trợ RDBMS trong việc lưu trữ hiệu quả dữ liệu trong cột. Ví dụ, số thường được lưu dưới
định dạng số để tiết kiệm không gian lưu trữ hơn so với việc lưu số dưới dạng chuỗi ký tự.
Hình 2-7 đưa ra định nghĩa bảng Orders của Northwind được mở trong Microsoft Access
2007 (chính là bảng được liệt kê ở Hình 2-6). Kiểu dữ liệu của các cột được hiển thị ở cột thứ hai.
Tên kiểu dữ liệu rất trực quan, nhưng nếu thấy khó hiểu, bạn có thể xem định nghĩa của những
kiểu dữ liệu này trên trang trợ giúp của Microsoft Access.
Hình 2-7 Định nghĩa bảng Orders của Northwind (Microsoft Access 2007).
42 Nhập môn Cơ sở dữ liệu
LƯU Ý
Nếu so sánh Hình 2-6 và Hình 2-7, bạn có thể thấy các cột Employee Name và Customer
Name trong Hình 2-6 thay thế cho cột Employee ID và Customer ID trong định nghĩa của bảng
Orders ở Hình 2-7. Đây không phải lỗi mà là một tính năng của Microsoft Access, sẽ được đề
cập trong mục “Ràng buộc tham chiếu” ở phần sau của chương này.
Điều đáng tiếc nhất là các tiêu chuẩn công nghiệp thường tụt hậu so với sự phát triển của
RDBMS. Hầu hết nhà cung cấp đều tự phát triển các tính năng cho sản phẩm của họ trước khi
cùng ngồi lại với những nhà cung cấp khác để đưa ra tiêu chuẩn. Điều này giải thích tại sao lại
có sự khác biệt lớn về kiểu dữ liệu trong các sản phẩm RDBMS. Ngày nay, tiêu chuẩn ANSI/ISO
SQL bao hàm mọi kiểu dữ liệu quan hệ và các nhà cung cấp đều hỗ trợ tất cả hoặc hầu hết kiểu
dữ liệu tiêu chuẩn. Tuy nhiên, mỗi nhà cung cấp vẫn có những “mở rộng” riêng ngoài chuẩn, họ
không chỉ hỗ trợ những kiểu dữ liệu mới hơn các tiêu chuẩn hiện hành mà còn thêm những tính
năng đặc biệt, làm cho sản phẩm của họ trở nên đặc biệt hơn so với đối thủ. Người ta có thể nói
đùa rằng, điều tuyệt vời nhất về các tiêu chuẩn cơ sở dữ liệu là có rất nhiều tiêu chuẩn để lựa
chọn. Về mặt tiêu chuẩn công nghiệp cho cơ sở dữ liệu quan hệ, Microsoft Access có lẽ là một
trong những sản phẩm ít tuân thủ nhất. Do có rất nhiều tiêu chuẩn và mở rộng từ nhà cung cấp,
nên DBA phải là người có kiến thức chuyên sâu về những kiểu dữ liệu DBMS hiện đang hỗ trợ
để triển khai cơ sở dữ liệu thành công. Và dĩ nhiên, phải rất cẩn thận khi chuyển đổi thiết kế lôgíc
giữa các DBMS của những nhà cung cấp khác nhau.
Bảng 2-1 cho thấy các kiểu dữ liệu tương đương từ nhiều nhà cung cấp RDBMS khác nhau.
Tuy nhiên, cần nhớ rằng, những kiểu dữ liệu được liệt kê ở đây không giống hệt nhau mà chỉ
tương đương.Ví dụ, kiểu VARCHAR trong Oracle có thể có độ dài lên tới 4000 ký tự (ở các phiên
bản Oracle8i, độ dài tối đa là 2000 ký tự), tuy nhiên kiểu dữ liệu MEMO tương đương trong Mi-
crosoft Access có thể chứa hàng gigabyte ký tự (khoảng 1 tỷ ký tự)!
Ràng buộc
Ràng buộc (constraint) là quy tắc được đặt vào một đối tượng cơ sở dữ liệu (thường là một bảng
hoặc một cột) để giới hạn giá trị dữ liệu cho phép đối với đối tượng cơ sở dữ liệu đó. Bảng và cột
là các đối tượng quan trọng nhất trong cơ sở dữ liệu quan hệ mà chúng ta sử dụng các ràng buộc
thể cài đặt các quan hệ và quy tắc nghiệp vụ được chỉ ra trong thiết kế lôgíc. Mỗi ràng buộc được
gán một tên duy nhất, cho phép tham chiếu tới ràng buộc đó trong các thông báo lỗi và câu lệnh.
Một thói quen tốt đối với các DBA là luôn gán tên cho ràng buộc, bởi nếu không làm điều này,
RDBMS sẽ tự động sinh ra một tên cho ràng buộc, và tên đó thường không có tính mô tả.
43Chương 2: Tìm hiểu các thành phần của cơ sở dữ liệu quan hệ
Kiểu dữ liệu Microsoft Access Microsoft SQL Server Oracle
Chuỗi ký tự có độ dài
xác định
TEXT CHAR CHAR
Chuỗi ký tự có độ dài
biến đổi
MEMO VARCHAR VARCHAR
Văn bản dài MEMO TEXT CLOB hoặc LONG (Đã
lỗi thời, khuyến cáo
không nên sử dụng)
Số nguyên INTEGER hoặc
LONGINTEGER
INTEGER hoặc SMALLINT hoặc
TINYINT
NUMBER
Số thập phân NUMBER DECIMAL hoặc NUMERIC NUMBER
Tiền tệ CURRENCY MONEY hoặc SMALLMONEY Không có, sử dụng
NUMBER
Ngày/giờ DATE/TIME DATETIME hoặc SMALLDATE-
TIME
DATE hoặc TIME-
STAMP
Bảng 2-1 Những kiểu dữ liệu tương đương trong các sản phẩm RDBMS chính.
Ràng buộc khóa chính
Khóa chính (primary key) là một cột hoặc tập hợp các cột xác định duy nhất một dòng bản ghi
trong bảng. Định danh duy nhất trong thiết kế mức khái niệm được cài đặt bằng một khóa chính
trong thiết kế lôgíc. Biểu tượng hình chiếc khóa ngay cạnh trường Order ID trong Hình 2-7 biểu
thị rằng, cột này được định nghĩa là khóa chính của bảng Orders. Khi định nghĩa khóa chính,
RDBMS sẽ cài đặt một ràng buộc khóa chính để đảm bảo không tồn tại hai dòng trong bảng có
cùng giá trị khóa chính. Chú ý, nếu khóa chính được tạo thành từ nhiều cột, mỗi cột có thể có giá
trị trùng nhau trong bảng, nhưng khi kết hợp những giá trị trong các cột của khóa chính thì giá trị
kết hợp đó phải là duy nhất trong bảng.
Hầu hết các ràng buộc khóa chính được cài đặt trong RDBMS bằng cách sử dụng chỉ mục
(index), một kiểu đối tượng đặc biệt trong cơ sở dữ liệu, cho phép tìm kiếm nhanh các giá trị cột.
Khi thêm một dòng vào bảng, RDBMS tự động tìm kiếm trên chỉ mục để đảm bảo giá trị khóa
chính của dòng mới chưa được sử dụng trong bảng, nếu giá trị khóa đã tồn tại, dòng mới thêm vào
sẽ bị từ chối. Chỉ mục được tìm kiếm nhanh hơn so với bảng; vì thế, việc áp dụng chỉ mục cho
khóa chính trong bảng là rất cần thiết, giúp việc tìm những khóa trùng nhau khi thêm các dòng
mới trở nên nhanh chóng.
Ràng buộc tham chiếu
Để hiểu phương pháp RDBMS sử dụng ràng buộc tham chiếu thực thi các quan hệ, trước tiên, bạn
phải nắm được khái niệm khóa ngoại. Khi quan hệ một - nhiều được thực thi trong bảng, cột hoặc
tập các cột được lưu trong bảng con (bảng tương ứng với phía “nhiều” trong quan hệ) có chức
44 Nhập môn Cơ sở dữ liệu
năng liên kết bảng đó với một bảng cha (bảng tương ứng với phía “một” trong quan hệ), được gọi
là một khóa ngoại (foreign key). Được gọi là khóa ngoại bởi vì cột (các cột) được sao chép từ một
bảng khác (bảng ngoài). Trong bảng Orders (Hình 2-6), cột Employee ID là khóa ngoại liên kết
tới bảng Employees, và cột Customer ID là khóa ngoại liên kết tới bảng Customers.
Trong hầu hết cơ sở dữ liệu quan hệ, khóa ngoại phải là khóa chính của bảng cha, hoặc là
một cột hay tập các cột có định nghĩa một chỉ mục duy nhất. Điều này nhằm mục đích tăng tốc độ
xử lý. Phần lớn mọi người đều tán thành việc cột (các cột) khóa ngoại cùng tên với cột (các cột)
khóa chính trong bảng cha, tuy nhiên vẫn có những ý kiến trái chiều, và lý do được đưa ra là các
tên trùng nhau như vậy sẽ gây khó khăn trong ngôn ngữ truy vấn. Tốt nhất, ngay từ đầu, bạn nên
thiết lập một số tiêu chuẩn và tuân thủ theo những tiêu chuẩn đó trong suốt dự án cơ sở dữ liệ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ế lôgíc. Ràng buộc tham chiếu (referential constraint), còn
được gọi là ràng buộc toà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 có nghĩa là
RDBMS tự động kiểm tra để đảm bảo mỗi giá trị khóa ngoại trong bảng con luôn có một giá trị
khóa chính tương ứng trong bảng cha.
Microsoft Access cung cấp một tính năng rất thú vị đối với các cột khóa ngoại, tuy nhiên, bạn
cần chút ít thời gian để làm quen với tính năng đó. Khi định nghĩa ràng buộc tham chiếu, bạn có
thể định nghĩa một phép tìm kiếm tự động trong các dòng của bảng cha. Ở Hình 2-7, cột thứ ba
trong bảng Orders được hiển thị Customer ID. Tuy nhiên, ở Hình 2-6, bạn có thể thấy cột thứ ba
trong bảng Orders là cột Customer, hiển thị tên khách hàng. Nếu nhấn vào cột Customer ở một
dòng bất kỳ, một menu xổ xuống xuất hiện, cho phép bạn chọn những khách hàng hợp lệ (từ bảng
Customers) làm cha (chủ) của dòng đang chọn trong bảng Orders. Tương tự, cột Employee ID
của bảng Orders hiển thị tên nhân viên. Tính năng này rất dễ sử dụng và tiện lợi cho người dùng,
ngăn không cho phép kết hợp một khách hàng hay một nhân viên không tồn tại với một đơn hàng.
Tuy nhiên, tính năng này lại ẩn đi khóa ngoại, và vì thế, Hình 2-6 không hữu dụng khi minh họa
cho hoạt động của ràng buộc tham chiếu. Hình 2-8 liệt kê các phần tử trong bảng Orders với tính
năng tự động tìm kiếm đã được vô hiệu hóa, bạn có thể thấy các giá trị khóa ngoại thực sự ở cột
Employee ID và Customer ID.
Khi cập nhật bảng Orders (như ở Hình 2-8), RDBMS sẽ thực thi các ràng buộc tham chiếu mà
chúng ta đã định nghĩa trong bảng. Điểm mạnh của ràng buộc cơ sở dữ liệu là chúng được thực
thi tự động, vì thế các ràng buộc luôn có hiệu lực trừ khi bị DBA vô hiệu hóa.
Dưới đây là những sự kiện đặc biệt mà RDBMS phải xử lý khi thực thi các ràng buộc tham chiếu:
45Chương 2: Tìm hiểu các thành phần của cơ sở dữ liệu quan hệ
Hình 2-8 Bảng Orders của Northwind (với các giá trị khóa ngoại).
● Khi bạn chèn một dòng mới vào bảng con, phép chèn sẽ bị từ chối nếu không tồn tại dòng
tương ứng trong bảng cha. Ví dụ, nếu bạn chèn một dòng vào bảng Orders với giá trị cột Em-
ployee ID bằng 12345, RDBMS sẽ kiểm tra xem trong bảng Employees có nhân viên với mã
số (Employee ID) 12345 hay không. Nếu không có, phép chèn sẽ thất bại.
● Khi bạn cập nhật một khóa ngoại trong bảng con, phép cập nhật sẽ bị từ chối nếu giá trị khóa
ngoại mới không tồn tại trong bảng cha. Ví dụ, nếu bạn cố thay đổi giá trị cột Employee ID
(trong bảng Orders) của đơn hàng 48 từ giá trị 4 thành 12345, RDBMS sẽ kiểm tra trong bảng
Employees xem có nhân viên mã số 12345 hay không. Nếu không có, phép cập nhật sẽ thất bại.
● Khi bạn xóa một dòng từ bảng cha, nếu dòng này có liên quan tới một hoặc nhiều dòng khác
trong bảng con thì các dòng trong bảng con cũng phải được xóa, nếu không phép xóa sẽ thất
bại. Hầu hết RDBMS đều cung cấp tùy chọn cho phép tự động xóa các dòng trong bảng con,
gọi là cascading delete. Có thể bạn sẽ băn khoăn vì sao lại phải tự động xóa các dòng trong
bảng con. Hãy cùng xem xét các bảng Orders và Order Details. Nếu một đơn hàng bị xóa, tại
sao không xóa luôn tất cả các dòng chi tiết đơn hàng đó trong cùng một bước? Tuy nhiên, với
bảng Employees, rõ ràng, chúng ta không muốn điều này xảy ra. Nếu xóa nhân viên có mã
số 4 khỏi bảng Employees (có thể do người này không còn là nhân viên nữa), RDBMS phải
kiểm tra xem có dòng nào được gán Employee ID 4 trong bảng Orders hay không, và nếu có
thì phép xóa thất bại. Ở đây, không có bất cứ quy tắc nghiệp vụ nào quy định việc tự động xóa
đơn hàng nếu như một nhân viên rời khỏi công ty.
46 Nhập môn Cơ sở dữ liệu
Trong hầu hết các cơ sở dữ liệu quan hệ, một câu lệnh SQL được sử dụng để định nghĩa một
ràng buộc tham chiếu. SQL sẽ được giới thiệu trong Chương 4. SQL là ngôn ngữ được sử dụng
trong RDBMS để giao tiếp với cơ sở dữ liệu. Nhiều nhà cung cấp cũng hỗ trợ bảng điều khiển giao
diện đồ họa (GUI), cho phép định nghĩa đối tượng cơ sở dữ liệu, ví dụ như ràng buộc tham chiếu.
Ví dụ, trong SQL Server, bảng điều khiển GUI được đặt trong công cụ SQL Server Management
Studio, còn trong Oracle là công cụ SQL Developer. Với Microsoft Access là bảng điều khiển
Relationships, như trong Hình 2-9, được sử dụng để định nghĩa các ràng buộc tham chiếu.
Để tiện theo dõi, trong Hình 2-9 chỉ hiển thị bảng Orders và các bảng cha là Employees và
Customers. Các ràng buộc tham chiếu được biểu diễn bằng những đường nét đậm cùng với ký
tự số 1 nằm gần bảng cha (phía “một”) và ký tự vô cùng (∞) nằm gần bảng con (phía “nhiều”).
Những ràng buộc này được định nghĩa rất đơn giản bằng cách kéo tên của khóa chính trong bảng
Hình 2-9 Bảng điều khiển Relationships của Microsoft Access 2007.
47Chương 2: Tìm hiểu các thành phần của cơ sở dữ liệu quan hệ
Hình 2-10 Bảng điều khiển Edit Relationships của Microsoft Access 2007.
cha vào vị trí tên của khóa ngoại trong bảng con. Sau đó, một cửa sổ pop-up sẽ hiện ra, cho phép
xác định các tùy chọn cho ràng buộc tham chiếu, như trong Hình 2-10.
Ở trên cùng bảng điều khiển Edit Relationships, tên của hai bảng xuất hiện với bảng cha nằm
bên trái và bảng con nằm bên phải. Nếu bạn không biết bảng nào là bảng cha, bảng nào là bảng
con, trường Relationship Type trong bảng này sẽ giúp bạn. Bên dưới tên của mỗi bảng là các dòng
để chọn ra những cột tạo thành khóa chính và khóa ngoại. Hình 2-10 hiển thị cột khóa chính ID
trong bảng Customers và cột khóa ngoại Customer ID trong bảng Orders. Các hộp kiểm (checkbox)
cung cấp một số tùy chọn sau:
● Enforce Referential Integrity Nếu đánh dấu hộp kiểm này, ràng buộc sẽ là bắt buộc; việc
bỏ đánh dấu hộp kiểm này sẽ tắt chế độ bắt buộc ràng buộc.
● Cascade Update Related Fields Nếu đánh dấu hộp kiểm này, mọi thay đổi đối với khóa
chính trong bảng cha sẽ khiến những khóa ngoại tương ứng trong bảng con cũng tự động cập
nhật theo. Tuy nhiên, việc cập nhật khóa chính trong bảng cha ít khi xảy ra.
● Cascade Delete Related Records Nếu đánh dấu hộp kiểm này, khi xóa một dòng trong
bảng cha, các dòng liên quan trong bảng con tự động bị xóa. Đến đây, hãy suy nghĩ thật cẩn
thận. Có những trường hợp bạn nên sử dụng tùy chọn này, như ràng buộc giữa bảng Orders
và bảng Order Details, còn trong một số trường hợp khác, khi sử dụng tùy chọn này sẽ dẫn tới
việc xóa mất những dữ liệu không mong muốn, ví dụ như xóa đi một nhân viên, và tất cả các
đơn hàng do nhân viên đó phụ trách cũng tự động bị xóa khỏi cơ sở dữ liệu.
Bảng tương giao
Quan hệ nhiều - nhiều đã được đề cập ở các phần trước, chỉ ra rằng kiểu quan hệ này không thể
được cài đặt trực tiếp trong cơ sở dữ liệu quan hệ, do đó cần tạo ra một bảng tương giao để có thể
thiết lập được quan hệ nhiều - nhiều. Hình 2-11 đưa ra cách cài đặt của bảng tương giao Order
Details trong Microsoft Access.
48 Nhập môn Cơ sở dữ liệu
Hình 2-11 Bảng tương giao Order Details (Microsoft Access 2007).
Quan hệ nhiều - nhiều giữa đơn hàng và các sản phẩm trong thiết kế khái niệm trở thành
một bảng tương giao (bảng Order Details) trong thiết kế lôgíc. Khi đó, quan hệ nhiều - nhiều
được tách thành hai quan hệ một - nhiều, tại đó bảng tương giao nằm ở phía “nhiều” trong mỗi
quan hệ. Khóa chính của bảng Order Details có thể được tạo bằng cách kết hợp cột Order ID và
Product ID (còn gọi là khóa tự nhiên), trong đó Order ID là khóa ngoại liên kết tới bảng Orders
và Product ID là khóa ngoại liên kết tới bảng Products. Tuy nhiên, trong trường hợp này, nhà thiết
kế chọn phương án thêm vào bảng một cột mới ID làm khóa chính cho bảng Order Details. Khóa
này được gọi là khóa thay thế (surrogate key), bởi nó đã được dùng để thay thế cho khóa tự nhiên
(natural key). Hãy dành chút thời gian để kiểm tra nội dung của bảng tương giao và hai ràng buộc
tham chiếu. Việc hiểu rõ bảng tương giao và các ràng buộc tham chiếu này rất quan trọng, giúp
bạn nắm được cách thức làm việc của cơ sở dữ liệu quan hệ. Sau đây là một số điểm cần xem xét:
● Mỗi dòng trong bảng tương giao Order Details là giao của một sản phẩm và một đơn hàng.
Việc bao gồm cả trường Product Name trong bảng này không có ý nghĩa vì tên sản phẩm là
hoàn toàn như nhau ở mọi trường hợp xuất hiện sản phẩm đó trong một đơn hàng. Tương tự
như vậy, việc thêm cột Customer ID vào bảng Order Details là không cần thiết, vì mỗi dòng
chi tiết trong một đơn hàng đều thuộc về cùng một khách hàng.
49Chương 2: Tìm hiểu các thành phần của cơ sở dữ liệu quan hệ
● Mỗi dòng trong bảng Products có thể có nhiều dòng liên quan trong bảng Order Details (mỗi
sản phẩm có thể được đặt hàng nhiều lần trong các đơn hàng khác nhau), tuy nhiên, mỗi dòng
trong bảng Order Details thuộc về một và chỉ một dòng trong bảng Products.
● Mỗi dòng trong bảng Orders có thể có nhiều dòng liên quan ở bảng Order Details (mỗi đơn
hàng có thể có nhiều dòng chi tiết đơn hàng, mỗi dòng chi tiết cho một sản phẩm), tuy nhiên,
mỗi dòng trong bảng Order Details thuộc về một và chỉ một dòng tại bảng Orders.
Ràng buộc toàn vẹn
Như đã đề cập, những quy tắc nghiệp vụ trong thiết kế khái niệm trở thành các ràng buộc trong
thiết kế lôgíc. 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 toàn vẹn là RDBMS tự động thực
thi những ràng buộc này, tức ràng buộc luôn được duy trì, cho dù bạn kết nối tới cơ sở dữ liệu theo
cách nào đi chăng nữa (trừ khi bạn là DBA). 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.
Ràng buộc NOT NULL
Khi định nghĩa cột trong cơ sở dữ liệu, bạn 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 quan hệ là một mã đặc biệt, được đặt vào
một cột để biểu thị rằng giá trị của cột đó trong hàng là không xác định. Giá trị null không giống
giá trị trống, chuỗi rỗng, hay giá trị không - đây là một mã đặc biệt, không biểu thị ý nghĩa nào
khác trong 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.
Tuy nhiên, đã có nhiều tranh luận về tính hữu ích của giá trị null, vì các cơ sở dữ liệu không
thể cho bạn biết tại sao giá trị lại không xác định. Ví dụ, nếu để giá trị cột Job Title trong bảng
Employees bằng null, bạn không thể biết liệu giá trị đó là null vì giá trị là không xác định (bạn
biết rằng, mỗi nhân viên phải có một chức danh, nhưng lại không biết đó là chức danh gì), chức
danh đó không có (có lẽ một số nhân viên không có chức danh), hay vì không được gán (các nhân
viên nhất định phải có một chức danh, song có thể người quản lý chưa nghĩ ra chức danh cho họ).
Một tình huống khác, do giá trị null là không xác định nên không thể mang ra so sánh với các giá
trị khác, kể cả giá trị null khác, điều này dẫn đến khái niệm lôgíc ba giá trị khi tìm kiếm trong cơ
sở dữ liệu. Khi sử dụng giá trị null, một phép tìm kiếm có thể trả về điều kiện true (nếu cột thỏa
mãn điều kiện tìm kiếm), false (nếu cột không thỏa mãn điều kiện tìm kiếm), hoặc không xác định
(nếu cột có giá trị null). Các nhà phát triển viết chương trình ứng dụng phải xử lý giá trị null như
một trường hợp đặc biệt. Bạn sẽ hiểu thêm về giá trị null trong Chương 4 khi học về SQL.
Trong Microsoft Access, ràng buộc NOT NULL được điều khiển bởi tùy chọn Required trong
cửa sổ thiết kế bảng. Hình 2-12 đưa ra định nghĩa cột Discount trong bảng Order Details. Cột này
là bắt buộc (không được phép nhận giá trị null) vì tùy chọn Required được thiết lập là Yes. Trong
định nghĩa bảng bằng SQL, bạn chỉ cần đặt từ khóa NULL hoặc NOT NULL vào định nghĩa cột.
Hãy chú ý tới các giá trị mặc định! Trong Oracle, nếu bạn bỏ qua ràng buộc NOT NULL thì giá
trị mặc định là NULL, có nghĩa rằng cột đó có thể nhận giá trị null.
50 Nhập môn Cơ sở dữ liệu
Hình 2-12 Cửa sổ định nghĩa bảng Order Details, cột Discount.
Nhưng trong một số RDBMS như DB2, Microsoft SQL Server, và Sybase ASE thì ngược lại: Nếu
bạn bỏ qua ràng buộc NOT NULL, giá trị mặc định là NOT NULL, có nghĩa rằng cột đó không
thể chứa giá trị null.
Ràng buộc CHECK
Ràng buộc CHECK sử dụng một câu lệnh lôgíc đơ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 lôgíc đó phải là giá trị lôgíc true hoặc false, nếu kết quả bằng true, giá trị
cột sẽ được cho phép đặt vào bảng; ngược lại, nếu kết quả bằng false, giá trị cột sẽ bị từ chối và
RDBMS sẽ đưa ra thông báo lỗi tương ứng. Trong Hình 2-12, hãy để ý ràng buộc =0
xuất hiện trong tùy chọn Validation Rule của cột Discount. Quy tắc kiểm tra này không cho phép
giá trị của cột Discount (tỷ lệ chiết khấu) lớn hơn 100% (giá trị 1,00) hoặc nhỏ hơn 0%. Mặc dù
cú pháp của tùy chọn Validation Rule có thể rất khác nhau, song mục đích thì giống nhau. Trong
Oracle SQL, ràng buộc trên được viết như sau:
CHECK (DISCOUNT =0)
51Chương 2: Tìm hiểu các thành phần của cơ sở dữ liệu quan hệ
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. Ví dụ, quy tắc nghiệp vụ
trong Hình 2-1 (Những khách hàng vẫn còn nợ quá hạn không được phép đặt đơn hàng mới) thuộc
nhóm ràng buộc phức tạp vì nó liên quan tới nhiều bảng khác nhau. Nếu kiểm tra thấy dòng trong
bảng Account Receivable của khách hàng đó có số dư nợ quá hạn lớn hơn 0, ta cần ngăn không
cho phép thêm dòng mới vào bảng Orders. Như đã nói, cách thực thi tốt nhất các quy tắc nghiệp
vụ như vậy là thực thi chúng trong lôgíc của ứng dụng. Tuy nhiên, nếu muốn thêm một ràng buộc
và yêu cầu ràng buộc này luôn được thực thi, không phụ thuộc vào cách thức cập nhật cơ sở dữ
liệu, bạn có thể chọn trigger. Trigger là một mô-đun lôgíc lập trình, được kích hoạt khi xảy ra một
sự kiện cụ thể trong cơ sở dữ liệu. Ở ví dụ này, chúng ta muốn trigger kích hoạt khi một dòng mới
được thêm vào bảng Orders. Trigger này có nhiệm vụ lấy về số dư nợ quá hạn (overdue amount)
của khách hàng từ bảng Account Receivable. Nếu số dư nợ quá hạn lớn hơn 0, trigger sẽ phát ra
một lỗi, làm dừng truy vấn thêm dòng, đồng thời trả về thông báo lỗi tương ứng.
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 (VBA). Một số RDBMS cung cấp một ngôn ngữ đặc biệt để viết
các mô-đun chương trình như trigger: PL/SQL của Oracle, Transact SQL trong Microsoft SQL
Server và Sybase ASE. Một số RDBMS khác, ví dụ như DB2, có thể sử dụng ngôn ngữ lập trình
chung như C.
View
View (khung nhìn) là một truy vấn cơ sở dữ liệu được lưu trữ, cung cấp cho người dùng tập dữ
liệu tổng hợp từ một hoặc nhiều bảng trong cơ sở dữ liệu. Nói cách khác, view là một bảng ảo,
vì hình thức và hầu hết thành phần của view đều rất giống bảng, ngoại trừ một điều là view
không chứa dữ liệu (view đơn giản chỉ là một truy vấn được lưu trữ trong cơ sở dữ liệu). View
người dùng tạo thành lớp ngoài trong mô hình ANSI/SPARC. Trong quá trình thiết kế lôgíc,
view được tạo ra bằng cách sử dụng phương pháp tương ứng với một cơ sở dữ liệu cụ thể. Ở
hầu hết các RDBMS, view được tạo ra bằng SQL. Trong Microsoft Access, view không được
hỗ trợ trực tiếp. Tuy nhiên, Access hỗ trợ một kiểu đối tượng tương đương với view là truy vấn
(query), được tạo ra bằng cách sử dụng bảng điều khiển Query. Hình 2-13 cho thấy cách thức
Microsoft Access định nghĩa một view đơn giản để liệt kê tất cả các đơn hàng của khách hàng ở
bang Washington.
52 Nhập môn Cơ sở dữ liệu
Hình 2-13 Định nghĩa view trong Microsoft Access 2007: Liệt kê tất cả các đơn hàng của
khách hàng ở bang Washington.
View trong Hình 2-13 hiển thị hai cột từ bảng Customer cùng ba cột từ bảng Orders. View
này còn so khớp (kết nối) bảng Customers và bảng Orders, đồng thời lọc các dòng để chỉ chọn ra
những đơn hàng của khách hàng ở bang Washington. Phép lọc này được thực hiện bằng cách thiết
lập thuộc tính Criteria trong cột State/Province (= ‘WA’). Chúng ta sẽ tìm hiểu chi tiết về bảng
điều khiển Query của Microsoft Access trong Chương 3. Hình 2-14 hiển thị kết quả thực thi của
truy vấn trên. Mặc dù có hai khách hàng ở Washington, song chỉ một người trong số họ có đơn
hàng, và chỉ có hai đơn hàng xuất hiện trong bảng kết quả.
Các view phục vụ một số chức năng hữu dụng như:
● Ẩn các cột mà người dùng không cần nhìn thấy (hoặc không được phép nhìn thấy).
● Ẩn các dòng mà người dùng không cần nhìn thấy (hoặc không được phép nhìn thấy).
● Ẩn các phép xử lý phức tạp trong cơ sở dữ liệu, ví dụ như phép kết nối.
● Tăng tốc độ xử lý truy vấn (trong một số RDBMS, ví dụ như Microsoft SQL Server).
53Chương 2: Tìm hiểu các thành phần của cơ sở dữ liệu quan hệ
Hình 2-14 Kết quả thực thi của truy vấn được thể hiện trong Hình 2-13.
Bài tự trắc nghiệm kiến thức Chương 2
Chọn đáp án đúng cho các câu hỏi lựa chọn và câu hỏi điền vào chỗ trống. Chú ý, có thể có nhiều
đáp án đúng cho mỗi câu hỏi.
1. Ví dụ nào sau đây là thực thể?
A. Một khách hàng.
B. Một đơn hàng của khách hàng.
C. Tiền lương của nhân viên.
D. Tên của khách hàng.
2. Ví dụ nào sau đây là thuộc tính?
A. Một nhân viên.
B. Tên của nhân viên.
C. Tiền lương của nhân viên.
D. Một danh sách tên của các nhân viên được sắp xếp theo thứ tự ABC.
3. Dấu hiệu nào sau đây biểu thị cho lực lượng quan hệ bằng “0, 1, hoặc nhiều” trên đường biểu
diễn quan hệ?
A. Một dấu vuông góc và dấu ký hiệu hình vương miện gần vị trí kết thúc của đường quan hệ.
B. Một vòng tròn gần vị trí kết thúc của đường quan hệ và dấu ký hiệu hình vương miện ở
vị trí kết thúc của đường quan hệ.
C. Hai dấu vuông góc gần vị trí kết thúc của đường quan hệ.
D. Một vòng tròn và dấu vuông góc gần vị trí kết thúc của đường quan hệ.
54 Nhập môn Cơ sở dữ liệu
4. Đâu là kiểu quan hệ hợp lệ trong cơ sở dữ liệu quan hệ?
A. Một - nhiều.
B. Không - nhiều.
C. Nhiều - nhiều.
D. Một - một.
5. Một sản phẩm có thể được sản xuất tại nhiều nhà máy, và một nhà máy có thể sản xuất nhiều
loại sản phẩm, ví dụ này biểu diễn kiểu quan hệ nào?
A. Một - một.
B. Một - nhiều.
C. Nhiều - nhiều.
D. Đệ quy.
6. Trong các ví dụ dưới đây, ví dụ nào là quan hệ đệ quy?
A. Một đơn vị tổ chức của một phòng ban.
B. Một nhân viên quản lý các nhân viên khác.
C. Một nhân viên quản lý một phòng.
D. Một nhân viên có nhiều người cấp dưới.
7. Ví dụ nào sau đây là quy tắc nghiệp vụ?
A. Một ràng buộc tham chiếu phải tham chiếu tới khóa chính của bảng cha.
B. Tuổi của nhân viên phải lớn hơn hoặc bằng 18.
C. Một truy vấn loại bỏ các cột nhân viên không được phép xem.
D. Các nhân viên có bậc lương dưới 6 không được phép thay đổi các đơn hàng.
8. Một bảng quan hệ
A. Được tạo thành từ các cột và các hàng.
B. Phải được gán một kiểu dữ liệu xác định.
C. Phải được gán một tên duy nhất.
D. Là đơn vị lưu trữ cơ bản trong mô hình quan hệ.
9. Một cột trong bảng quan hệ
A. Phải được gán một kiểu dữ liệu xác định.
B. Phải được gán một tên duy nhất trong bảng.
C. Được kế thừa từ một thực thể trong thiết kế khái niệm.
D. Là đơn vị lưu trữ nhỏ nhất được đặt tên trong cơ sở dữ liệu quan hệ.
10. Một kiểu dữ liệu
A. Hỗ trợ DBMS trong việc lưu trữ dữ liệu hiệu quả.
55Chương 2: Tìm hiểu các thành phần của cơ sở dữ liệu quan hệ
B. Cung cấp tập các hành vi cho một cột hỗ trợ người dùng.
C. Có thể được chọn dựa vào các quy tắc nghiệp vụ đối với một thuộc tính.
D. Giới hạn các ký tự được phép sử dụng trong cột.
11. Một ràng buộc khóa chính
A. Phải tham chiếu tới một hoặc nhiều cột trong một bảng.
B. Phải được định nghĩa cho tất cả các bảng trong cơ sở dữ liệu.
C. Thường được cài đặt bằng cách sử dụng một chỉ mục.
D. Đảm bảo rằng, không có hai dòng nào trong bảng có cùng giá trị khóa chính.
12. Ràng buộc tham chiếu
A. Phải có các cột khóa chính và khóa ngoại cùng tên.
B. Đảm bảo rằng, một giá trị khóa chính không bị trùng nhau trong một bảng.
C. Định nghĩa một quan hệ nhiều - nhiều giữa hai bảng.
D. Đảm bảo rằng, một giá trị khóa ngoại tham chiếu tới một giá trị khóa chính trong bảng cha.
13. Một ràng buộc tham chiếu được định nghĩa
A. Sử dụng bảng điều khiển Relationships trong Microsoft Access.
B. Sử dụng SQL trong hầu hết các cơ sở dữ liệu quan hệ.
C. Sử dụng kiểu dữ liệu tham chiếu cho cột (các cột) khóa ngoại.
D. Sử dụng một trigger.
14. Các kiểu ràng buộc toàn vẹn là
A. Ràng buộc CHECK.
B. Quan hệ một - một.
C. Ràng buộc NOT NULL.
D. Ràng buộc bắt buộc thực thi với các trigger.
15. Bảng ___________ được sử dụng để giải quyết các quan hệ nhiều - nhiều.
16. Một thực thể trong thiết kế mức khái niệm sẽ được ánh xạ thành một ___________ trong thiết
kế mức lôgíc.
17. Một thuộc tính trong thiết kế mức khái niệm sẽ được ánh xạ thành một ___________ trong
thiết kế mức lôgíc.
18. Các phần tử bên ngoài trong mô hình ANSI/SPARC sẽ trở thành ___________ trong thiết kế
mức lôgíc.
19. Một quan hệ trong thiết kế mức khái niệm sẽ được ánh xạ thành một __________ trong thiết
kế mức lôgíc.
20. Một ràng buộc khóa chính (primary key) được thực thi bằng cách sử dụng một __________
trong thiết kế mức lôgíc.
Các file đính kèm theo tài liệu này:
- trichdan_csdl_3818.pdf