Download as pdf or txt
Download as pdf or txt
You are on page 1of 46

9/7/2021 Sử dụng cơ sở dữ liệu quan hệ

Trang 1

CHƯƠNG

Sử dụng quan hệ
Cơ sở dữ liệu
Trong chương này, bạn sẽ tìm hiểu về:

Các nguyên tắc cơ bản về cơ sở dữ liệu quan hệ


Tạo cơ sở dữ liệu và mô tả bảng
Khóa chính
Ký hiệu cấu trúc cơ sở dữ liệu
Làm việc với các bản ghi trong một bảng
Tạo truy vấn
Mối quan hệ giữa các bảng
Thiết kế bàn kém
Dị thường, dạng bình thường và bình thường
Các vấn đề về hiệu suất và bảo mật cơ sở dữ liệu

https://translate.googleusercontent.com/translate_f 1/43
Trang 2

Hiểu các nguyên tắc cơ bản về cơ sở dữ liệu quan hệ


Trong Chương 7, bạn đã biết rằng khi bạn lưu trữ các mục dữ liệu để sử dụng trong hệ thống máy tính,
chúng thường được lưu trữ trong một hệ thống phân cấp dữ liệu được tổ chức như sau:
Ký tự là đơn vị dữ liệu nhỏ nhất có thể sử dụng — ví dụ: một chữ cái, chữ số hoặc
580 dấu chấm câu là một ký tự. Khi các ký tự được lưu trữ trong máy tính, chúng sẽ
được tạo ra từ các mảnh nhỏ hơn được gọi là bit, đại diện cho mạch máy tính. Tuy nhiên,
người dùng hiếm khi quan tâm đến bit; ký tự có ý nghĩa đối với người dùng.

Các trường được hình thành từ các nhóm ký tự và mỗi trường đại diện cho một phần thông tin,
chẳng hạn như firstName , lastName hoặc socialSecurityNumber .

Hồ sơ được hình thành từ các nhóm lĩnh vực liên quan. Các lĩnh vực đi cùng nhau bởi vì chúng
đại diện cho các thuộc tính của một số thực thể, chẳng hạn như nhân viên, khách hàng, mục hàng tồn kho,
hoặc tài khoản ngân hàng.

Các tệp bao gồm các bản ghi liên quan; ví dụ: một tệp có thể chứa một bản ghi cho
từng nhân viên trong một công ty hoặc từng tài khoản tại một ngân hàng.

Hầu hết các tổ chức lưu trữ nhiều tệp chứa dữ liệu họ cần để vận hành
các doanh nghiệp; ví dụ: các doanh nghiệp thường cần duy trì các tệp dữ liệu về nhân viên,
khách hàng, mặt hàng tồn kho và đơn đặt hàng. Nhiều tổ chức sử dụng cơ sở dữ liệu để tổ chức và
điều phối thông tin trong các tệp này. Cơ sở dữ liệu chứa một nhóm các tệp mà một
tổ chức cần hỗ trợ các ứng dụng của mình. Trong cơ sở dữ liệu, các tệp thường được gọi là bảng
vì bạn có thể sắp xếp nội dung của chúng theo hàng và cột. Ví dụ thực tế về những
bảng rất nhiều. Ví dụ, hãy xem xét danh sách trong danh bạ điện thoại. Mỗi danh sách có thể
chứa bốn cột, như thể hiện trong Hình 14-1 — họ, tên, địa chỉ đường phố và
số điện thoại. Bạn có thể thấy rằng mỗi cột đại diện cho một trường và mỗi hàng đại diện cho
một bản ghi. Bạn có thể hình dung một bảng trong cơ sở dữ liệu theo cách tương tự.

Họ Tên đầu tiên Địa chỉ Điện thoại

Abbott William 123 Oak Lane 490-8920

Ackerman Kimberly 467 Elm Drive 787-2781

Adams Stanley 8120 Pine Street 787-0129

Adams màu tím 347 Oak Lane 490-8912

Adams William 12 Second Street 490-3667

Hình 14-1 Một bảng danh bạ điện thoại


© 2015 Cengage Learning

Mảng (được lưu trữ trong bộ nhớ) và bảng (được lưu trữ trong cơ sở dữ liệu) giống nhau ở chỗ cả hai đều chứa các hàng và
cột. Trong một mảng, mỗi phần tử phải có cùng kiểu dữ liệu. Điều này cũng không đúng đối với các bảng được lưu trữ trong
cơ sở dữ liệu.
Trang 3

Hiểu các nguyên tắc cơ bản về cơ sở dữ liệu quan hệ

Đôi khi, một bản ghi hoặc hàng còn được gọi là một thực thể; tuy nhiên, nhiều định nghĩa về thực thể tồn tại trong cơ sở dữ liệu
văn bản. Ví dụ: một số nhà phát triển đề cập đến một bảng như một thực thể. Một cột (trường) cũng có thể được gọi là

thuộc tính .

Hình 14-1 bao gồm năm bản ghi, mỗi bản ghi đại diện cho một người duy nhất. Nó tương đối dễ dàng để
581
quét danh sách tên ngắn này để tìm số điện thoại của một người; tất nhiên, danh bạ điện thoại
chứa nhiều bản ghi khác. Các bản ghi theo thứ tự bảng chữ cái theo họ. Một số người dùng
có thể thích các đơn đặt hàng thay thế. Ví dụ: nhân viên tiếp thị qua điện thoại hoặc nhân viên công ty điện thoại
có thể thích sắp xếp hồ sơ theo thứ tự số điện thoại và giao hàng tận nơi
nhân viên bán hàng có thể thích đặt hàng theo địa chỉ đường phố. Sử dụng cơ sở dữ liệu máy tính rất tiện lợi
bởi vì dữ liệu được lưu trữ có thể dễ dàng được sắp xếp và hiển thị để phù hợp với nhu cầu của từng người dùng.
Trừ khi bạn đang sử dụng danh bạ điện thoại cho một thị trấn rất nhỏ, nếu không chỉ riêng họ thường thì không
đủ để xác định một người. Trong ví dụ ở Hình 14-1, ba người có họ
của Adams. Đối với những hồ sơ này, bạn cần kiểm tra tên trước khi có thể xác định
số điện thoại chính xác. Trong một thành phố lớn, nhiều người có thể có cùng một
những cái tên; trong trường hợp đó, bạn cũng có thể cần phải kiểm tra địa chỉ đường phố để xác định một người. Như
với danh bạ điện thoại, hầu hết các bảng cơ sở dữ liệu được máy tính hóa cần phải có một cách để xác định
mỗi bản ghi duy nhất, ngay cả khi nó có nghĩa là sử dụng nhiều cột. Một giá trị duy nhất
xác định một bản ghi được gọi là khóa chính , hay gọi tắt là khóa . Các trường chính thường được định nghĩa là
cột bảng duy nhất, nhưng cũng như với danh bạ điện thoại, các khóa có thể được tạo từ nhiều
cột; một khóa như vậy là khóa ghép , khóa tổng hợp hoặc khóa nối .

Sổ điện thoại được tái bản định kỳ vì đã có những thay đổi — mọi người đã
rời đi hoặc chuyển vào thành phố, dịch vụ bị hủy hoặc thay đổi số điện thoại. Với máy tính
bảng cơ sở dữ liệu, bạn cũng cần thêm, xóa và sửa đổi các bản ghi, mặc dù thường có thêm
tần suất xuất bản nhiều hơn danh bạ điện thoại.

Không phải tất cả dữ liệu đều đơn giản như dữ liệu văn bản được sử dụng trong hầu hết các ví dụ trong chương này. Ví dụ,
các ứng dụng như Facebook và các đốm màu trên cửa hàng YouTube. Một đốm màu là một đối tượng lớn nhị phân, hoặc BLOb, là một
tập hợp dữ liệu nhị phân như hình ảnh, video hoặc clip âm thanh được lưu trữ trong hệ thống cơ sở dữ liệu.

Các bảng cơ sở dữ liệu được máy tính hóa thường chứa hàng nghìn bản ghi hoặc hàng và mỗi hàng
có thể chứa các mục nhập trong hàng chục cột. Xử lý và sắp xếp tất cả dữ liệu trong một
bảng của tổ chức yêu cầu phần mềm phức tạp. Phần mềm quản lý cơ sở dữ liệu là một bộ
trong số các chương trình cho phép người dùng:

Tạo mô tả bảng.
Xác định các khóa.
Thêm, xóa và cập nhật các bản ghi trong bảng.

Sắp xếp các bản ghi trong một bảng để chúng được sắp xếp theo các trường khác nhau.
Viết các câu hỏi chọn bản ghi cụ thể từ một bảng để xem.
Viết câu hỏi kết hợp thông tin từ nhiều bảng. Điều này là có thể bởi vì
phần mềm quản lý cơ sở dữ liệu thiết lập và duy trì các mối quan hệ giữa
Trang 4

các cột trong bảng. Một nhóm các bảng cơ sở dữ liệu mà từ đó bạn có thể tạo
kết nối là một cơ sở dữ liệu quan hệ .

Tạo báo cáo để diễn giải dữ liệu và tạo biểu mẫu để xem và nhập dữ liệu bằng cách sử dụng
màn hình tương tác.
Giữ an toàn cho dữ liệu bằng cách sử dụng các biện pháp bảo mật tinh vi.

Mỗi gói phần mềm quản lý cơ sở dữ liệu hoạt động khác nhau; tuy nhiên, với mỗi, bạn
thực hiện các loại nhiệm vụ giống nhau.

HAI SỰ THẬT & MỘT LỜI NÓI DỐI


Hiểu các nguyên tắc cơ bản về cơ sở dữ liệu quan hệ

1. Tệp bao gồm các bản ghi liên quan và các bản ghi được bao gồm
của các lĩnh vực.

2. Trong cơ sở dữ liệu, các tệp thường được gọi là bảng vì bạn có thể sắp xếp chúng
nội dung trong hàng và cột.

3. Các trường khóa luôn được định nghĩa là một cột trong bảng.

Tạo cơ sở dữ liệu và mô tả bảng


Tạo một cơ sở dữ liệu hữu ích đòi hỏi phải lập kế hoạch và phân tích. Bạn phải quyết định dữ liệu sẽ là gì
được lưu trữ, cách dữ liệu đó sẽ được phân chia giữa các bảng và cách các bảng sẽ liên kết với nhau. Trước
bạn tạo bất kỳ bảng nào, bạn phải tự tạo cơ sở dữ liệu. Với hầu hết các phần mềm cơ sở dữ liệu
các gói, việc tạo cơ sở dữ liệu sẽ chứa các bảng không yêu cầu gì khác hơn là đặt tên cho nó
và chỉ ra vị trí thực, có thể là ổ đĩa cứng, nơi cơ sở dữ liệu sẽ
được lưu trữ. Khi bạn lưu một bảng, thông thường bạn phải cung cấp tên bắt đầu bằng tiền tố
tbl — ví dụ: tblCustomers . Cơ sở dữ liệu của bạn thường chứa đầy nhiều đối tượng—
bảng, biểu mẫu để nhập dữ liệu, báo cáo sắp xếp dữ liệu để xem, truy vấn chọn
tập hợp con dữ liệu để xem, v.v. Sử dụng các quy ước đặt tên, chẳng hạn như bắt đầu mỗi bảng
tên có tiền tố xác định nó như một bảng, giúp bạn theo dõi các đối tượng trong hệ thống của mình.

Khi bạn lưu mô tả bảng, nhiều chương trình quản lý cơ sở dữ liệu đề xuất một bảng chung, mặc định
tên chẳng hạn như Table1. Thông thường, một tên mô tả nhiều hơn sẽ hữu ích hơn khi bạn tạo các đối tượng.
Trang 5

Trước khi bạn có thể nhập dữ liệu vào bảng cơ sở dữ liệu, bạn phải thiết kế bảng. Điều quan trọng là
suy nghĩ cẩn thận về thiết kế ban đầu của một cơ sở dữ liệu. Sau khi cơ sở dữ liệu đã được tạo
và dữ liệu đã được nhập, có thể khó và tốn thời gian để thực hiện các thay đổi.
Tối thiểu, việc thiết kế một bảng yêu cầu bạn chọn các cột cho nó và sau đó cung cấp
tên và kiểu dữ liệu cho mỗi cột. Mô tả bảng gần giống với danh sách
583
các biến mà bạn đã sử dụng với mọi chương trình trong suốt cuốn sách này. Ví dụ, giả sử
bạn đang thiết kế một bảng cơ sở dữ liệu khách hàng. Hình 14-2 cho thấy một số tên cột và dữ liệu
loại bạn có thể sử dụng.

Mô tả bảng trong Hình 14-2 chỉ sử dụng hai


Cột Loại dữ liệu
kiểu dữ liệu — văn bản và số. Các cột văn bản có thể
giữ bất kỳ loại ký tự nào — chữ cái hoặc chữ số.
ID khách hàng bản văn
Các cột số chỉ có thể chứa số.
lastName bản văn Tùy thuộc vào việc quản lý cơ sở dữ liệu
tên đầu tiên bản văn phần mềm, bạn có thể có nhiều hơn nữa
streetAddress bản văn các loại dữ liệu phức tạp theo ý của bạn. Đối với
số
ví dụ, một số phần mềm cơ sở dữ liệu phân chia
cân bằng nợ
kiểu dữ liệu số thành một số danh mục con như
dưới dạng giá trị số nguyên (chỉ số nguyên) và
Hình 14-2 Mô tả bảng khách hàng số chính xác kép (chứa
© 2015 Cengage Learning số thập phân). Các tùy chọn khác có thể bao gồm đặc biệt
danh mục cho số đơn vị tiền tệ (đại diện
đô la và xu), ngày tháng và cột Boolean (biểu thị đúng hoặc sai). Ít nhất, tất cả
phần mềm cơ sở dữ liệu nhận ra sự khác biệt giữa dữ liệu văn bản và dữ liệu số.

Trong suốt cuốn sách này, bạn đã nhận thức được sự khác biệt mà máy tính tạo ra giữa văn bản và
dữ liệu số. Do cách máy tính xử lý dữ liệu, mọi loại phần mềm đều tuân theo sự khác biệt này.
Trong suốt cuốn sách này, thuật ngữ chuỗi đã được sử dụng để mô tả các trường văn bản. Thuật ngữ văn bản được sử dụng trong
chương chỉ vì các gói cơ sở dữ liệu phổ biến sử dụng thuật ngữ này.

Các biến chưa được chỉ định trong các chương trình máy tính có thể trống (chứa giá trị null) hoặc chúng có thể
chứa các giá trị không xác định hoặc rác. Tương tự, các cột trong bảng cơ sở dữ liệu cũng có thể chứa rỗng hoặc không xác định
các giá trị. Khi một trường trong cơ sở dữ liệu chứa giá trị null, điều đó không có nghĩa là trường đó chứa một giá trị 0 hoặc một khoảng trắng; nó
có nghĩa là không có dữ liệu nào được nhập cho trường. Mặc dù null và rỗng được sử dụng đồng nghĩa bởi
nhiều nhà phát triển cơ sở dữ liệu, các thuật ngữ này có ý nghĩa hơi khác đối với một số chuyên gia, chẳng hạn như Visual
Lập trình viên cơ bản.

Mô tả bảng trong Hình 14-2 sử dụng tên cột một từ và vỏ lạc đà, trong
giống như cách mà các tên biến đã được xác định trong cuốn sách này. Nhiều
gói phần mềm cơ sở dữ liệu cho phép các tên cột gồm nhiều từ với các dấu cách nhúng,
nhưng nhiều nhà thiết kế bảng cơ sở dữ liệu thích tên một từ vì chúng giống
tên biến trong mã chương trình máy tính. Ngoài ra, khi bạn viết các chương trình
truy cập vào một bảng cơ sở dữ liệu, các tên trường gồm một từ có thể được sử dụng "nguyên trạng", không có
cú pháp để chỉ ra các tên đại diện cho một trường đơn lẻ. Ngoài ra, khi bạn sử dụng một
từ để gắn nhãn cho từng cột cơ sở dữ liệu, dễ hiểu hơn là một cột hoặc
một số đang được tham chiếu.
Trang 6

Các ID khách hàng cột trong hình 14-2 được định nghĩa dưới dạng văn bản. Nếu số ID khách hàng là
bao gồm hoàn toàn bằng chữ số, cột này cũng có thể được định nghĩa là số. Tuy nhiên, nhiều
các nhà thiết kế cơ sở dữ liệu cảm thấy rằng các cột chỉ nên được định nghĩa là số nếu cần - nghĩa là
chỉ khi chúng có thể được sử dụng trong các phép tính số học. Mô tả trong Hình 14-2 như sau
quy ước này bằng cách khai báo ID khách hàng dưới dạng văn bản.

Nhiều gói phần mềm quản lý cơ sở dữ liệu cho phép bạn thêm mô tả tường thuật về
mỗi cột dữ liệu vào một bảng. Những nhận xét này trở thành một phần của bảng, nhưng không ảnh hưởng đến
cách nó hoạt động; chúng chỉ đơn giản là tài liệu cho những người đang đọc bảng
sự miêu tả. Ví dụ: bạn có thể muốn lưu ý rằng ID khách hàng phải bao gồm
năm chữ số, hoặc số dư đó Không được vượt quá một giới hạn nhất định. Trong một số chương trình cơ sở dữ liệu,
các trường bình luận được gọi là bản ghi nhớ.
Ngoài việc đưa ra nhận xét về các trường, một số phần mềm cơ sở dữ liệu cho phép bạn thực thi
quy tắc nhập dữ liệu cho các trường. Ví dụ: bạn có thể chỉ định rằng các trường nhất định
không được để trống hoặc các giá trị cho trường số phải nằm trong khoảng giá trị cao được chỉ định đến
giới hạn thấp hoặc các giá trị cho trường văn bản phải khớp với một trong một số mục nhập được phép.

HAI SỰ THẬT & MỘT LỜI NÓI DỐI


Tạo cơ sở dữ liệu và mô tả bảng

1. Khi bạn lưu một bảng, thông thường bạn phải cung cấp tên bắt đầu bằng
bảng tiền tố.

2. Thiết kế bảng liên quan đến việc quyết định những cột nào mà bảng của bạn cần, cung cấp
tên cho chúng và cung cấp kiểu dữ liệu cho mỗi cột.

3. Nhiều nhà thiết kế bảng cơ sở dữ liệu thích các tên cột gồm một từ vì chúng
giống với tên biến trong chương trình, chúng có thể dễ dàng sử dụng trong chương trình và
chúng giúp bạn dễ hiểu hơn về việc một hay một số cột đang
được tham chiếu.

Xác định các khóa chính


Trong hầu hết các bảng cơ sở dữ liệu, bạn muốn xác định một cột hoặc một tổ hợp các cột là
khóa chính của bảng. Khóa chính trong bảng là cột làm cho mỗi bản ghi khác nhau
từ tất cả những người khác. Ví dụ, trong bảng khách hàng ở Hình 14-2, sự lựa chọn hợp lý cho một
Trang 7

khóa chính là cột customerID — mỗi bản ghi được nhập vào bảng khách hàng có một
giá trị duy nhất trong cột này. Nhiều khách hàng có thể có cùng tên hoặc họ
(hoặc cả hai) và nhiều khách hàng có thể có cùng địa chỉ đường phố hoặc số dư đến hạn.
Tuy nhiên, mỗi khách hàng sở hữu một ID duy nhất.

Các ví dụ điển hình khác về khóa chính bao gồm:


Mã số sinh viên trong bảng chứa thông tin sinh viên đại học

Một số bộ phận trong bảng có chứa các mục hàng tồn kho
Tên viết tắt của tiểu bang trong bảng chứa thông tin bán hàng cho từng tiểu bang ở Hoa Kỳ
Những trạng thái

Trong một số gói phần mềm cơ sở dữ liệu, chẳng hạn như Microsoft Access, bạn chỉ ra một khóa chính đơn giản bằng cách
chọn tên cột và nhấp vào nút được gắn nhãn bằng biểu tượng chìa khóa.

Trong mỗi ví dụ này, khóa chính xác định duy nhất hàng. Ví dụ, mỗi
sinh viên có một số ID duy nhất do trường đại học chỉ định. Các cột khác trong bảng sinh viên
sẽ không phải là chìa khóa thích hợp — nhiều học sinh có cùng họ, tên, quê quán,
hoặc chuyên ngành. Thông thường, chìa khóa là số. Thông thường, việc gán một số cho mỗi hàng trong bảng là
phương pháp đơn giản và hiệu quả nhất để có được một khóa hữu ích. Tuy nhiên, khóa của bảng có thể là
trường văn bản, như trong ví dụ viết tắt của tiểu bang.
Đôi khi, một số cột có thể đóng vai trò là khóa. Ví dụ, nếu một nhân viên ghi
chứa cả ID nhân viên do công ty chỉ định và số An sinh xã hội, sau đó cả hai
các cột là các khóa ứng viên . Sau khi bạn chọn một khóa chính từ các khóa ứng viên,
các khóa ứng viên còn lại trở thành khóa thay thế . (Nhiều nhà phát triển cơ sở dữ liệu sẽ phản đối
sử dụng số An sinh xã hội làm khóa chính vì các vấn đề về quyền riêng tư.)

Khóa chính quan trọng vì một số lý do:


Bạn có thể định cấu hình phần mềm cơ sở dữ liệu của mình để ngăn nhiều bản ghi chứa
cùng giá trị trong cột này, do đó giúp tránh lỗi nhập dữ liệu.
Bạn có thể sắp xếp các bản ghi của mình theo thứ tự này trước khi hiển thị hoặc in chúng.

Bạn sử dụng cột khóa chính khi thiết lập mối quan hệ giữa bảng này và
những người khác sẽ trở thành một phần của cùng một cơ sở dữ liệu.

Bạn cần hiểu khái niệm về khóa chính khi chuẩn hóa cơ sở dữ liệu—
một khái niệm mà bạn sẽ tìm hiểu thêm ở phần sau của chương này.

Trong một số bảng, khi không có số nhận dạng nào được gán cho các hàng, khóa chính
phải được xây dựng từ nhiều cột, làm cho nó trở thành một khóa ghép. Ví dụ,
xem xét Hình 14-3, có thể được quản trị viên khu nội trú sử dụng để lưu trữ dữ liệu
về sinh viên sống trong khuôn viên trường đại học. Mỗi phòng trong một tòa nhà có một số và hai
học sinh, mỗi học sinh được phân vào giường A hoặc giường B.
Trang 8

đại sảnh phòng Giường lastName tên đầu tiên chính

Adams 101 A Fredricks Madison Hóa học

Adams 101 B Garza Lupe Tâm lý học

Adams 102 A Liu Jennifer CIS

Adams 102 B thợ rèn Pha lê CIS

Màu nâu 101 A Patel Sarita CIS


586
Màu nâu 101 B thợ rèn Margaret Sinh học
Màu nâu 102 A Jefferson Martha Tâm lý học

Màu nâu 102 B Bartlett Donna người Tây Ban Nha

Churchill 101 A Wong Cheryl CIS


Churchill 101 B thợ rèn Madison Hóa học

Churchill 102 A Patel Jennifer Tâm lý học

Churchill 102 B Jones Elizabeth CIS

Hình 14-3 Bảng chứa hồ sơ sinh viên ký túc xá


© 2015 Cengage Learning

Trong Hình 14-3, không một cột nào có thể dùng làm khóa chính. Nhiều sinh viên sống trong cùng một
nội trú, và số phòng giống nhau tồn tại trong các ký túc xá khác nhau. Ngoài ra,
một số sinh viên có cùng họ, tên, hoặc chuyên ngành. Thậm chí có thể là hai
những sinh viên trùng họ, tên, chuyên ngành được xếp vào cùng phòng. Trong này
trường hợp, khóa chính tốt nhất là khóa nhiều cột kết hợp khu nội trú, số phòng,
và số giường ( sảnh , phòng và giường ). “Adams 101 A” xác định một phòng đơn và sinh viên,
cũng như “Churchill 102 B”. Khóa chính phải là bất biến , có nghĩa là một giá trị không
thay đổi trong quá trình hoạt động bình thường. Nói cách khác, trong Hình 14-3, “Adams 102 A” sẽ luôn
liên quan đến một địa điểm cố định, mặc dù cư dân hoặc chuyên ngành của cô ấy có thể thay đổi. Tất nhiên,
nhà trường có thể chọn thay đổi tên của một khu nội trú – ví dụ, để tôn vinh một
ân nhân — nhưng hành động đó sẽ nằm ngoài phạm vi “hoạt động bình thường”.

Để thay thế cho việc chọn ba cột để tạo khóa ghép trong bảng trong
Hình 14-3, nhiều nhà thiết kế cơ sở dữ liệu muốn rằng trường đại học đánh số duy nhất mỗi
giường trong khuôn viên trường và thêm một cột mới cho nó. Nhiều nhà thiết kế cơ sở dữ liệu cảm thấy rằng khóa chính
phải ngắn gọn để giảm thiểu dung lượng lưu trữ cần thiết trong tất cả các bảng tham chiếu đến nó.
Phân tích dữ liệu hiện có không phải là một cách dễ hiểu để chọn một khóa tốt; bạn cũng phải xem xét
dữ liệu có thể xảy ra trong tương lai. Ngay cả khi chỉ có một sinh viên được đặt tên là Smith, hoặc chỉ một
Chuyên ngành tâm lý học được liệt kê trong Hình 14-3, những lĩnh vực này vẫn sẽ không phải là khóa chính tốt
ứng viên vì tiềm năng cho các chuyên ngành Smiths và Tâm lý học trong tương lai trong
cơ sở dữ liệu.

Thông thường, sau khi bạn đã xác định được các trường, kiểu dữ liệu và khóa chính cần thiết, bạn sẽ
sẵn sàng lưu mô tả bảng của bạn và bắt đầu nhập dữ liệu.
Trang 9

HAI SỰ THẬT & MỘT LỜI NÓI DỐI


Xác định các khóa chính

1. Khóa chính trong bảng là bản ghi có dữ liệu khác nhau trong các cột của nó
từ tất cả các bản ghi khác.
587
2. Cần có khóa đa cột khi không có cột nào trong bảng chứa duy nhất
dữ liệu cho một bản ghi.

3. Dữ liệu thường được nhập vào các bảng cơ sở dữ liệu sau khi tất cả các trường và khóa có
đã được xác định.
Hiểu ký hiệu cấu trúc cơ sở dữ liệu
Một cách viết tắt của một bảng là tên bảng được theo sau bởi dấu ngoặc đơn.
danh sách tất cả các tên trường, với khóa chính được gạch dưới. (Một số nhà thiết kế cơ sở dữ liệu chèn một
dấu hoa thị sau khóa thay vì gạch dưới nó.) Do đó, khi một bảng được đặt tên là tblStudents và
chứa các cột có tên idNumber , lastName , firstName , và gradePointAverage , và
idNumber là khóa, bạn có thể tham chiếu bảng bằng cách sử dụng ký hiệu sau:
tblStudents (idNumber, lastName, firstName, gradePointAverage)

Mặc dù ký hiệu viết tắt này không cung cấp thông tin về các loại dữ liệu hoặc phạm vi
giới hạn về giá trị, nó cung cấp một cái nhìn tổng quan nhanh chóng về cấu trúc của bảng. Chìa khóa không
phải là thuộc tính đầu tiên được liệt kê trong tham chiếu bảng, nhưng nó thường là thuộc tính.

HAI SỰ THẬT & MỘT LỜI NÓI DỐI


Hiểu ký hiệu cấu trúc cơ sở dữ liệu

1. Một cách viết tắt để mô tả bảng là sử dụng tên bảng theo sau là
dấu ngoặc đơn chứa danh sách tất cả các tên trường.

2. Thông thường, khi bạn mô tả một bảng bằng ký hiệu cấu trúc cơ sở dữ liệu,
khóa chính được gạch chân.

3. Ký hiệu cấu trúc cơ sở dữ liệu cung cấp thông tin về tên cột,
loại dữ liệu và giới hạn phạm vi của chúng.

ấ ồ
Trang 10

Làm việc với các bản ghi trong bảng


Các bản ghi trong hầu hết các cơ sở dữ liệu liên tục thay đổi. Nhân sự phải thường xuyên bổ sung,
xóa, cập nhật và sắp xếp các bản ghi cơ sở dữ liệu.

Nhập dữ liệu vào một bảng hiện có không khó, nhưng nó có thể đòi hỏi nhiều thời gian và
đánh máy chính xác. Tùy thuộc vào ứng dụng, nội dung của các bảng có thể được nhập
trong nhiều tháng hoặc nhiều năm bởi nhiều nhân viên nhập dữ liệu. Hầu hết các phần mềm cơ sở dữ liệu
cấm các mục dữ liệu sai kiểu dữ liệu. Ngoài ra, bạn có thể thiết lập một bảng để
ngăn dữ liệu trùng lặp trong các trường cụ thể hoặc ngăn nhập dữ liệu ngoài giới hạn được chỉ định trong
lĩnh vực nhất định. Với một số phần mềm cơ sở dữ liệu, bạn nhập dữ liệu thành các hàng đại diện cho mỗi bản ghi
và các cột đại diện cho từng trường trong mỗi bản ghi, giống như khi bạn nhập dữ liệu vào
bảng tính. Với phần mềm khác, bạn có thể tạo biểu mẫu trên màn hình để nhập dữ liệu nhiều hơn
thân thiện với người dùng. Một số phần mềm cho phép bạn chỉ định rằng không có bản ghi từng phần nào có thể được thêm vào; cái đó
là, không có trường nào được để trống.
Trong một số ứng dụng, các giá trị dữ liệu được nhập thủ công bởi người đánh máy. Ở những người khác, giá trị là
được quét từ nguồn gốc, giảm đáng kể khả năng xảy ra lỗi. Ví dụ,
các giao dịch mua có thể được quét tại điểm bán hàng trong cửa hàng bán lẻ và dây đeo cổ tay cho bệnh nhân và
các loại thuốc có thể được quét bởi nhân viên y tế trong bệnh viện.
Xóa và sửa đổi các bản ghi trong bảng cơ sở dữ liệu cũng là những công việc tương đối dễ dàng. Sản phẩm là
ngừng hoạt động, khách hàng thay đổi địa chỉ, v.v. Giữ cho các bản ghi dữ liệu được cập nhật là một
một phần quan trọng của bất kỳ hệ thống quản lý cơ sở dữ liệu nào.

Trong nhiều hệ thống cơ sở dữ liệu, một số bản ghi "đã xóa" không bị xóa về mặt vật lý. Thay vào đó, họ chỉ
được đánh dấu là đã xóa để chúng sẽ không được sử dụng để xử lý các bản ghi đang hoạt động. Ví dụ, một công ty có thể
muốn giữ lại dữ liệu về nhân viên cũ, nhưng không xử lý chúng bằng các báo cáo nhân sự hiện tại. Trên
mặt khác, hồ sơ nhân viên do nhầm lẫn sẽ bị xóa vĩnh viễn khỏi
cơ sở dữ liệu.

Phần mềm quản lý cơ sở dữ liệu thường cho phép bạn sắp xếp một bảng dựa trên bất kỳ cột nào,
cho phép bạn xem dữ liệu theo cách hữu ích nhất cho bạn. Ví dụ, bạn có thể
muốn xem các mục hàng tồn kho theo thứ tự bảng chữ cái hoặc từ nhiều nhất đến ít nhất
đắt. Bạn cũng có thể sắp xếp theo nhiều cột — ví dụ: bạn có thể sắp xếp nhân viên
theo tên trong họ (để Aaron Black được liệt kê trước Andrea Black) hoặc bởi
bộ phận trong tên trong họ (vì vậy Aaron Black trong Bộ phận 1 là
được liệt kê trước một Aaron Black khác trong Bộ 6). Khi sắp xếp các bản ghi trên nhiều
, phần mềm trước tiên sử dụng một cách sắp xếp chính — ví dụ: theo họ. Sau tất cả các hồ sơ
với cùng một khóa sắp xếp chính được nhóm lại, phần mềm sắp xếp theo khóa phụ — cho
ví dụ, tên.
Sau khi các hàng được sắp xếp, chúng thường có thể được nhóm lại. Ví dụ: bạn có thể muốn sắp xếp
khách hàng theo mã vùng của họ hoặc nhân viên theo bộ phận mà họ làm việc; ngoài ra,
bạn có thể muốn đếm hoặc tổng phụ ở cuối mỗi nhóm. Phần mềm cơ sở dữ liệu cho phép bạn
tạo hiển thị ở các định dạng phù hợp với nhu cầu của bạn.
Trang 11
HAI SỰ THẬT & MỘT LỜI NÓI DỐI
Làm việc với các bản ghi trong bảng

1. Tùy thuộc vào ứng dụng, nội dung của các bảng trong hệ thống cơ sở dữ liệu có thể
được nhập trong suốt nhiều tháng hoặc nhiều năm bởi nhiều nhân viên nhập dữ liệu.

2. Trong hầu hết các tổ chức, phần lớn dữ liệu quan trọng là vĩnh viễn.
589
3. Phần mềm quản lý cơ sở dữ liệu thường cho phép bạn sắp xếp và nhóm dữ liệu,
cho phép bạn xem dữ liệu theo cách hữu ích nhất cho bạn.

Tạo truy vấn


Dữ liệu dữ liệu thường có hàng trăm hàng nghìn hàng nghìn lần; làm cho phần mềm thông tin liên lạc
là một nhiệm vụ khó khăn. Thông thường, bạn muốn xem các tập hợp con dữ liệu từ bảng bạn đã tạo. Đối với
ví dụ, bạn có thể chỉ muốn kiểm tra những khách hàng có địa chỉ ở trạng thái cụ thể, chỉ
Thatinventoryitemswhosequantityinstockhasfallenbelowthenormalreorderpoint, oronlythose
nhân viênwhoparticipateinaninsuranceplan.
theviewofcolumnswithinrecords. Ví dụ: studentrecordsmight containerndozensoffields, nhưng
một quản trị viên trường học có thể chỉ quan tâm đến việc xem tên và điểm trung bình. Các
câu hỏi bạn sử dụng để trích xuất các bản ghi thích hợp từ một bảng và chỉ định các trường sẽ được xem
được gọi là truy vấn; một truy vấn là một câu hỏi sử dụng cú pháp mà phần mềm cơ sở dữ liệu có thể hiểu được.

Tùy thuộc vào phần mềm, bạn có thể tạo một truy vấn bằng cách điền vào chỗ trống (một quy trình được gọi là
truy vấn bằng ví dụ ) hoặc bằng cách viết các câu lệnh tương tự như trong nhiều chương trình
ngôn ngữ. Ngôn ngữ phổ biến nhất mà quản trị viên cơ sở dữ liệu sử dụng để truy cập dữ liệu
bảng của chúng là Ngôn ngữ truy vấn có cấu trúc hoặc SQL . Dạng cơ bản của câu lệnh SQL
lấy các bản ghi đã chọn từ một bảng là CHỌN-TỪ-ĐÂU . Tuyên bố này:

Chọn các cột bạn muốn xem

Từ một bảng cụ thể


Trường hợp một hoặc nhiều điều kiện được đáp ứng

SQL thường được phát âm là phần tiếp theo; tuy nhiên, một số trang web sản phẩm SQL nhấn mạnh rằng chính thức
phát âm là SQL. Tương tự, một số người phát âm GUI là gooey và những người khác nhấn mạnh rằng nó phải
GUI. Nói chung, cách phát âm ưa thích phát triển trong một tổ chức. TLA, hoặc viết tắt gồm ba chữ cái,
là kiểu viết tắt phổ biến nhất trong thuật ngữ kỹ thuật.
Trang 12

Ví dụ: giả sử rằng một bảng khách hàng có tên tblCustomers chứa dữ liệu về
khách hàng doanh nghiệp và cấu trúc của bảng như sau:
tblCustomers (custId, lastName, state)

Sau đó, một câu lệnh như sau sẽ hiển thị một bảng mới chứa hai cột—
custId và lastName —và chỉ bao nhiêu hàng nếu cần để giữ những khách hàng có
cột trạng thái chứa “WI”:
CHỌN custId, lastName TỪ tblCustomers WHERE state = "WI"

Thông thường, các từ khóa SQL như SELECT , FROM và WHERE xuất hiện ở dạng chữ hoa;
cuốn sách này tuân theo quy ước đó. Bên cạnh việc sử dụng = có nghĩa là bằng, bạn có thể sử dụng
toán tử so sánh> (lớn hơn), <(nhỏ hơn),> = (lớn hơn hoặc bằng) và
<= (nhỏ hơn hoặc bằng). Như bạn đã học được từ cách làm việc với lập trình
trong suốt cuốn sách này, giá trị trường văn bản được chứa trong dấu ngoặc kép,
nhưng giá trị số thì không.

Trong hệ quản trị cơ sở dữ liệu, một cách cụ thể để xem cơ sở dữ liệu bằng cách chọn
các trường và bản ghi cụ thể, hoặc đặt các bản ghi theo một thứ tự đã chọn, đôi khi được gọi là một dạng xem .
Các khung nhìn khác nhau được cung cấp bởi phần mềm cơ sở dữ liệu là các khung nhìn ảo; chúng không ảnh hưởng đến
tổ chức vật lý hoặc nội dung của cơ sở dữ liệu.

Để tạo dạng xem có chứa tất cả các trường cho mỗi bản ghi trong bảng, bạn có thể sử dụng dấu hoa thị làm
ký tự đại diện; một ký tự đại diện là một biểu tượng mà có nghĩa là “bất kỳ” hoặc “tất cả”. Ví dụ như sau
tuyên bố sẽ chọn tất cả các cột cho mọi khách hàng có trạng thái là "WI", không chỉ
các cột được đặt tên cụ thể:
CHỌN * TỪ tblCustomers WHERE state = "WI"

Để chọn tất cả khách hàng từ một bảng, bạn có thể bỏ qua mệnh đề WHERE trong câu CHỌN TỪ-ĐÂU
tuyên bố. Câu lệnh sau chọn tất cả các cột cho tất cả khách hàng trong bảng:
CHỌN * TỪ tbl

Bạn đã học về cách chọn trong các chương trình máy tính sớm hơn nhiều trong cuốn sách này và
bạn có thể nhận thấy rằng các câu lệnh SELECT-FROM-WHERE có cùng mục đích như
quyết định lập trình. Giống như các câu lệnh quyết định trong chương trình, SQL cho phép bạn tạo
điều kiện phức hợp sử dụng toán tử AND hoặc OR . Ngoài ra, bạn có thể đặt trước bất kỳ điều kiện nào
với toán tử NOT để đạt được kết quả âm. Tóm lại, Hình 14-4 cho thấy một cơ sở dữ liệu
bảng có tên tblInventory với cấu trúc sau:
tblInventory (itemNumber, description, numberInStock, price)

Bảng chứa năm bản ghi. Hình 14-5 liệt kê một số câu lệnh SQL SELECT điển hình mà bạn
có thể sử dụng với tblInventory và giải thích từng.
Trang 13

Tạo truy vấn

itemNumber sự miêu tả số lượng trong kho giá bán


144 Pkg 12 đĩa tiệc 250 $ 14,99

231 Bong bóng bay heli 180 $ 2,50

267 Máy kéo căng giấy 68 $ 1,89 591

312 Khăn trải bàn dùng một lần 20 $ 6,99

383 Pkg 20 khăn ăn 315 $ 2,39

Hình 14-4 Bảng tblInventory


© 2015 Cengage Learning

Câu lệnh sql Giải trình


CHỌN mặt hàngSố, giá TỪ Chỉ hiển thị số mặt hàng và giá cả
tblInventory cho tất cả năm bản ghi.

CHỌN * TỪ tblInventory Chỉ hiển thị tất cả các trường từ những


WHERE giá> 5,00 hồ sơ có giá trên $ 5,00–
mục 144 và 312.

CHỌN mặt hàngSố từ tblInventory Hiển thị mục số 144 – bản ghi duy nhất
WHERE số lượngInStock> 200 VÀ giá có số lượng lớn hơn 200
> 10.00 cũng như mức giá lớn hơn $ 10,00.
CHỌN mô tả, giá TỪ
Hiển thị các trường mô tả và giá
tblInventory WHERE description = "Pkg cho gói 12 đĩa tiệc và
20 khăn ăn "HOẶC mặt hàngSố <200 gói 20 khăn ăn. Mỗi
bản ghi được chọn chỉ phải đáp ứng một
trong số hai tiêu chí.

CHỌN mặt hàngSố từ tblInventory Hiển thị số mặt hàng cho duy nhất
KHÔNG PHẢI giá <14,00 ghi ở đâu giá không ít
hơn $ 14,00 – mặt hàng 144.

Hình 14-5 Các câu lệnh SQL mẫu và giải thích


© 2015 Cengage Learning
Trang 14

HAI SỰ THẬT & MỘT LỜI NÓI DỐI


Tạo truy vấn

592 1. Truy vấn là một câu hỏi bạn sử dụng để trích xuất các trường và bản ghi thích hợp từ một bảng.

2. Ngôn ngữ phổ biến nhất mà người quản trị cơ sở dữ liệu sử dụng để truy cập dữ liệu
trong bảng của chúng là Ngôn ngữ truy vấn có cấu trúc hoặc SQL.

3. Dạng cơ bản của lệnh SQL lấy các bản ghi đã chọn từ một
bảng là RETRIEVE-FROM-SELECTION .

Hiểu mối quan hệ giữa các bảng


Hầu hết các ứng dụng cơ sở dữ liệu yêu cầu nhiều bảng và yêu cầu các bảng phải liên quan với nhau. Các
kết nối giữa hai bảng là một mối quan hệ và cơ sở dữ liệu chứa các mối quan hệ
là một cơ sở dữ liệu quan hệ. Kết nối hai bảng dựa trên các giá trị trong một cột chung là
được gọi là phép toán tham gia , hay đơn giản hơn là phép nối ; cột mà chúng được kết nối với nhau là
tham gia cột . Bảng được hiển thị là kết quả của truy vấn cung cấp một chế độ xem ảo — nó sử dụng dữ liệu
từ mỗi bảng đã nối mà không làm gián đoạn nội dung của bảng gốc. Ví dụ, trong Hình
14-6, cột customerNumber là cột tham gia có thể tạo ra chế độ xem ảo khi
người dùng yêu cầu xem tên của khách hàng được liên kết với một số đơn đặt hàng cụ thể. Số ba
các loại mối quan hệ có thể tồn tại giữa các bảng:

Một-nhiều
Nhiều nhiều

Một-một
tblCustomers tblOrders

customerNumber customerName orderNumber mã số khách hàng orderQ number orderItem orderDate

214 Kowalski 10467 215 2 HP203 15/10/2014

215 Jackson 10468 218 1 JK109 15/10/2014

216 Lopez 10469 215 4 HP203 16/10/2014

217 Thompson 10470 216 12 ML318 16/10/2014

218 Vitale 10471 214 4 JK109 16/10/2014

10472 215 1 HP203 16/10/2014

10473 217 10 JK109 17/10/2014

Hình 14-6 Khách hàng mẫu và đơn đặt hàng


© 2015 Cengage Learning
Trang 15

Hiểu mối quan hệ một-nhiều


Trong mối quan hệ một -nhiều , một hàng trong bảng có thể liên quan đến nhiều hàng trong bảng khác
bàn. Đây là kiểu quan hệ phổ biến nhất giữa các bảng. Hãy xem xét những điều sau
những cái bàn:
tblCustomers (customerNumber, customerName) 593
tblOrders (orderNumber, customerNumber, orderQuantity, orderItem, orderDate)

Bảng tblCustomers chứa một hàng cho mỗi khách hàng và customerNumber là
khóa chính. Bảng tblOrders chứa một hàng cho mỗi đơn hàng và mỗi đơn hàng được chỉ định
một orderNumber , là khóa chính trong bảng này.

Trong hầu hết các doanh nghiệp, một khách hàng có thể đặt nhiều đơn hàng. Trong dữ liệu mẫu ở Hình 14-6,
khách hàng 215 đã đặt ba đơn đặt hàng. Một hàng trong tblCustomers cancorrespond bảng để, và
có liên quan đến, nhiều hàng trong bảng tblOrders . Điều này có nghĩa là có một mối quan hệ một-nhiều
betweenthet hai bảng tblCustomers và tblOrders . Bảng “một” ( tblCustomers ) là cơ sở
bảng trong mối quan hệ này và bảng “nhiều” ( tblOrders ) là bảng có liên quan .

Khi hai bảng có mối quan hệ một-nhiều, mối quan hệ dựa trên các giá trị trong một
hoặc nhiều cột trong bảng. Trong ví dụ này, cột hoặc thuộc tính liên kết hai bảng
cùng là thuộc tính customerNumber . Trong bảng tblCustomers , customerNumber là
khóa chính, nhưng trong bảng tblOrders , customerNumber không phải là khóa — nó là thuộc tính không phải khóa .
Cột Whena không phải là khóa trong bảng chứa thuộc tính là một khóa trong bảng liên quan,
cột được gọi là khóa ngoại . Khi một bảng cơ sở được liên kết với một bảng có liên quan trong một-nhiều
mối quan hệ, khóa chính của bảng cơ sở luôn liên quan đến khóa ngoại trong liên quan
bàn. Trong ví dụ trong Hình 14-6, customerNumber trong bảng tblOrders là một khóa ngoại.

Một khóa trong bảng cơ sở và khóa ngoại trong bảng liên quan không cần phải trùng tên; họ chỉ
cần phải chứa cùng một loại dữ liệu. Một số chương trình phần mềm quản lý cơ sở dữ liệu tự động
tạo mối quan hệ nếu các cột trong hai bảng bạn chọn có cùng tên và kiểu dữ liệu. Tuy nhiên, nếu
đây không phải là trường hợp (ví dụ: nếu cột được đặt tên là customerNumber trong một bảng và custID trong
khác), bạn có thể hướng dẫn phần mềm tạo mối quan hệ một cách rõ ràng.

Hiểu các mối quan hệ nhiều-nhiều


Một ví dụ khác về mối quan hệ một-nhiều được mô tả bằng các bảng sau:
tblItems (itemNumber, itemName, itemPurchaseDate, itemPurchasePrice, itemCategoryId)
tblCategories (categoryId, categoryName, categoryInsuredAmount)

Giả sử rằng bạn đang tạo các bảng này để theo dõi tất cả các vật dụng trong gia đình của bạn cho
mục đích bảo hiểm. Bạn muốn lưu trữ dữ liệu về ghế sofa, dàn âm thanh nổi, tủ lạnh, v.v. Các
Bảng tblItems chứa số mặt hàng, tên, ngày mua và giá mua của mỗi mặt hàng.
Ngoài ra, bảng này chứa số ID của danh mục (Thiết bị, Đồ trang sức, Đồ cổ, và
vân vân) mà mục đó thuộc về. Bạn cần những danh mục này vì hợp đồng bảo hiểm của bạn có
giới hạn bảo hiểm cụ thể cho các loại tài sản khác nhau. Ví dụ, với nhiều bảo hiểm
chính sách, đồ cổ có thể có giới hạn bảo hiểm khác với đồ gia dụng hoặc đồ trang sức có thể có
khác giới hạn so với đồ nội thất. Dữ liệu mẫu cho các bảng này được thể hiện trong Hình 14-7.
Trang 16

tblItems

itemNumber Tên mục mặt hàngMua hàng Ngày mặt hàngMua hàng Giá mặt hàngCategoryId

1 Ghế sô pha 13/1/2003 $ 6,500 5

2 Âm thanh nổi 2/10/2005 1.200 đô la 6

3 Tủ lạnh 5/12/2005 $ 750 1

4 nhẫn kim cương 2/12/2006 $ 42,000 2


594
5 TV 7/11/2006 $ 285 6

6 Bàn cà phê gỗ thông hình chữ nhật 21/4/2013 $ 300 5

7 Bàn tròn cuối cây thông 21/4/2013 $ 200 5

tblCategories

Thể loại ID categoryName categoryInsuredAmount

1 Thiết bị $ 30.000

2 Đồ trang sức 15.000 đô la

3 Đồ cổ $ 10.000

4 Quần áo 25.000 đô la

5 Đồ nội thất $ 5.000

6 Thiết bị điện tử $ 2.500

7 Điều khoản khác $ 5.000

Hình 14-7 Các mục và danh mục mẫu: mối quan hệ một-nhiều
© 2015 Cengage Learning

Chìa khóa chính của tblItems bảng là itemNumber , một số nhận dạng duy nhất mà bạn
đã chỉ định cho mỗi mục bạn sở hữu. (Bạn thậm chí có thể chuẩn bị nhãn với những con số này và
dán nhãn trên mỗi mục ở nơi không dễ thấy.) Bảng tblCategories chứa
tên danh mục và số tiền bảo hiểm tối đa cho các danh mục cụ thể. Ví dụ,
một hàng trong bảng này có danh mục Tên “Trang sức” và danh mục Được bảo hiểm Số tiền là
15.000 đô la. Khóa chính cho bảng tblCategories là categoryId , một chỉ định duy nhất
giá trị cho từng loại tài sản.

Hai bảng trong Hình 14-7 có mối quan hệ một-nhiều. Đó là bảng "một" và
bảng "nhiều" là gì? Hoặc, được hỏi theo cách khác, đó là bảng cơ sở và bảng nào là
bảng liên quan? Bạn có thể đã xác định rằng tblCategories là bảng cơ sở ("một"
bảng) vì một danh mục có thể mô tả nhiều mục mà bạn sở hữu. Do đó, tblItems là
bảng liên quan (bảng "nhiều"); có nghĩa là, nhiều mục rơi vào mỗi loại. Hai bảng
được liên kết với thuộc tính ID danh mục, là khóa chính trong bảng cơ sở
( tblCategories ) và khóa ngoại trong bảng liên quan ( tblItems ).

Trong Hình 14-7, một hàng trong bảng tblCategories liên quan đến nhiều mục bạn sở hữu. Các
điều ngược lại là không đúng — một mục trong bảng tblItems không thể liên quan đến nhiều danh mục trong
các tblCategories bảng. Hàng trong bảng tblItems mô tả "cây thông hình chữ nhật
bàn cà phê ”liên quan đến một danh mục cụ thể trong bảng tblCategories — Nội thất
Hiểu mối quan hệ giữa các bảng
Trang 17

thể loại. Tuy nhiên, nếu bạn sở hữu một chiếc bàn cafe gỗ thông hình chữ nhật được tích hợp sẵn
tủ lạnh, hay một chiếc nhẫn kim cương là đồ cổ?
Cấu trúc của các bảng trong Hình 14-7 và mối quan hệ giữa các bảng đó là
được thiết kế để theo dõi tài sản cho mục đích bảo hiểm. Nếu bạn cần trợ giúp phân loại
ghế sofa của bạn có đầu đĩa DVD lắp sẵn, bạn có thể gọi cho đại lý bảo hiểm của mình. Nếu người đại diện nói
595
rằng món đồ đó được coi là một món đồ nội thất cho mục đích bảo hiểm, thì chiếc bàn hiện có
cấu trúc và các mối quan hệ là đầy đủ. Nếu đại lý nói rằng chiếc ghế sofa được coi là đặc biệt
loại vật phẩm hỗn hợp có số tiền bảo hiểm tối đa cụ thể, bạn có thể tạo một hàng mới
trong bảng tblCategories để mô tả danh mục kết hợp đặc biệt này — có lẽ là Điện tử
Đồ nội thất. Danh mục mới này sẽ có số danh mục và bạn có thể liên kết
DVD-sofa loại mới sử dụng khóa ngoại trong bảng tblItems .
Tuy nhiên, giả sử rằng đại lý bảo hiểm của bạn không biết có nên phân loại ghế sofa là
đồ nội thất hoặc thiết bị điện tử, hoặc giả sử rằng đại lý nói với bạn các giá trị bảo hiểm khác nhau được áp dụng
nếu mục cần được thay thế vì sự cố cấu trúc hoặc sự cố điện tử. Trong
những trường hợp đó, mục sẽ có vấn đề với cơ sở dữ liệu của bạn. Bạn có thể muốn phân loại
chiếc ghế sofa mới của bạn vừa là đồ nội thất vừa là đồ điện tử. Các cấu trúc bảng hiện có,
với mối quan hệ một-nhiều của họ, sẽ không hỗ trợ điều này vì giới hạn thiết kế hiện tại
bất kỳ mục cụ thể nào cho chỉ một danh mục. Khi bạn chèn một hàng vào bảng tblItems để
mô tả DVD-sofa mới, bạn có thể gán mã Nội thất cho khóa ngoại
itemCategoryId hoặc bạn có thể gán mã Điện tử, nhưng không phải cả hai.
Nếu bạn muốn gán DVD-sofa mới cho cả hai danh mục (Nội thất và Điện tử), bạn
phải thay đổi thiết kế của cấu trúc bảng và các mối quan hệ, bởi vì không còn
mối quan hệ một-nhiều giữa hai bảng. Bây giờ, có nhiều
mối quan hệ — mà trong đó nhiều hàng trong mỗi bảng có thể tương ứng với nhiều hàng trong
cai khac. Trong ví dụ này, một hàng trong bảng tblCategories (ví dụ: Đồ nội thất) có thể
liên quan đến nhiều hàng trong bảng tblItems (ví dụ: ghế sofa và bàn cà phê) và một hàng trong
các tblItems bảng (ví dụ, ghế sofa với built-in DVD player) có thể liên quan đến nhiều
hàng trong bảng tblCategories .

Bảng tblItems chứa khóa ngoại có tên itemCategoryId . Nếu bạn muốn thay đổi
ứng dụng để một hàng cụ thể trong bảng tblItems có thể liên kết đến nhiều hàng (và,
do đó, nhiều categoryId ) trong bảng tblCategories , bạn không thể tiếp tục duy trì
mục khóa ngoạiCategoryId trong bảng tblItems , vì một mục có thể được gán cho
nhiều thể loại. Bạn có thể thay đổi cấu trúc của bảng tblItems để bạn có thể gán
nhiều itemCategoryId vào một hàng cụ thể trong bảng đó, nhưng bạn sẽ học ở phần sau
chương, cách tiếp cận đó dẫn đến nhiều vấn đề khi sử dụng dữ liệu. Do đó, nó không phải là một lựa chọn.
Cách đơn giản nhất để hỗ trợ mối quan hệ nhiều-nhiều giữa tblItems và
Các bảng tblCategories là
để loại bỏ thuộc tính itemCategoryId (cái mà trước đây là
key) từ bảng tblItems , tạo ra:
tblItems (itemNumber, itemName, itemPurchaseDate, itemPurchasePrice)

Các tblCategories cấu trúc bảng vẫn giữ nguyên:


tblCategories (categoryId, categoryName, categoryInsuredAmount)
Trang 18

Chỉ với hai bảng trước đó, không có cách nào để biết rằng bất kỳ hàng cụ thể nào trong
liên kết bảng tblItems đến bất kỳ hàng cụ thể nào trong bảng tblCategories , vì vậy bạn tạo một bảng mới
được gọi là tblItemsCategories chứa các khóa chính từ hai bảng bạn muốn
liên kết trong mối quan hệ nhiều-nhiều. Bảng này được mô tả như sau:

tblItemsCategories (itemNumber, categoryId)


596
Lưu ý rằng bảng mới này chứa một khóa chính phức hợp — cả itemNumber và
CategoryId được gạch dưới. Các itemNumber giá trị trong tổng số 1 có thể được liên kết với nhiều
CategoryId s. Do đó, một mình itemNumber không thể là khóa chính vì cùng một giá trị
có thể xảy ra trong nhiều hàng. Tương tự, một CategoryId có thể liên quan đến nhiều
itemNumber s;điều này sẽ không cho phép chỉ sử dụng categoryId làm khóa chính. Tuy nhiên,
kết hợp hai thuộc tính itemNumber và categoryId dẫn đến một khóa chính duy nhất
giá trị cho mỗi hàng của bảng tblItemsCategories .

Một bảng như tblItemsCategories chứa các trường chung từ nhiều bảng được biết đến
bằng một số thuật ngữ, bao gồm bảng nối, bảng cầu nối, bảng nối, bảng bản đồ, bảng tham chiếu chéo,
bảng liên kết, trình phân giải nhiều-nhiều và bảng liên kết. Các bảng nối cũng có thể chứa bổ sung
lĩnh vực.

Mục đích của tất cả những điều này là tạo ra mối quan hệ nhiều-nhiều giữa các tblItems
và bảng tblCategories . Bảng tblItemsCategories chứa hai thuộc tính;
cùng nhau, các thuộc tính này là khóa chính. Ngoài ra, mỗi thuộc tính này
riêng biệt là khóa ngoại của một trong hai bảng gốc. Các itemNumber thuộc tính trong
các tblItemsCategories bảng là một chìa khóa nước ngoài liên kết đến các khóa chính của
bảng tblItems . Các categoryId thuộc tính trong tblItemsCategories liên kết bảng với
khóa chính của bảng tblCategories . Bây giờ, có một mối quan hệ một-nhiều
giữa bảng tblItems ("một" hoặc bảng cơ sở) và bảng tblItemsCategories
("nhiều" hoặc bảng có liên quan) và mối quan hệ một-nhiều giữa các tblCategories
bảng ("một" hoặc bảng cơ sở) và bảng tblItemsCategories ("nhiều" hoặc có liên quan
bàn). Thực tế, điều này ngụ ý mối quan hệ nhiều-nhiều giữa hai bảng cơ sở
( tblItems và tblCategories ).
Hình 14-8 cho thấy các bảng mới chứa một số mục. Ghế sofa ( mục Số 1) trong
bảng tblItems được liên kết với danh mục Nội thất ( categoryId 5) trong
bảng tblCategories vì hàng đầu tiên của bảng tblItemsCategories chứa 1
và 5. Tương tự, âm thanh nổi ( itemNumber 2) trong bảng tblItems được liên kết với
Danh mục điện tử ( categoryId 6) trong bảng tblCategories vì
Bảng tblItemsCategories có một hàng chứa các giá trị 2, 6.
Trang 19

tblItems

itemNumber Tên mục itemPurchaseDate itemPurchasePrice


1 Ghế sô pha 13/1/2003 $ 6,500

2 Âm thanh nổi 2/10/2005 1.200 đô la

3 Ghế sofa với đầu đĩa DVD 24/5/2010 $ 8,500


597
4 Bàn cà phê tích hợp tủ lạnh 24/6/2007 $ 12.000

5 Đồng hồ bỏ túi của ông nội 4/7/1925 $ 100

tblItemsCategories tblCategories

itemNumber Thể loại ID categoryId categoryName categoryInsuredAmount

1 5 1 Thiết bị $ 30.000

2 6 2 Đồ trang sức 15.000 đô la

3 5 3 Đồ cổ $ 10.000

3 6 4 Quần áo 25.000 đô la

4 1 5 Đồ nội thất $ 5.000

4 5 6 Thiết bị điện tử $ 2.500

5 2 7 Điều khoản khác $ 5.000

5 3

Hình 14-8 Các mục mẫu, danh mục và danh mục mục: mối quan hệ nhiều-nhiều
© 2015 Cengage Learning

Chiếc ghế sofa lạ mắt với đầu đĩa DVD tích hợp (mục Số 3 trong bảng tblItems ) xuất hiện trong
hai hàng trong bảng tblItemsCategories : một lần với CategoryId là 5 (Nội thất) và
một lần với danh mụcId là 6 (Điện tử). Tương tự như vậy, bàn cà phê tích hợp
tủ lạnh (một món đồ nội thất là một thiết bị) và đồng hồ bỏ túi của ông nội (một món đồ cổ
trang sức) cả hai đều thuộc nhiều loại. Bảng tblItemsCategories , sau đó,
cho phép thiết lập mối quan hệ nhiều-nhiều giữa hai bảng cơ sở,
tblItems và tblCategories .

Hiểu mối quan hệ một-một


Trong mối quan hệ 1-1, một hàng trong một bảng tương ứng với một hàng trong bảng khác
bàn. Đây là kiểu quan hệ dễ hiểu, nhưng ít gặp nhất.
Khi một hàng trong bảng tương ứng với một hàng trong bảng khác, các cột có thể
kết hợp thành một bảng duy nhất. Một lý do phổ biến để bạn tạo mối quan hệ 1-1 là
Bảo vệ. Ví dụ, Hình 14-9 cho thấy hai bảng, tblErantyees và tblSalaries . Mỗi
nhân viên trong bảng tblE Employees có đúng một mức lương trong bảng tblSalaries . Các
tiền lương có thể đã được thêm vào bảng tblE Employees dưới dạng một cột khác; lương là
tách biệt bởi vì bạn muốn một số nhân viên chỉ được phép xem tên, địa chỉ và các
dữ liệu vô nghĩa, vì vậy bạn chỉ cấp cho họ quyền truy cập vào bảng tblEprisees . Khác
Trang 20

những người làm việc trong lĩnh vực biên chế hoặc quản trị có thể tạo truy vấn và xem các bảng đã tham gia bao gồm
thông tin lương.

tblE Employees tblSalaries

empId empLast empFirst empDept empHireDate empId empSalary

101 Parker Laura 3 4/7/2000 101 $ 42.500

102 Walters David 4 19/1/2001 102 $ 28,800

103 Shannon Ewa 3 28/2/2013 103 $ 36,000

Hình 14-9 Nhân viên và bảng lương: mối quan hệ 1-1


© 2015 Cengage Learning

Một lý do khác để tạo các bảng có mối quan hệ 1-1 là tránh để trống nhiều
cột hoặc null , nếu một tập hợp con của các cột chỉ áp dụng cho các loại hàng cụ thể trong cột chính
bàn. Ví dụ: nếu một bảng có 1.000 hồ sơ nhân viên chứa trường chấm dứt
nhưng chỉ có 10 phần trăm nhân viên đã từng bị thôi việc, bạn có thể muốn
tạo bảng một đối một chỉ dành cho nhân viên đã bị chấm dứt hợp đồng, với các số ID được liên kết và
ngày chấm dứt.

HAI SỰ THẬT & MỘT LỜI NÓI DỐI


Hiểu mối quan hệ giữa các bảng

1. Trong mối quan hệ một-nhiều, một hàng trong bảng có thể liên quan đến nhiều hàng
trong một bảng khác; đây là kiểu quan hệ phổ biến nhất giữa các bảng.

2. Trong mối quan hệ nhiều-nhiều, mỗi hàng trong bảng tương ứng với một
hàng đơn trong nhiều bảng khác nhau.

3. Trong mối quan hệ một đối một, một hàng trong một bảng tương ứng với chính xác một
hàng trong bảng khác; loại mối quan hệ này rất dễ hiểu, nhưng
là ít thường xuyên gặp nhất.

Nhận ra thiết kế bảng kém


Khi bạn tạo các bảng cơ sở dữ liệu để chứa dữ liệu được sử dụng bởi một tổ chức, bạn sẽ thường thấy
thiết kế bảng, hoặc cấu trúc, không đủ để hỗ trợ các nhu cầu của ứng dụng. Nói cách khác,
ngay cả khi một bảng chứa tất cả các thuộc tính được yêu cầu bởi một ứng dụng cụ thể, cấu trúc
thiết kế của bảng có thể làm cho ứng dụng trở nên cồng kềnh khi sử dụng và dễ bị lỗi dữ liệu.
Trang 21

Nhận ra thiết kế bảng kém

Ví dụ: giả sử rằng bạn đã được một trường đại học dựa trên Internet thuê để thiết kế
cơ sở dữ liệu để theo dõi học sinh của mình. Sau cuộc họp với các quản lý trường đại học, bạn
xác định rằng bạn cần biết những thông tin sau:
Tên các học sinh
599

Địa chỉ của sinh viên


Thành phố của sinh viên
Trạng thái của học sinh
Mã zip của sinh viên
Số ID cho các lớp học mà sinh viên đăng ký

Tiêu đề cho các lớp học mà sinh viên đăng ký


Trong một ví dụ thực tế, bạn có thể nghĩ đến nhiều yêu cầu dữ liệu khác cho trường đại học. Các
số lượng thuộc tính nhỏ trong ví dụ này để đơn giản hóa.
Hình 14-10 chứa bảng tblStudents . Giả định rằng vì trường đại học dựa trên Internet
là mới, chỉ có ba sinh viên đã đăng ký. Bên cạnh các cột bạn đã xác định là
cần thiết, thông báo việc bổ sung thuộc tính studentId . Với các cuộc thảo luận trước đó, bạn
có thể nhận ra rằng đây là lựa chọn tốt nhất cho khóa chính, vì nhiều sinh viên có thể
có cùng tên và thậm chí cùng địa chỉ. Mặc dù bảng trong hình 14-10
chứa một cột cho mỗi yêu cầu dữ liệu từ danh sách trước, bảng kém
được thiết kế và sẽ tạo ra nhiều vấn đề.

thẻ học sinh Tên Địa chỉ thành phố zip bang lớp học classTitle

1 Rodriguez 123 gỗ sồi Schaumburg IL 60193 CIS101 Trình độ tin học


PHI150 Đạo đức
BIO200 Di truyền học
2 Jones 234 Elm Hoa hồng dại WI 54984 CHM100 Hóa học
MTH200 Giải tích

3 Thợ nề 456 thông Dubuque IA 52004 HIS202 Lịch sử thế giới

Hình 14-10 bảng tblStudents trước khi chuẩn hóa


© 2015 Cengage Learning

Điều gì sẽ xảy ra nếu một quản trị viên đại học muốn xem danh sách các khóa học do Internet cung cấp
trường đại học? Bạn có thể thấy sáu khóa học được liệt kê cho ba sinh viên, vì vậy bạn có thể cho rằng ít nhất
sáu khóa học được cung cấp. Tuy nhiên, cũng có thể có một khóa học Tâm lý học, hoặc một lớp học có mã là
CIS102? Bạn không thể biết được từ bảng vì không có sinh viên nào đăng ký vào các lớp học đó. Nó
sẽ rất tốt nếu biết tất cả các lớp học do tổ chức của bạn cung cấp, bất kể có
sinh viên đã ghi danh vào chúng.
Hãy xem xét một vấn đề tiềm ẩn khác: Điều gì sẽ xảy ra nếu học sinh Mason rút khỏi trường, và
hàng của anh ấy bị xóa khỏi bảng? Bạn sẽ mất một số thông tin có giá trị mà không có gì
liên quan đến sinh viên Mason, nhưng rất quan trọng đối với việc điều hành trường đại học. Ví dụ, nếu Mason's
Trang 22

hàng bị xóa, bạn không còn biết từ dữ liệu còn lại trong bảng liệu trường đại học
cung cấp bất kỳ lớp học Lịch sử nào, bởi vì Mason là học sinh duy nhất đăng ký trong một lớp học với
Tiền tố HIS (lớp HIS202).
Tại sao việc thảo luận về những khiếm khuyết của cấu trúc bảng hiện có lại rất quan trọng? Bạn
có lẽ đã nghe câu nói, "Trả tiền cho tôi ngay bây giờ hoặc trả tiền cho tôi sau." Điều này đặc biệt đúng với
thiết kế bảng. Nếu bạn không dành thời gian để đảm bảo cấu trúc bảng được thiết kế tốt trong quá trình
thiết kế cơ sở dữ liệu ban đầu, người dùng sẽ mất nhiều thời gian sau này sửa lỗi dữ liệu, đánh máy
cùng một thông tin nhiều lần và thất vọng vì không thể xử lý
tập hợp con thông tin quan trọng từ cơ sở dữ liệu. Nếu bạn đã tạo bảng này
cấu trúc như một giải pháp cho nhu cầu của trường đại học, bạn có thể sẽ không được thuê cho tương lai
các dự án cơ sở dữ liệu.

HAI SỰ THẬT & MỘT LỜI NÓI DỐI


Nhận ra thiết kế bảng kém

1. Thiết kế cấu trúc của một chiếc bàn là tuyệt vời khi chiếc bàn chứa tất cả các
thuộc tính yêu cầu của một ứng dụng cụ thể.

2. Trong cơ sở dữ liệu được thiết kế kém, bạn có thể có nguy cơ mất dữ liệu quan trọng khi
hồ sơ cụ thể bị xóa.

3. Nếu bạn không dành thời gian để đảm bảo cấu trúc bảng được thiết kế tốt trong quá trình
thiết kế cơ sở dữ liệu ban đầu, người dùng sẽ mất nhiều thời gian sửa chữa dữ liệu sau này
lỗi, nhập cùng một thông tin nhiều lần và bị
không có khả năng loại bỏ các tập hợp con thông tin quan trọng từ cơ sở dữ liệu.

Hiểu các điểm bất thường, các dạng bình thường,


và Bình thường hóa
Các chương trình quản lý cơ sở dữ liệu có thể duy trì tất cả các mối quan hệ mà bạn cần. Khi bạn thêm,
xóa và sửa đổi các bản ghi trong các bảng cơ sở dữ liệu của bạn, phần mềm sẽ theo dõi tất cả
các mối quan hệ mà bạn đã thiết lập, để bạn có thể xem bất kỳ kết quả nào cần thiết bất kỳ lúc nào bạn muốn.
Tuy nhiên, phần mềm chỉ có thể duy trì các mối quan hệ hữu ích nếu bạn đã lên kế hoạch trước để
tạo một tập hợp các bảng cơ sở dữ liệu đáp ứng nhu cầu của người dùng, hỗ trợ tất cả các ứng dụng bạn
sẽ cần, và tránh các vấn đề tiềm ẩn. Quá trình này được gọi là chuẩn hóa .
Trang 23

Hiểu các điểm bất thường, dạng bình thường và chuẩn hóa

Quá trình chuẩn hóa giúp bạn giảm bớt sự dư thừa và dị thường của dữ liệu. Dữ liệu
dư thừa là sự lặp lại không cần thiết của dữ liệu. Sự bất thường là sự bất thường trong một
thiết kế của cơ sở dữ liệu gây ra sự cố và bất tiện. Ba loại phổ biến của
dị thường là:
Cập nhật các điểm bất thường 601
Xóa bất thường

Chèn các điểm bất thường


Nếu bạn nhìn trước bảng cơ sở dữ liệu trường đại học trong Hình 14-11, bạn sẽ thấy một ví dụ về
cập nhật bất thường hoặc sự cố xảy ra khi dữ liệu trong bảng cần được thay đổi.
Vì bảng chứa dữ liệu dư thừa, nếu sinh viên Rodriguez chuyển đến nơi ở mới,
bạn phải thay đổi địa chỉ, thành phố, tiểu bang và các giá trị zip ở nhiều vị trí. Của
tất nhiên, ví dụ bảng này là nhỏ; hãy tưởng tượng nếu dữ liệu bổ sung được lưu trữ về Rodriguez,
chẳng hạn như ngày sinh, địa chỉ e-mail, ngành học chính và các trường trước đây đã theo học.

Bảng cơ sở dữ liệu trong Hình 14-10 chứa sự bất thường khi xóa hoặc sự cố xảy ra khi
một hàng bị xóa. Nếu sinh viên Jones rút khỏi trường đại học và các mục của anh ta bị xóa khỏi
bảng, dữ liệu quan trọng liên quan đến các lớp CHM100 và MTH200 bị mất.

Với sự bất thường về chèn , sự cố xảy ra khi các hàng mới được thêm vào bảng. Trong bảng ở
Hình 14-10, nếu một sinh viên mới tên là Reed đã đăng ký vào trường cao đẳng nhưng chưa đăng ký
đối với các lớp cụ thể, thì bạn không thể chèn một hàng hoàn chỉnh cho Reed của sinh viên; cách duy nhất để làm như vậy
sẽ là "phát minh" ra ít nhất một lớp học giả cho anh ta. (Một số phần mềm cơ sở dữ liệu cho phép
hàng không đầy đủ.) Sẽ rất có giá trị đối với trường đại học nếu có thể duy trì dữ liệu về tất cả các
sinh viên, bất kể họ có đăng ký các lớp học cụ thể hay không — ví dụ:
trường đại học có thể muốn gửi danh mục và thông tin đăng ký cho những sinh viên này.

Khi bạn chuẩn hóa một bảng cơ sở dữ liệu, bạn sẽ thực hiện một loạt các bước cho phép bạn
loại bỏ những điểm dư thừa và dị thường. Chuẩn hóa liên quan đến việc thay đổi một bảng để nó thỏa mãn
một hoặc nhiều trong ba biểu mẫu bình thường hoặc bộ quy tắc để xây dựng cơ sở dữ liệu được thiết kế tốt.
Ba dạng bình thường là:

Dạng chuẩn đầu tiên , còn được gọi là 1NF , trong đó bạn loại bỏ các nhóm lặp lại

Dạng chuẩn thứ hai, hoặc 2NF , trong đó bạn loại bỏ các phụ thuộc khóa một phần

Dạng chuẩn thứ ba, hoặc 3NF , trong đó bạn loại bỏ các phụ thuộc bắc cầu

Mỗi dạng bình thường tốt hơn về mặt cấu trúc so với dạng đứng trước nó. Mỗi hình thức là tích lũy—
nghĩa là, tất cả cơ sở dữ liệu trong 2NF cũng nằm trong 1NF và tất cả cơ sở dữ liệu trong 3NF đều ở cả 1NF và
2NF. Trong bất kỳ cơ sở dữ liệu được thiết kế tốt nào, bạn hầu như luôn muốn chuyển đổi tất cả các bảng thành 3NF.

Trong một bài báo năm 1970 có tiêu đề “Mô hình dữ liệu quan hệ cho các ngân hàng dữ liệu được chia sẻ lớn”, Tiến sĩ EF Codd đã liệt kê bảy
dạng bình thường. Đối với các ứng dụng kinh doanh, 3NF thường là đủ, và vì vậy chỉ từ 1NF đến 3NF là
được thảo luận trong chương này.
Trang 24

Dạng bình thường đầu tiên


Một bảng có chứa nhóm lặp lại là unnormalized . Nhóm lặp lại là một tập hợp con của các hàng
trong một bảng cơ sở dữ liệu mà tất cả đều phụ thuộc vào cùng một khóa. Một bảng trong 1NF không chứa lặp lại
các nhóm dữ liệu.

Bảng trong Hình 14-10 vi phạm quy tắc 1NF này. Các thuộc tính class và classTitle lặp lại

nhiều lần đối với một số học sinh. Ví dụ, sinh viên Rodriguez đang học ba
các lớp học; thuộc tính lớp của cô ấy chứa một nhóm lặp lại. Để khắc phục tình trạng này, và
chuyển đổi bảng thành 1NF, bạn chỉ cần lặp lại các hàng cho mỗi nhóm dữ liệu lặp lại.
Hình 14-11 chứa bảng sửa đổi.

thẻ học sinh Tên Địa chỉ thành phố zip bang lớp học classTitle

1 Rodriguez 123 gỗ sồi Schaumburg IL 60193 CIS101 Trình độ tin học

1 Rodriguez 123 gỗ sồi Schaumburg IL 60193 PHI150 Đạo đức

1 Rodriguez 123 gỗ sồi Schaumburg IL 60193 BIO200 Di truyền học


2 Jones 234 Elm Hoa hồng dại WI 54984 CHM100 Hóa học

2 Jones 234 Elm Hoa hồng dại WI 54984 MTH200 Giải tích

3 Thợ nề 456 thông Dubuque IA 52004 HIS202 Lịch sử thế giới

Hình 14-11 Bảng tblStudents trong 1NF


© 2015 Cengage Learning

Các nhóm lặp lại đã bị loại khỏi bảng trong Hình 14-11. Tuy nhiên, có
vẫn là một vấn đề — khóa chính, studentId , không còn là duy nhất cho mỗi hàng trong bảng.
Ví dụ: bảng hiện có ba hàng trong đó studentId bằng 1. Bạn có thể sửa lỗi này
vấn đề và tạo khóa chính đơn giản bằng cách thêm thuộc tính lớp vào khóa chính,
tạo một khóa ghép. (Các vấn đề khác vẫn tồn tại, như bạn sẽ thấy ở phần sau của chương này.)
khóa của bảng sau đó trở thành sự kết hợp giữa studentId và class . Bằng cách biết học sinh
và lớp , bạn có thể xác định một và chỉ một hàng trong bảng — ví dụ: kết hợp
của studentId 1 và lớp BIO200 xác định một hàng duy nhất. Sử dụng ký hiệu đã thảo luận trước đó
trong chương này, bảng trong Hình 14-11 có thể được mô tả như sau:
tblStudents (studentId, tên, địa chỉ, thành phố, tiểu bang, zip, lớp, classTitle)

Cả thuộc tính studentId và class đều được gạch chân, cho thấy rằng chúng đều là một phần của
chìa khóa. Khi bạn kết hợp hai cột để tạo khóa ghép, bạn đang nối
các cột .

Bảng trong Hình 14-11 hiện ở dạng 1NF vì không có nhóm lặp lại và
các thuộc tính khóa chính được xác định. Thỏa mãn điều kiện "không có nhóm lặp lại" cũng được gọi là
làm cho các thuộc tính nguyên tử cột — tạo ra chúng càng nhỏ càng tốt để chứa một
phần dữ liệu không thể tách rời. Trong 1NF, tất cả các giá trị cho một giao điểm của hàng và cột phải là
nguyên tử. Nhớ lại bảng trong Hình 14-10, trong đó thuộc tính class cho studentId 1
(Rodriguez) có ba mục: CIS101, PHI150 và BIO200. Điều này đã vi phạm 1NF
quy tắc nguyên tử bởi vì ba lớp này đại diện cho một tập hợp các giá trị thay vì một
Trang 25

giá trị. Bảng trong Hình 14-11 không lặp lại vấn đề này bởi vì, đối với mỗi hàng trong
bảng, thuộc tính lớp chứa một và chỉ một giá trị. Điều này cũng đúng với cái khác
thuộc tính là một phần của nhóm lặp lại.

Các nhà phát triển cơ sở dữ liệu cũng đề cập đến chuỗi hoạt động hoặc giao dịch là giao dịch nguyên tử khi họ
thực thi hoàn toàn hay không. Thực hiện các hành động đảm bảo nguyên tử rằng không có hành động nào sẽ chỉ là một phần
đã hoàn thành, điều này có thể gây ra nhiều vấn đề hơn là nếu các nhiệm vụ chưa được bắt đầu.

603

Hãy nhớ lại cuộc thảo luận trước đó về lý do tại sao chúng ta chuẩn hóa các bảng ngay từ đầu. Làm
Hình 14-11 còn thừa? Có còn dị thường không? Câu trả lời là Có cho cả hai

các câu hỏi. Nhớ lại rằng bạn muốn có các bảng trong 3NF trước khi thực sự xác định chúng trong
cơ sở dữ liệu. Hiện tại, bảng trong Hình 14-11 chỉ ở dạng 1NF.
Trong Hình 14-11, lưu ý rằng Học sinh 1, Rodriguez, đang học ba lớp. Nếu bạn là
chịu trách nhiệm nhập dữ liệu vào bảng này, bạn có muốn nhập tên của học sinh này không,
địa chỉ, thành phố, tiểu bang và mã zip cho mỗi trong ba lớp? Đối với một trong những lớp học của cô ấy, bạn
có thể gõ nhầm tên của cô ấy là "Rodrigues." Hoặc, bạn có thể viết sai thành phố Schaumburg thành
"Schamburg" cho một trong những lớp học của Rodriguez. Một quản trị viên đại học có thể nhìn vào bảng
và không biết cách viết chính xác cho tên hoặc thành phố và nếu quản trị viên truy vấn
cơ sở dữ liệu để chọn hoặc đếm số lượng các lớp học mà học sinh cư trú tại
Schaumburg, một trong những lớp học của Rodriguez sẽ bị bỏ lỡ.

Lỗi chính tả là ví dụ về lỗi toàn vẹn dữ liệu. Bạn tìm hiểu thêm về loại lỗi này ở phần sau
chương.

Hãy xem xét sinh viên Jones, người đang học hai lớp. Nếu Jones thay đổi nơi ở của mình, làm thế nào
bạn có cần nhập lại địa chỉ, thành phố, tiểu bang và mã zip mới của anh ấy không? Điều gì sẽ xảy ra nếu Jones là
học sáu lớp?

Dạng thông thường thứ hai


Để cải thiện thiết kế của bảng trong Hình 14-11 và đưa bảng về trạng thái 2NF, bạn cần
loại bỏ tất cả các phụ thuộc chính từng phần ; nghĩa là, không có cột nào chỉ phụ thuộc vào một phần của
Chìa khóa. Đối với một bảng ở 2NF, nó phải ở trong 1NF và tất cả các thuộc tính không phải khóa phải phụ thuộc
trên toàn bộ khóa chính.

Trong bảng trong Hình 14-11, khóa là sự kết hợp giữa studentId và class . Xem xét
thuộc tính tên . Liệu tên “Rodriguez” phụ thuộc vào toàn bộ khóa chính? Nói cách khác,
bạn có cần biết rằng studentId là 1 và lớp là CIS101 để xác định rằng
các tên là “Rodriguez”? Không, chỉ cần biết rằng học sinh là 1 để biết rằng
tên là
"Rodriguez". Do đó, thuộc tính name chỉ phụ thuộc một phần vào thuộc tính chính
key, và do đó, bảng vi phạm 2NF. Điều này cũng đúng với các thuộc tính khác của địa chỉ , thành phố ,
trạng thái và mã zip .
Ví dụ: nếu bạn biết rằng StudentId là 3, thì bạn cũng biết rằng
thành phố của sinh viên là "Dubuque"; bạn không cần biết bất kỳ mã lớp nào .
Trang 26

Tương tự, kiểm tra thuộc tính classTitle trong hàng đầu tiên của bảng trong Hình 14-11. Điều này
thuộc tính có giá trị là "Computer Literacy". Trong trường hợp này, bạn không cần biết cả hai
studentId và
cả lớp để dự đoán classTitle “Computer Literacy”. Đúng hơn, chỉ là
thuộc tính lớp , chỉ là một phần của khóa ghép, là bắt buộc. Ngoài ra, lớp “PHI150” sẽ
luôn có lớp học liên quan Tiêu đề “Đạo đức”, bất kể học sinh cụ thể nào
tham gia lớp học đó. Vì vậy, classTitle đại diện cho một phụ thuộc khóa một phần.

Bạn đưa một bảng vào 2NF bằng cách loại bỏ các phụ thuộc khóa từng phần. Để thực hiện được điều này, bạn
tạo nhiều bảng để mỗi thuộc tính nonkey của mỗi bảng phụ thuộc vào toàn bộ
khóa chính cho bảng cụ thể mà thuộc tính xuất hiện trong đó. Nếu các bảng kết quả là
vẫn ở trong 1NF và không có phụ thuộc khóa một phần nào, thì các bảng đó cũng sẽ ở trong 2NF.

Hình 14-12 chứa ba bảng: tblStudents , tblClasses và tblStudentClasses . Đến


tạo bảng tblStudents , bạn chỉ cần lấy các thuộc tính từ bảng ban đầu
phụ thuộc vào thuộc tính studentId và nhóm chúng thành một bảng mới— tên địa chỉ , thành phố ,
state và zip tất cả có thể được xác định bởi studentId một mình. Khóa chính của
Bảng tblStudents là studentId . Tương tự, bạn có thể tạo bảng tblClasses đơn giản bằng cách
nhóm các thuộc tính từ bảng 1NF phụ thuộc vào thuộc tính lớp . Trong này
ứng dụng, chỉ một thuộc tính từ bảng gốc, thuộc tính classTitle , phụ thuộc vào
các lớp thuộc tính. Hai bảng đầu tiên trong Hình 14-12 có thể được ký hiệu là:
tblStudents (studentId, tên, địa chỉ, thành phố, tiểu bang, mã zip)
tblClasses (lớp, classTitle)

tblStudents

thẻ học sinh Tên địa chỉ thành phố zip bang
1 Rodriguez 123 gỗ sồi Schaumburg IL 60193

2 Jones 234 Elm Hoa hồng dại WI 54984

3 Thợ nề 456 thông Dubuque IA 52004

tblClasses tblStudentClasses

lớp học classTitle thẻ học sinh lớp học

CIS101 Trình độ tin học 1 CIS101

PHI150 Đạo đức 1 PHI150

BIO200 Di truyền học 1 BIO200

CHM100 Hóa học 2 CHM100

MTH200 Giải tích 2 MTH200

HIS202 Lịch sử thế giới 3 HIS202

Hình 14-12 Bảng tblStudents trong 2NF


© 2015 Cengage Learning
Trang 27

Bảng tblStudents và tblClasses chứa tất cả các thuộc tính từ bảng gốc.
Ghi nhớ những điểm dư thừa và dị thường trước đó. Một số cải tiến đã xảy ra:

Bạn đã loại bỏ các bất thường của bản cập nhật. Tên "Rodriguez" chỉ xuất hiện một lần trong
bảng tblStudents . Điều này cũng đúng với địa chỉ, thành phố, tiểu bang và mã zip của Rodriguez. Các
bảng gốc có ba hàng cho sinh viên Rodriguez. Bằng cách loại bỏ
dư thừa, bạn có ít dị thường hơn. Nếu Rodriguez thay đổi nơi cư trú, bạn chỉ
cần cập nhật một hàng trong bảng tblStudents . 605

Bạn đã loại bỏ các dị thường chèn. Với cấu hình mới, bạn có thể chèn một
hoàn thành hàng vào bảng tblStudents ngay cả khi học sinh chưa đăng ký vào bất kỳ
các lớp học. Tương tự, bạn có thể thêm một hàng hoàn chỉnh vào bảng tblClasses cho một lớp mới
cung cấp mặc dù không có học sinh hiện đang tham gia lớp học.

Bạn đã loại bỏ các dị thường xóa. Nhớ lại từ bảng ban đầu rằng Mason đã
học sinh duy nhất thi HIS202. Điều này gây ra sự bất thường khi xóa vì lớp HIS202
sẽ biến mất nếu Mason bị loại bỏ. Bây giờ, nếu bạn xóa Mason khỏi tblStudents
trong Hình 14-12, lớp HIS202 vẫn còn trong danh sách tblClasses .
Nếu bạn tạo hai bảng đầu tiên được hiển thị trong Hình 14-12, bạn đã loại bỏ nhiều
các vấn đề liên quan đến phiên bản gốc. Tuy nhiên, nếu bạn chỉ có hai bảng đó,
bạn đã mất một số thông tin quan trọng mà bạn đã có ban đầu khi ở 1NF — cụ thể là
học sinh nào đang học lớp nào hoặc học sinh nào đang học lớp nào.
Khi chia một bảng thành nhiều bảng, bạn cần xem xét kiểu quan hệ
giữa các bảng kết quả — bạn đang thiết kế một cơ sở dữ liệu quan hệ.
Bạn biết rằng ứng dụng đại học dựa trên Internet yêu cầu bạn phải theo dõi
học sinh đang học lớp nào. Điều này ngụ ý mối quan hệ giữa tblStudents và
bảng tblClasses . Công việc của bạn là xác định loại mối quan hệ nào tồn tại giữa hai
những cái bàn. Nhớ lại ở phần trước của chương rằng hai loại mối quan hệ phổ biến nhất là
một-nhiều và nhiều-nhiều. Ứng dụng này yêu cầu một học sinh cụ thể có thể
ghi danh vào nhiều lớp học khác nhau và một lớp học cụ thể có thể được nhiều người khác nhau tham gia
sinh viên. Do đó, tồn tại mối quan hệ nhiều-nhiều giữa các bảng tblStudents và
tblClasses .

Như bạn đã học trong ví dụ trước đó về phân loại các mặt hàng được bảo hiểm, bạn tạo ra nhiều
nhiều mối quan hệ giữa hai bảng bằng cách tạo một bảng thứ ba có chứa các khóa chính
từ hai bảng mà bạn muốn liên quan. Trong trường hợp này, bạn tạo tblStudentClasses
bảng trong Hình 14-12 như sau:

tblStudentClasses (studentId, lớp)

Nếu bạn kiểm tra các hàng trong bảng tblStudentClasses , bạn có thể thấy rằng học sinh có
học sinh Id 1,
Rodriguez, được ghi danh trong ba lớp học; studentId 2, Jones, đang học hai lớp;
và học sinh Id 3, Mason, chỉ được ghi danh vào một lớp. Cuối cùng, bảng yêu cầu cho
Cao đẳng dựa trên Internet đã được hoàn thành.
Hay có chúng? Trước đó, bạn đã thấy nhiều điểm dư thừa và bất thường đã được loại bỏ bằng cách
cấu trúc bảng thành 2NF và cấu trúc bảng 2NF chắc chắn dẫn đến kết quả tốt hơn nhiều
cơ sở dữ liệu hơn các cấu trúc 1NF. Nhưng hãy nhìn lại bảng tblStudents trong Hình 14-12. Như
Trang 28

trường đại học mở rộng, điều gì sẽ xảy ra nếu bạn cần thêm 50 sinh viên mới vào bảng này và tất cả
sinh viên cư trú tại Schaumburg, IL? Nếu bạn là người nhập dữ liệu, bạn có muốn nhập
thành phố “Schaumburg”, bang “IL” và mã vùng là “60193” 50 lần? Dữ liệu này là
dư thừa và bạn có thể cải thiện thiết kế của các bảng để loại bỏ sự dư thừa này.

Dạng thông thường thứ ba


3NF yêu cầu một bảng phải ở trong 2NF và nó không có phụ thuộc bắc cầu. Một bắc cầu
sự phụ thuộc xảy ra khi giá trị của một thuộc tính không khóa xác định hoặc dự đoán, giá trị của
một thuộc tính nonkey khác. Rõ ràng, thuộc tính studentId của bảng tblStudents trong Hình
14-12 là một yếu tố quyết định — nếu bạn biết một giá trị StudentId cụ thể , bạn cũng có thể biết rằng
học sinh tên , địa chỉ , thành phố , nhà nước , và zip . Tuy nhiên, đây không được coi là bắc cầu
phụ thuộc vì thuộc tính studentId là khóa chính cho bảng tblStudents và,
sau cùng, công việc của khóa chính là xác định giá trị của các thuộc tính khác trong hàng.

Tuy nhiên, một vấn đề nảy sinh nếu một thuộc tính nonkey xác định một thuộc tính nonkey khác. Các
tblStudents tableinFigure14-12hasfive nonkeyattributes: name , address , city , state , and zip .
Tên là một thuộc tính không phải khóa. Nếu bạn biết giá trị của tên là "Rodriguez", bạn cũng
biết một địa chỉ cụ thể nơi Rodriguez cư trú? Nói cách khác, đây có phải là một
sự phụ thuộc? Không, không phải vậy. Mặc dù bây giờ chỉ có một học sinh tên là Rodriguez, có thể
được nhiều hơn trong tương lai. Vì vậy, mặc dù có thể hấp dẫn khi coi thuộc tính name là một
yếu tố quyết định địa chỉ , nó không phải là. Nếu sếp của bạn nói, "Hãy nhìn vào bảng tblStudents và cho tôi biết
Địa chỉ của Jones, ”bạn không thể làm được nếu bạn có 10 học sinh tên là Jones.

Các địa chỉ thuộc tính là một thuộc tính nonkey. Nó có dự đoán được điều gì không? Nếu bạn biết rằng
giá trị của địa chỉ là "20 N. Main Street", bạn có thể xác định học sinh nào được liên kết với
địa chỉ đó? Không, vì trong tương lai, nhiều sinh viên có thể sống tại 20 N. Main Street, nhưng
họ có thể sống ở các thành phố khác nhau hoặc hai sinh viên có thể sống ở cùng một địa chỉ trong cùng một
thành phố. Do đó, địa chỉ không gây ra phụ thuộc bắc cầu.

Tương tự, các thuộc tính thành phố và tiểu bang không phải là khóa, nhưng chúng cũng không phải là yếu tố quyết định
bởi vì chỉ biết các giá trị của chúng là không đủ để dự đoán một giá trị thuộc tính không khóa khác.
Bạn có thể tranh luận rằng nếu bạn biết tên thành phố, bạn biết tiểu bang, nhưng nhiều tiểu bang chứa
chẳng hạn như các thành phố có tên Union hoặc Springfield.
Còn về zip thuộc tính nonkey thì sao? Nếu bạn biết rằng mã zip là 60193, bạn có thể
xác định giá trị của bất kỳ thuộc tính nonkey nào khác? Có, mã zip là 60193 chỉ ra rằng
thành phố là Schaumburg và tiểu bang là IL. Đây là “thủ phạm” gây ra tình trạng dư thừa trong
các thuộc tính của thành phố và tiểu bang . Thuộc tính zip là một yếu tố quyết định vì nó xác định thành phố
và trạng thái ; do đó, bảng tblStudents chứa một phụ thuộc bắc cầu và không nằm trong 3NF.
Để chuyển đổi bảng tblStudents thành 3NF, chỉ cần xóa các thuộc tính được xác định
bởi, hoặc phụ thuộc về mặt chức năng vào thuộc tính zip . Ví dụ: nếu thuộc tính zip
xác định thành phố thuộc tính , sau đó thành phố thuộc tính được coi là phụ thuộc về mặt chức năng vào
thuộc tính zip . Vì vậy, như Hình 14-13 cho thấy, bảng tblStudents mới được định nghĩa là:

tblStudents (studentId, name, address, zip)


Trang 29

Hiểu các điểm bất thường, dạng bình thường và chuẩn hóa

tblStudents tblZips

thẻ học sinh Tên địa chỉ zip zip thành phố tiểu bang
1 Rodriguez 123 gỗ sồi 60193 60193 Schaumburg IL
2 234 Elm 54984 54984 Hoa hồng dại WI 607
Jones
3 Thợ nề 456 thông 52004 52004 Dubuque IA

tblClasses tblStudentClasses

lớp học classTitle thẻ học sinh lớp học

CIS101 Trình độ tin học 1 CIS101

PHI150 Đạo đức 1 PHI150

BIO200 Di truyền học 1 BIO200

CHM100 Hóa học 2 CHM100

Giải tích MTH200 2 MTH200

HIS202 Lịch sử thế giới 3 HIS202

Hình 14-13 Cơ sở dữ liệu sinh viên hoàn chỉnh


© 2015 Cengage Learning

Một mối quan hệ phụ thuộc chức năng đôi khi được viết bằng cách sử dụng một mũi tên mở rộng từ phụ thuộc-
dựa trên thuộc tính cho thuộc tính phụ thuộc — ví dụ: zip thành phố.

Hình 14-13 cũng cho thấy bảng tblZips , được định nghĩa là:
tblZips (zip, thành phố, tiểu bang)

Bảng tblZips mới có liên quan đến bảng tblStudents theo thuộc tính zip . Sử dụng hai
bảng với nhau, bạn có thể xác định rằng studentId 3, Mason, trong bảng tblStudents cư trú
ở thành phố Dubuque và trạng thái của các thuộc tính IA được lưu trữ trong bảng tblZips . Khi bạn
gặp phải một bảng có sự phụ thuộc vào hàm, bạn hầu như luôn có thể giảm bớt dữ liệu
dự phòng bằng cách tạo hai bảng, như trong Hình 14-13. Với cấu hình mới, một dữ liệu-
nhà điều hành mục nhập vẫn phải nhập mã zip cho mỗi sinh viên, nhưng bạn đã loại bỏ sự dư thừa
và khả năng gây ra lỗi nhập dữ liệu trong tên thành phố và tiểu bang.

Mối quan hệ giữa sinh viên với mã zip là một-nhiều, nhiều-nhiều hay một-một
mối quan hệ? Bạn biết rằng một hàng trong bảng tblZips có thể liên quan đến nhiều hàng trong
bảng tblStudents — nghĩa là, nhiều sinh viên có thể cư trú trong mã zip 60193. Tuy nhiên, điều ngược lại
không đúng — một hàng trong bảng tblStudents (một học sinh cụ thể) không thể liên quan đến nhiều hàng
trong bảng tblZips , vì một học sinh cụ thể chỉ có thể cư trú trong một mã zip. Vì thế,
có mối quan hệ một-nhiều giữa bảng cơ sở, tblZips và bảng liên quan,
tbl Học sinh .
Liên kết đến mối quan hệ là thuộc tính zip , là khóa chính trong
bảng tblZips và một khóa ngoại trong bảng tblStudents .
Đây là một công việc rất nhiều, nhưng nó là giá trị nó. Các bảng ở dạng 3NF, và phần dư thừa và
những bất thường có thể góp phần tạo nên một cơ sở dữ liệu khó sử dụng, dễ xảy ra lỗi, kém hiệu quả
thiết kế đã bị loại bỏ.
Trang 30

Nhớ lại rằng định nghĩa của 3NF là 2NF cộng với không có phụ thuộc bắc cầu. Nếu bạn là
xem xét việc thay đổi cấu trúc của bảng tblStudents bằng cách thêm một thuộc tính để giữ
số An sinh Xã hội của học sinh ( ssn )? Nếu bạn biết một giá trị ssn cụ thể , bạn cũng biết một
tên , địa chỉ của học sinh cụ thể , v.v.; nói cách khác, một giá trị cụ thể cho ssn
xác định một và chỉ một hàng trong bảng tblStudents . Không có hai học sinh nên có
cùng số An sinh xã hội. Tuy nhiên, studentId là khóa chính; ssn là một người không khóa
yếu tố quyết định, theo định nghĩa dường như vi phạm các yêu cầu của 3NF. Tuy nhiên, nếu bạn
thêm ssn vào bảng tblStudents , bảng vẫn ở dạng 3NF vì một định thức được cho phép trong
3NF nếu định thức cũng là một khóa ứng viên. Nhớ lại rằng khóa ứng viên là một thuộc tính
có thể đủ điều kiện làm khóa chính nhưng chưa được sử dụng làm khóa chính. Trong ví dụ
liên quan đến thuộc tính zip của bảng tblStudents (xem Hình 14-11), zip là một
yếu tố quyết định của thành phố và các thuộc tính của tiểu bang . Do đó, bảng tblStudents không có trong
3NF vì nhiều hàng trong bảng tblStudents có thể có cùng giá trị cho zip ,
nghĩa là zip không phải là khóa ứng viên. Tình hình với cột ssn là khác bởi vì
ssn có thể được sử dụng làm khóa chính cho bảng tblStudents .

Xem video Chuẩn hóa.

Mặc dù số An sinh xã hội thường được coi là duy nhất, nhưng nhiều tổ chức từ chối sử dụng chúng như
số nhận dạng duy nhất vì một số lý do. Hàng triệu người sử dụng cùng một số với một người khác vì
trộm cắp danh tính hoặc sai lầm. Tại một thời điểm, hơn 5000 người đang sử dụng cùng một số từ một
quảng cáo của một nhà sản xuất ví. Ngoài ra, một số người có thể có nhiều số trong trường hợp
bạo lực hoặc bảo vệ nhân chứng liên bang.

Nói chung, bạn cố gắng tạo cơ sở dữ liệu ở dạng bình thường cao nhất. Tuy nhiên, khi các mục dữ liệu được lưu trữ trong
nhiều bảng, mất nhiều thời gian hơn để truy cập thông tin liên quan so với khi tất cả được lưu trữ trong một bảng. Vì vậy đối với
hiệu suất, đôi khi bạn có thể không chuẩn hóa bảng hoặc giảm nó xuống dạng bình thường thấp hơn, bằng cách đặt
một số thông tin lặp lại vào bảng. Quyết định hình thức tốt nhất để lưu trữ nội dung dữ liệu là
một nghệ thuật tinh vi.

Tham khảo nhanh 14-1 tóm tắt các đặc điểm của ba dạng chuẩn đầu tiên.

THAM KHẢO NHANH 14-1 Các dạng thông thường

Hình thức bình thường Đặc điểm bảng viết tắt


Dạng bình thường đầu tiên 1NF Không có nhóm lặp lại
Dạng chuẩn thứ hai 2NF Ở dạng bình thường đầu tiên và không có cột không phải khóa
chỉ phụ thuộc vào một phần của khóa chính
Hình thức bình thường thứ ba
3NF Ở dạng bình thường thứ hai và duy nhất
yếu tố quyết định là chìa khóa ứng cử viên
Trang 31

Các vấn đề về hiệu suất và bảo mật cơ sở dữ liệu

Không phải mọi bảng đều bắt đầu như không chuẩn hóa. Ví dụ: một bảng có thể đã ở dạng bình thường thứ ba khi bạn
lần đầu tiên gặp nó. Mặt khác, một bảng có thể không được chuẩn hóa, nhưng sau khi bạn đặt nó vào 1NF, bạn có thể thấy
rằng nó cũng đáp ứng các yêu cầu cho 2NF và 3NF.

HAI SỰ THẬT & MỘT LỜI NÓI DỐI


Hiểu các điểm bất thường, dạng bình thường và chuẩn hóa

1. Chuẩn hóa giúp bạn giảm bớt sự dư thừa và dị thường của dữ liệu.

2. Dư thừa dữ liệu là sự lặp lại không cần thiết của dữ liệu.

3. Dạng chuẩn đầu tiên tốt hơn về mặt cấu trúc so với dạng bình thường thứ ba.

Các vấn đề về hiệu suất và bảo mật cơ sở dữ liệu


Thông thường, cơ sở dữ liệu của một công ty là nguồn tài nguyên có giá trị nhất. Nếu tòa nhà, thiết bị hoặc
các vật phẩm tồn kho bị hư hỏng hoặc bị phá hủy, chúng có thể được xây dựng lại hoặc tạo lại. Tuy nhiên,
thông tin chứa trong cơ sở dữ liệu thường không thể thay thế được. Một công ty đã trải qua nhiều năm
việc xây dựng hồ sơ khách hàng có giá trị không thể tạo lại chúng ngay sau khi hoàn thành; một công ty
làm mất thông tin thanh toán hoặc giao hàng có thể không chỉ làm mất các đơn đặt hàng hiện tại —
khách hàng bị ảnh hưởng có thể bỏ sang đối thủ cạnh tranh có thể phục vụ họ tốt hơn. Giữ dữ liệu
an toàn thường là trách nhiệm kinh tế quan trọng nhất của công ty.

Bạn có thể nghiên cứu toàn bộ sách để tìm hiểu tất cả các chi tiết liên quan đến bảo mật dữ liệu. Các vấn đề chính
bao gồm:

Cung cấp tính toàn vẹn của dữ liệu


Khôi phục dữ liệu bị mất
Tránh các sự cố cập nhật đồng thời
Cung cấp xác thực và quyền

Cung cấp mã hóa

Cung cấp tính toàn vẹn của dữ liệu


Phần mềm cơ sở dữ liệu cung cấp các phương tiện để đảm bảo rằng tính toàn vẹn của dữ liệu được thực thi; một cơ sở dữ liệu có
tính toàn vẹn của dữ liệu khi nó tuân theo một bộ quy tắc làm cho dữ liệu chính xác và nhất quán. Những
các quy tắc đôi khi được gọi là ràng buộc toàn vẹn . Ví dụ: bạn có thể chỉ định rằng một
số lượng trong hồ sơ hàng tồn kho không bao giờ được âm hoặc giá không bao giờ được cao hơn
Trang 32

một giá trị xác định trước. Ngoài ra, bạn có thể thực thi tính toàn vẹn giữa các bảng; ví dụ, bạn
có thể cấm nhập mã gói bảo hiểm cho nhân viên nếu mã đó không phải là một trong các
các loại do tổ chức cung cấp.

Khôi phục dữ liệu bị mất


Dữ liệu của một tổ chức có thể bị phá hủy theo nhiều cách — người dùng hợp pháp có thể mắc lỗi,
tin tặc hoặc những người dùng độc hại khác có thể nhập dữ liệu không hợp lệ và các sự cố phần cứng có thể xóa sổ
hồ sơ hoặc toàn bộ cơ sở dữ liệu. Phục hồi là quá trình trả lại cơ sở dữ liệu về đúng
biểu mẫu tồn tại trước khi xảy ra lỗi.

Định kỳ tạo một bản sao lưu cơ sở dữ liệu và lưu giữ hồ sơ của mọi giao dịch là
hai trong những cách tiếp cận đơn giản nhất để phục hồi. Khi xảy ra lỗi, bạn có thể thay thế
cơ sở dữ liệu với phiên bản không có lỗi đã được lưu ở lần sao lưu cuối cùng. Thông thường, các thay đổi đối với
cơ sở dữ liệu được gọi là giao dịch đã xảy ra kể từ lần sao lưu cuối cùng; nếu vậy, bạn phải đăng ký lại
các giao dịch đó. Nhiều tổ chức giữ một bản sao dữ liệu của họ bên ngoài trang web (đôi khi
hundreds or thousands of miles away) so that if a disaster such as a fire or flood destroys data,
bản sao được lưu trữ từ xa có thể dùng làm bản sao lưu.

Tránh các vấn đề cập nhật đồng thời


Cơ sở dữ liệu lớn có thể được truy cập bởi nhiều người dùng cùng một lúc. Cơ sở dữ liệu được lưu trữ trên một trung tâm
máy tính, nhưng người dùng làm việc ở nhiều vị trí khác nhau, có thể trên các thiết bị trong cùng một văn phòng hoặc
thousands of miles away from each other. Ví dụ: một số nhân viên đặt hàng có thể
cập nhật đồng thời bảng khách hàng và hàng tồn kho. Sự cố cập nhật đồng thời xảy ra
khi hai người dùng cơ sở dữ liệu cần sửa đổi cùng một bản ghi cùng một lúc. Giả sử rằng
hai nhân viên đặt hàng nhận đơn đặt hàng qua điện thoại cho mặt hàng số 101 trong một tệp hàng tồn kho. Mỗi người nhìn thấy
số lượng trong kho — ví dụ: 25 — trên thiết bị của cô ấy. Mỗi người chấp nhận đơn đặt hàng của khách hàng và
trừ đi 1 từ hàng tồn kho. Bây giờ, trong mỗi thiết bị cục bộ, số lượng là 24. Một đơn đặt hàng được
được ghi vào cơ sở dữ liệu trung tâm, sau đó đến cơ sở dữ liệu khác và khoảng không quảng cáo cuối cùng là 24, không phải 23 như nó
nên là.

Một số cách tiếp cận có thể được sử dụng để tránh vấn đề này. Với một cách tiếp cận, một khóa có thể
được đặt trên một bản ghi tại thời điểm nó được truy cập. Một khóa là một cơ chế có thể ngăn chặn những thay đổi
vào cơ sở dữ liệu trong một khoảng thời gian. (Một khóa dài hạn được gọi là khóa liên tục .) Trong khi một
nhân viên đặt hàng thực hiện một thay đổi, người khác không thể truy cập vào hồ sơ. Có khả năng, một khách hàng trên
điện thoại với nhân viên thứ hai có thể bất tiện trong khi nhân viên thứ nhất duy trì
nhưng dữ liệu trong bảng kiểm kê sẽ vẫn chính xác.

Một cách tiếp cận khác đối với vấn đề cập nhật đồng thời là không cho phép người dùng cập nhật
cơ sở dữ liệu ban đầu, nhưng để chúng lưu trữ các giao dịch, sau này có thể được áp dụng cho
cơ sở dữ liệu tất cả cùng một lúc hoặc trong một loạt —có thể một hoặc hai lần một ngày hoặc sau giờ làm việc. Các
vấn đề với cách tiếp cận này là cơ sở dữ liệu sẽ lỗi thời ngay khi
giao dịch xảy ra và cho đến khi quá trình xử lý hàng loạt diễn ra. Ví dụ, nếu một số nhân viên
đặt hàng cho cùng một mặt hàng, mặt hàng đó có thể thực sự hết hàng. Tuy nhiên, không có
nhân viên sẽ nhận ra điều này bởi vì cơ sở dữ liệu sẽ không phản ánh các đơn đặt hàng cho đến khi nó được cập nhật với
lô giao dịch hiện tại.
Trang 33

Cung cấp xác thực và quyền


Hầu hết các phần mềm cơ sở dữ liệu có thể xác thực rằng những người cố gắng truy cập vào dữ liệu của tổ chức
là những người dùng hợp pháp. Các kỹ thuật xác thực bao gồm lưu trữ và xác minh mật khẩu hoặc
thậm chí sử dụng các đặc điểm vật lý, chẳng hạn như dấu vân tay hoặc nhận dạng giọng nói, trước khi người dùng có thể
xem dữ liệu. Sau khi được xác thực, người dùng thường nhận được ủy quyền đối với tất cả hoặc một phần của 611
kho dữ liệu. Các quyền được chỉ định cho người dùng cho biết người dùng đó thuộc phần nào của cơ sở dữ liệu
có thể xem, sửa đổi hoặc xóa. Ví dụ: một nhân viên đặt hàng có thể không được phép xem hoặc
cập nhật dữ liệu nhân sự, trong khi một nhân viên trong văn phòng nhân sự có thể không được phép thay đổi
dữ liệu hàng tồn kho.

Cung cấp mã hóa


Phần mềm cơ sở dữ liệu có thể được sử dụng để mã hóa dữ liệu. Mã hóa là quá trình mã hóa dữ liệu thành một
định dạng mà con người không thể đọc. Nếu người dùng trái phép có quyền truy cập vào các tệp cơ sở dữ liệu,
dữ liệu sẽ ở định dạng được mã hóa vô dụng đối với họ. Chỉ những người dùng được ủy quyền mới thấy dữ liệu trong
định dạng có thể đọc được.

HAI SỰ THẬT & MỘT LỜI NÓI DỐI


Các vấn đề về hiệu suất và bảo mật cơ sở dữ liệu

1. Cơ sở dữ liệu có tính toàn vẹn dữ liệu khi nó tuân theo một bộ quy tắc làm cho
dữ liệu chính xác và nhất quán.

2. Mã hóa là quá trình trả lại cơ sở dữ liệu về dạng đúng mà


tồn tại trước khi xảy ra lỗi.

3. Sự cố cập nhật đồng thời xảy ra khi hai người dùng cơ sở dữ liệu cần
sửa đổi cùng một bản ghi cùng một lúc.

Tóm tắt chương


Cơ sở dữ liệu chứa một nhóm tệp mà tổ chức cần để hỗ trợ các ứng dụng của mình. Trong
cơ sở dữ liệu, các tệp thường được gọi là bảng vì bạn có thể sắp xếp nội dung của chúng theo hàng
và các cột. Giá trị xác định duy nhất một bản ghi được gọi là khóa chính, trường khóa,
hay gọi tắt là một chìa khóa. Phần mềm quản lý cơ sở dữ liệu là một tập hợp các chương trình cho phép người dùng
tạo và quản lý dữ liệu.
Trang 34

Tạo một cơ sở dữ liệu hữu ích đòi hỏi phải lập kế hoạch và phân tích. Bạn phải quyết định dữ liệu nào sẽ
được lưu trữ, dữ liệu đó sẽ được phân chia như thế nào giữa các bảng và cách các bảng sẽ liên kết với nhau.
Trong hầu hết các bảng bạn tạo cho cơ sở dữ liệu, bạn muốn xác định một cột hoặc kết hợp của
làm cột hoặc trường khóa của bảng (hoặc khóa chính). Khóa chính quan trọng
bởi vì bạn có thể định cấu hình phần mềm của mình để ngăn nhiều bản ghi chứa
cùng giá trị trong cột này. Bạn có thể sắp xếp các bản ghi của mình theo thứ tự khóa chính trước khi
hiển thị hoặc in chúng và bạn cần sử dụng cột này khi thiết lập
các mối quan hệ giữa bảng và các bảng khác sẽ trở thành một phần của cùng một cơ sở dữ liệu.

Một cách viết tắt để mô tả bảng là sử dụng tên bảng theo sau là dấu ngoặc đơn
chứa danh sách tất cả các tên trường, với khóa chính được gạch chân.

Nhập dữ liệu vào một bảng hiện có đòi hỏi nhiều thời gian và đánh máy chính xác.
Tùy thuộc vào ứng dụng, nội dung của các bảng có thể được nhập trong khóa học
của nhiều tháng hoặc nhiều năm bởi nhiều nhân viên nhập dữ liệu. Xóa và sửa đổi các bản ghi trong
một bảng cơ sở dữ liệu là nhiệm vụ tương đối dễ dàng. Trong hầu hết các tổ chức, phần lớn quan trọng
dữ liệu ở trạng thái thay đổi liên tục.
Phần mềm quản lý cơ sở dữ liệu thường cho phép bạn sắp xếp một bảng dựa trên bất kỳ cột nào,
cho phép bạn xem dữ liệu theo cách hữu ích nhất cho bạn. Sau khi các hàng được sắp xếp, chúng
thường có thể được nhóm lại.
Thông thường, bạn muốn xem các tập hợp con dữ liệu từ bảng bạn đã tạo. Các
câu hỏi bạn sử dụng để trích xuất các bản ghi thích hợp từ một bảng và chỉ định
các trường được xem được gọi là truy vấn. Tùy thuộc vào phần mềm, bạn có thể tạo
truy vấn bằng cách điền vào chỗ trống (một quá trình được gọi là truy vấn theo ví dụ) hoặc bằng cách viết
các câu lệnh tương tự như trong nhiều ngôn ngữ lập trình. Phổ biến nhất
ngôn ngữ mà người quản trị cơ sở dữ liệu sử dụng để truy cập dữ liệu trong bảng của họ là có cấu trúc
Ngôn ngữ truy vấn hoặc SQL.
Hầu hết các ứng dụng cơ sở dữ liệu yêu cầu nhiều bảng và yêu cầu các bảng phải liên quan với nhau.
Ba loại mối quan hệ là một-nhiều, nhiều-nhiều và một-một.
Khi bạn tạo các bảng cơ sở dữ liệu để chứa dữ liệu mà một tổ chức cần, bạn sẽ thường thấy
thiết kế hoặc cấu trúc bảng, không đủ để hỗ trợ các nhu cầu của ứng dụng.
Chuẩn hóa là quá trình thiết kế và tạo một tập hợp các bảng cơ sở dữ liệu đáp ứng
nhu cầu của người dùng và tránh các vấn đề tiềm ẩn. Chuẩn hóa giúp bạn giảm dữ liệu
dư thừa, cập nhật điểm bất thường, xóa điểm bất thường và chèn điểm bất thường. Bình thường hóa
liên quan đến việc thay đổi một bảng để nó đáp ứng một hoặc nhiều hơn ba dạng thông thường hoặc các quy tắc, cho
xây dựng một cơ sở dữ liệu được thiết kế tốt. Ba dạng bình thường là dạng bình thường đầu tiên, cũng
được gọi là 1NF, trong đó bạn loại bỏ các nhóm lặp lại; dạng chuẩn thứ hai (2NF), trong
mà bạn loại bỏ các phụ thuộc chính một phần; và dạng bình thường thứ ba (3NF), trong đó bạn
loại bỏ các phụ thuộc bắc cầu.
Thông thường, cơ sở dữ liệu của một công ty là nguồn tài nguyên có giá trị nhất. Các vấn đề bảo mật chính
bao gồm cung cấp tính toàn vẹn của dữ liệu, khôi phục dữ liệu bị mất, tránh cập nhật đồng thời
vấn đề, cung cấp xác thực và quyền cũng như cung cấp mã hóa.
Trang 35

Điều khoản quan trọng


Ký tự là đơn vị dữ liệu nhỏ nhất có thể sử dụng — ví dụ: một chữ cái, chữ số hoặc dấu chấm câu
dấu.

Các trường được hình thành từ các nhóm ký tự và đại diện cho các phần thông tin, chẳng hạn như
613
firstName , lastName hoặc socialSecurityNumber .

Hồ sơ được hình thành từ các nhóm lĩnh vực liên quan. Các lĩnh vực đi cùng nhau bởi vì chúng
đại diện cho các thuộc tính của một thực thể, chẳng hạn như nhân viên, khách hàng, mục hàng tồn kho hoặc
tài khoản ngân hàng.

Các tệp bao gồm các bản ghi liên quan; ví dụ: một tệp có thể chứa một bản ghi cho mỗi
nhân viên trong một công ty hoặc từng tài khoản tại một ngân hàng.

Cơ sở dữ liệu chứa một nhóm tệp hoặc bảng mà tổ chức cần hỗ trợ
các ứng dụng.

Một bảng cơ sở dữ liệu chứa dữ liệu trong các hàng và cột.

Một thực thể là một bản ghi hoặc hàng trong một bảng cơ sở dữ liệu.

Một thuộc tính là một lĩnh vực hoặc một cột trong một bảng cơ sở dữ liệu.

Một khóa chính , hoặc chìa khóa cho ngắn, là một lĩnh vực hoặc cột xác định duy nhất một kỷ lục.

Một chìa khóa hợp chất , còn được gọi là một chìa khóa composit hoặc chìa khóa nối , là chìa khóa xây dựng
từ nhiều cột.

Một đốm màu là một đối tượng lớn nhị phân, hoặc BLOb, là một tập hợp các dữ liệu nhị phân như hình ảnh,
video hoặc clip âm thanh được lưu trữ trong hệ thống cơ sở dữ liệu.

Phần mềm quản lý cơ sở dữ liệu là một tập hợp các chương trình cho phép người dùng tạo và
quản lý dữ liệu.

Một cơ sở dữ liệu quan hệ chứa một nhóm các bảng mà từ đó bạn có thể làm cho các kết nối đến
tạo ra các khung nhìn ảo.

Khóa ứng viên là các cột hoặc thuộc tính có thể đóng vai trò là khóa chính trong bảng.

Khóa thay thế là các khóa ứng viên còn lại sau khi bạn chọn khóa chính.

Bất biến có nghĩa là không thay đổi trong quá trình hoạt động bình thường.

Một truy vấn là một câu hỏi sử dụng cú pháp mà các phần mềm cơ sở dữ liệu có thể hiểu được. Mục đích của nó là
thường để hiển thị một tập hợp con dữ liệu.

Truy vấn bằng ví dụ là quá trình tạo truy vấn bằng cách điền vào chỗ trống.

Ngôn ngữ truy vấn có cấu trúc , hoặc SQL , là ngôn ngữ thường được sử dụng để truy cập dữ liệu trong
các bảng cơ sở dữ liệu.

Câu lệnh SQL SELECT-FROM-WHERE là lệnh chọn các trường bạn muốn
xem từ một bảng cụ thể nơi một hoặc nhiều điều kiện được đáp ứng.
Trang 36

Một quan điểm là một cách cụ thể nhìn vào một cơ sở dữ liệu.

Ký tự đại diện là một ký hiệu có nghĩa là “bất kỳ” hoặc “tất cả”.

Một mối quan hệ là một mối liên hệ giữa hai bảng.

Phép toán nối hoặc phép nối , kết nối hai bảng dựa trên các giá trị trong một hoặc nhiều giá trị chung
cột.

Một tham gia cột là cột mà hai bảng được kết nối.

Một mối quan hệ một-nhiều là một trong đó một hàng trong một bảng có thể liên quan đến nhiều hàng trong
bảng khác. Đây là kiểu quan hệ phổ biến nhất giữa các bảng.

Bảng cơ sở trong mối quan hệ một-nhiều là bảng "một".

Bảng liên quan trong mối quan hệ một-nhiều là bảng "nhiều".

Một thuộc tính nonkey là bất kỳ cột trong một bảng mà không phải là một chìa khóa.

Một chìa khóa nước ngoài là một cột đó không phải là một chìa khóa trong một bảng, nhưng nó chứa một thuộc tính đó là một chìa khóa
trong một bảng liên quan.

Một mối quan hệ nhiều-nhiều là một trong đó nhiều hàng trong một bảng có thể tương ứng với
nhiều hàng trong một bảng khác.

Trong mối quan hệ 1-1, một hàng trong một bảng tương ứng với một hàng trong bảng khác
bàn.

Null là cột trống trong cơ sở dữ liệu.

Chuẩn hóa là quá trình thiết kế và tạo một tập hợp các bảng cơ sở dữ liệu đáp ứng
nhu cầu của người dùng và tránh dư thừa và dị thường.

Dư thừa dữ liệu là sự lặp lại không cần thiết của dữ liệu.

Sự bất thường là sự bất thường trong thiết kế cơ sở dữ liệu gây ra sự cố và


những bất tiện.

Một bản cập nhật bất thường là một vấn đề xảy ra khi các dữ liệu trong một bảng cần phải được thay đổi; các
kết quả là dữ liệu lặp lại.

Sự bất thường khi xóa là sự cố xảy ra khi một hàng trong bảng bị xóa; kết quả là mất
dữ liệu liên quan.

Sự bất thường khi chèn là sự cố xảy ra khi các hàng mới được thêm vào bảng; kết quả là
hàng không đầy đủ.

Các biểu mẫu thông thường là các quy tắc để xây dựng một cơ sở dữ liệu được thiết kế tốt.

Dạng chuẩn đầu tiên , còn được gọi là 1NF , là dạng chuẩn hóa mà bạn loại bỏ
nhóm lặp lại.

Dạng chuẩn thứ hai , hoặc 2NF , là dạng chuẩn hóa trong đó bạn loại bỏ khóa một phần
sự phụ thuộc.
Trang 37

Dạng chuẩn thứ ba , hoặc 3NF , là dạng chuẩn hóa trong đó bạn loại bỏ tính bắc cầu
sự phụ thuộc.

Một unnormalized bảng chứa nhóm lặp lại.

Nhóm lặp lại là một tập hợp con của các hàng trong bảng cơ sở dữ liệu mà tất cả đều phụ thuộc vào cùng một khóa.
615
Để cột concatenate là kết hợp cột để tạo ra một chìa khóa hợp chất.

Thuộc tính nguyên tử hoặc cột càng nhỏ càng tốt để chứa một phần không thể tách rời
Dữ liệu.

Các giao dịch nguyên tử dường như thực hiện hoàn toàn hoặc hoàn toàn không.

Một phụ thuộc chủ yếu một phần xảy ra khi một cột trong một bảng phụ thuộc vào chỉ một phần của
chìa khóa của bảng.

Một phụ thuộc bắc cầu xảy ra khi giá trị của một thuộc tính nonkey xác định, hoặc dự đoán,
giá trị của một thuộc tính nonkey khác.

Phụ thuộc chức năng mô tả mối quan hệ của một thuộc tính với một thuộc tính khác nếu nó có thể
được xác định bởi thuộc tính khác.

Để không chuẩn hóa một bảng là đặt nó ở dạng bình thường thấp hơn bằng cách đặt một số
thông tin trở lại nó.

Tính toàn vẹn của dữ liệu là điều kiện cơ sở dữ liệu tạo ra khi một bộ quy tắc được tuân theo để thực hiện
dữ liệu chính xác và nhất quán.

Ràng buộc toàn vẹn là các quy tắc giúp đảm bảo dữ liệu nhất quán và nằm trong phạm vi.

Phục hồi là quá trình trả lại cơ sở dữ liệu về dạng đúng đã tồn tại trước khi
xảy ra lỗi.

Sự cố cập nhật đồng thời xảy ra khi hai người dùng cơ sở dữ liệu cần sửa đổi cùng một
ghi cùng một lúc.

Một khóa là một cơ chế ngăn chặn thay đổi đến một cơ sở dữ liệu cho một khoảng thời gian.

Một khóa dai dẳng là một lâu dài khóa cơ sở dữ liệu cần thiết khi người dùng muốn duy trì một
chế độ xem nhất quán về dữ liệu của họ trong khi thực hiện các sửa đổi trong một giao dịch dài.

Một mẻ là một nhóm các giao dịch áp dụng tất cả cùng một lúc.

Các kỹ thuật xác thực bao gồm lưu trữ và xác minh mật khẩu hoặc thậm chí sử dụng
các đặc điểm vật lý, chẳng hạn như dấu vân tay hoặc nhận dạng giọng nói, trước khi người dùng có thể
xem dữ liệu.

Các quyền được gán cho người dùng cho biết người dùng có thể xem những phần nào của cơ sở dữ liệu,
sửa đổi và xóa.

Mã hóa là quá trình mã hóa dữ liệu thành một định dạng mà con người không thể đọc được.
Trang 38

Bài tập

Câu hỏi đánh giá


616
1. Trường hoặc cột xác định duy nhất một hàng trong bảng cơ sở dữ liệu là
a (n) .
a. Biến đổi c. hiệu trưởng
b. định danh d. Chìa khóa

2. Tính năng nào sau đây không phải là tính năng của hầu hết các phần mềm quản lý cơ sở dữ liệu?
a. sắp xếp các bản ghi trong một bảng c. ngăn chặn các bảng được thiết kế kém
b. tạo báo cáo d. bảng liên quan
3. Trước khi có thể nhập dữ liệu vào bảng cơ sở dữ liệu, bạn phải thực hiện tất cả các thao tác sau
ngoại trừ .

a. xác định các thuộc tính mà bảng sẽ giữ


b. cung cấp tên cho từng thuộc tính
c. cung cấp các loại dữ liệu cho từng thuộc tính
d. xác định giá trị tối đa và tối thiểu cho từng thuộc tính

4. Chìa khóa nào sau đây là chìa khóa tốt nhất cho chiếc bàn chứa đồ cho thuê của chủ nhà
tính chất?
a. streetAddress c. số lượng phòng ngủ
b. QuantOfMonthlyRent d. tenantLastName
5. Ký hiệu của bảng là: tblClients (socialSecNum, lastName, tên đầu tiên,

clientNumber, balanceDue) . Bạn có biết rằng .


a. khóa chính là socialSecNum
b. khóa chính là clientNumber
c. có bốn khóa ứng viên
d. có ít nhất một thuộc tính số

6. Bạn có thể trích xuất các tập dữ liệu con từ các bảng cơ sở dữ liệu bằng cách sử dụng a (n) .

a. truy vấn c. cuộc điều tra


b. sắp xếp d. chương trình con
Trang 39

7. Một bảng cơ sở dữ liệu có cấu trúc tblPhoneOrders (orderNum, custName,


custPhoneNum, itemOrdered, số lượng) .
Câu lệnh SQL nào có thể được sử dụng
để trích xuất tất cả các thuộc tính cho đơn đặt hàng cho mặt hàng AB3333?
a. CHỌN * TỪ tblPhoneOrders WHERE itemOrdered = "AB3333"
b. CHỌN tblPhoneOrders WHERE itemOrdered = "AB3333" 617
c. CHỌN mụcĐặt hàng TỪ tblPhoneOrders WHERE = "AB3333"
d. Hai trong số trên là đúng.

8. Kết nối hai bảng cơ sở dữ liệu dựa trên giá trị của một cột (tạo ra một
chế độ xem ảo của một bảng mới) là một hoạt động.

a. hợp nhất c. tham gia


b. ghép lại d. gặp
9. Phòng khám Y tế Heartland duy trì cơ sở dữ liệu để theo dõi bệnh nhân. Một bàn
có thể được mô tả là: tblPatients (bệnh nhân, tên, địa chỉ,
primaryPhysicianCode) .
Một bảng khác chứa mã bác sĩ cùng với các
dữ liệu bác sĩ; nó được mô tả là tblPhysicians (Mã bác sĩ, tên,
officeNumber, phoneNumber, daysOfWeekInOffice) . Trong ví dụ này,
mối quan hệ là .
a. một đối một c. nhiều nhiều
b. một-nhiều d. không thể xác định
10. Cơ quan Bảo hiểm Edgerton bán các hợp đồng bảo hiểm nhân thọ, gia đình, sức khỏe và ô tô.
Cơ quan duy trì một cơ sở dữ liệu chứa một bảng chứa dữ liệu chính sách — mỗi
hồ sơ chứa số chính sách, tên và địa chỉ của khách hàng và loại
của chính sách đã mua. Ví dụ: khách hàng Michael Robertson được giới thiệu trong
hai kỷ lục vì anh ấy nắm giữ các chính sách về cuộc sống và ô tô. Một bảng khác chứa
thông tin về từng loại chính sách mà đại lý bán — giới hạn bảo hiểm, thời hạn, v.v.
trên. Trong ví dụ này, mối quan hệ là .

a. một đối một c. nhiều nhiều


b. một-nhiều d. không thể xác định
11. Kratz Computer Repair duy trì một cơ sở dữ liệu có chứa một bảng thông tin
về mỗi công việc sửa chữa công ty đồng ý thực hiện. Bảng công việc được mô tả
như: tblJobs (jobId, dateStarted, customerId, kỹ thuật viênId, feeCharged) .
Mỗi công việc có một số ID duy nhất đóng vai trò là khóa của bảng này. Khách hàng
và technicianId cột trong bảng mỗi liên kết đến bảng khác của khách hàng
thông tin (chẳng hạn như tên, địa chỉ và số điện thoại) và kỹ thuật viên
thông tin (chẳng hạn như tên, phần mở rộng văn phòng và tỷ lệ hàng giờ). Khi tblJobs
và bảng tblCustomers được tham gia, bảng nào là bảng cơ sở?
a. tblJobs c. tblTechnicians
b. tblCustomers d. sự kết hợp của hai bảng
Trang 40

12. Khi một cột không phải là khóa trong bảng chứa một thuộc tính là khóa trong một
bảng liên quan, cột được gọi là .
khóa ngoại khóa nội bộ
a. c.
b. hợp nhất cột d. cột chính
618 13. Lý do phổ biến nhất để xây dựng mối quan hệ 1-1 giữa hai
bảng là .
a. để tiết kiệm tiền
b. Để tiết kiệm thời gian
c. vì mục đích an ninh
d. để không có bảng nào được coi là "kém hơn"

14. Quá trình thiết kế và tạo một bộ bảng cơ sở dữ liệu đáp ứng
nhu cầu của người dùng và tránh các vấn đề tiềm ẩn là .
a. thanh lọc c. tiêu chuẩn hóa
b. bình thường hóa d. cấu trúc
15. Sự lặp lại không cần thiết của dữ liệu được gọi là dữ liệu .

a. khuếch đại c. dư
b. vang vọng d. khai thác mỏ
16. Các vấn đề với thiết kế cơ sở dữ liệu là do các bất thường được gọi là .
a. trục trặc c. bọ
b. dị thường d. bất thường
17. Khi bạn đặt một bảng ở dạng bình thường đầu tiên, bạn đã loại bỏ .

a. phụ thuộc bắc cầu c. nhóm lặp lại


b. phụ thuộc chính một phần d. tất cả những điều trên
18. Khi bạn đặt một bảng ở dạng bình thường thứ ba, bạn đã loại bỏ .
a. phụ thuộc bắc cầu c. nhóm lặp lại
b. phụ thuộc chính một phần d. tất cả những điều trên
19. Nếu một bảng không chứa các nhóm lặp lại, nhưng một cột phụ thuộc vào một phần của bảng
chìa khóa, bảng ở trong hình thức bình thường.
a. Đầu tiên c. ngày thứ ba
b. thứ hai d. thứ tư
20. Vấn đề nào sau đây không phải là vấn đề bảo mật cơ sở dữ liệu?
a. cung cấp tính toàn vẹn của dữ liệu c. cung cấp bình thường hóa
b. khôi phục dữ liệu bị mất d. cung cấp mã hóa
Trang 41

Bài tập

Bài tập lập trình

1. Lucky Dog Grooming Parlour lưu trữ dữ liệu về từng khách hàng của mình trong một bảng
có tên là tblClients . Các thuộc tính bao gồm tên, giống chó và tên của chủ sở hữu,
619
tất cả đều là thuộc tính văn bản. Các thuộc tính số duy nhất là một số ID
được chỉ định cho mỗi con chó và số dư đến hạn cho các dịch vụ. Cấu trúc bảng là
tblClients (dogId, tên, giống, chủ sở hữu, balanceDue) . Viết SQL
câu lệnh sẽ chọn từng điều sau:

a. tên và chủ sở hữu của tất cả những người Đan Mạch vĩ đại
b. chủ sở hữu của tất cả những con chó có số dư trên $ 100

c. tất cả các thuộc tính của những con chó có tên là Fluffy
d. tất cả các thuộc tính của chó xù có số dư không lớn hơn $ 50

2. Xem xét bảng sau với cấu trúc tblRecipes (tên công thức,
timeToPrepare, thành phần) . Nếu cần, hãy thiết kế lại bảng để nó thỏa mãn 1NF,
2NF và 3NF.

công thức timeToPrepare Thành phần

Lasagna nướng 1 giờ 1 pound mì lasagna

½ pound thịt bò xay

16 ounce nước sốt cà chua


½ pound pho mát ricotta
½ pound pho mát parmesan
1 củ hành tây
Trai cây tr n 10 phút 1 quả táo
ộ
1 quả chuối
1 chùm nho
1 quả việt quất xanh
Sốt marinara 30 phút 16 ounce nước sốt cà chua
¼ pao phô mai parmesan
1 củ hành tây

3. Xem xét bảng sau với cấu trúc tblFriends (lastName,


firstName, address, birthday, phoneNumbers, emailAddresses) .
Nếu cần,
thiết kế lại bảng để nó thỏa mãn 1NF, 2NF và 3NF.
Trang 42

lastName địa chỉ firstName sinh nhật số điện thoại emailAddresses

Gordon Alicia 34 Second St. 3/16 222-4343 agordon@mail.com


349-0012

Washington Edward 12 Main St. 12/12 222-7121 ewash@mail.com


620
coolguy@earth.com

Davis Olivia 55 Birch Ave. 10/3 222-9012 olivia@abc.com


333-8788
834-0112

4. Bạn đã tạo bảng sau để theo dõi bộ sưu tập DVD của mình. Các
cấu trúc là tblDVDs (phim, năm, diễn viên) . Nếu cần, hãy thiết kế lại bảng sao cho
thỏa mãn 1NF, 2NF và 3NF.

bộ phim năm diễn viên

Những người đã khuất 2006 Leonardo DiCaprio


Matt Damon

Keo xịt tóc 2007 john Travolta


Michelle Pfeiffer
Christopher Walken

Hãy bắt tôi nếu bạn có thể 2002 Leonardo DiCaprio


Tom Hanks
Christopher Walken

True Grit 2010 Jeff Bridges


Matt Damon
Đứng dậy đi các bạn 2012 Al Pacino
Christopher Walken

5. Tổ chức Phụ nữ Midtown đang tài trợ học bổng cho trường trung học địa phương
sinh viên. Họ đã xây dựng một bảng với cấu trúc
tblScholarshipApplicants (appId, lastName, hsAttended, hsAddress, gpa,

danh dự, câu lạc bộ Hoạt động) .


Các hsAttended và hsAddress thuộc tính đại diện cho
trường trung học đã theo học và địa chỉ đường phố của nó, tương ứng. Các GPA thuộc tính là một lớp
điểm trung bình. Các danh hiệu thuộc tính nắm giữ giải thưởng nhận được, và clubsActivities
Thuộc tính chứa tên của các câu lạc bộ và hoạt động mà học sinh đã tham gia. Nếu
cần thiết, thiết kế lại bảng để nó thỏa mãn 1NF, 2NF và 3NF.
Trang 43

Bài tập

appId lastName hsAttended hsAddress gpa danh dự câu lạc bộ

1 Wong Trung tâm 1500 Chính 3.8 Giải công dân Nhà giáo tương lai

Cán bộ lớp

Máy bay mô hình 621

MVP bóng đá

Báo chí

2 Jefferson Trung tâm 1500 Chính 4.0 Thủ khoa Pep

Kỷ yếu giải thưởng công dân

Tòa án về quê hương

MVP bóng đá

3 Mitchell Cao nguyên 200 sân bay 3.6 Cán bộ lớp Pep

Tòa án về quê hương

Giáo viên tương lai

4 O'Malley Thánh Joseph 300 thứ tư 4.0 Thủ khoa Pep

Cờ vua

5 Abel Trung tâm 1500 Chính 3.7 Kỷ yếu giải thưởng công dân

Cán bộ lớp

6. Capitol College duy trì dữ liệu về các tổ chức khác nhau trong khuôn viên trường. Trường cao đẳng
quản trị đã tạo một bảng với cấu trúc tblOrganization (orgId,
tổ chức, thành viên, chủ tịch, chủ tịchMajor, VicePresident,

VicePresidentMajor) .
Một sinh viên có thể giữ chức vụ trong nhiều tổ chức.
Nếu cần, hãy thiết kế lại bảng để nó thỏa mãn 1NF, 2NF và 3NF.

orgId chủ tịch thành viên tổ chức chủ tịch

1 Phi Kappa Mu 30 Thomas Kinh doanh Sylvia Friend Xã hội học


Tình huynh đệ Dunn
2 Những anh trai 120 Sylvia Friend Sociology Elizabeth Harris Business

và chị em gái
3 Câu lạc bộ sinh thái 45 Elizabeth Kinh doanh David Smith Tiếng Anh
Harris
Trang 44

7. Giả sử rằng bạn muốn tạo cơ sở dữ liệu để lưu trữ thông tin về âm nhạc của mình
bộ sưu tập. Bạn muốn có thể truy vấn cơ sở dữ liệu cho từng điều sau
thuộc tính:

Một tiêu đề cụ thể (ví dụ: Tấm thảm hoặc Bản giao hưởng thứ năm của Beethoven)
622
Nghệ sĩ (ví dụ: Carole King hoặc Dàn nhạc giao hưởng Chicago)

Định dạng của bản ghi (ví dụ: tệp CD hoặc MP3)

Phong cách âm nhạc (ví dụ: rock hoặc cổ điển)


Năm ghi lại

Năm có được như một phần trong bộ sưu tập của bạn
Công ty thu âm

Địa chỉ của công ty ghi âm

Thiết kế các bảng bạn cần để chúng đều ở dạng bình thường thứ ba. Tạo tại
ít nhất năm bản ghi dữ liệu mẫu cho mỗi bảng bạn tạo.
8. Thiết kế một bộ sưu tập các bảng cơ sở dữ liệu cho Hội đồng Thị trấn Springfield. Các
hội đồng được tạo thành từ các đại diện từ mỗi trong số 15 khu vực của thị trấn. Các
dữ liệu bạn cần lưu trữ bao gồm các thuộc tính sau:

Số chính xác
Dân số chính xác

Họ của đại diện hội đồng


Tên đại diện hội đồng
Số điện thoại của đại diện hội đồng

Đảng chính trị của đại diện hội đồng


Tên chủ tịch đảng chính trị

Địa chỉ trụ sở chính đảng

Thiết kế các bảng bạn cần để chúng đều ở dạng bình thường thứ ba. Tạo tại
ít nhất năm bản ghi dữ liệu mẫu cho mỗi bảng bạn tạo.
9. Thiết kế một bộ sưu tập các bảng cơ sở dữ liệu cho một cửa hàng trực tuyến mà bạn có ý định
bán sản phẩm bạn làm thủ công. Dữ liệu bạn cần lưu trữ bao gồm những thứ sau
thuộc tính:

Số sản phẩm

Mô tả Sản phẩm
Giá sản phẩm
Danh mục sản phẩm
Trang 45

Thuế, thay đổi theo giá


Chế độ vận chuyển (ví dụ: UPS hoặc USPS, thay đổi theo loại sản phẩm)

Thiết kế các bảng bạn cần để chúng đều ở dạng bình thường thứ ba. Tạo tại
ít nhất năm bản ghi dữ liệu mẫu cho mỗi bảng bạn tạo.
623

Thực hiện bảo trì

1. Một tệp có tên MAINTENANCE14-01.docx được bao gồm trong tệp có thể tải xuống của bạn
hồ sơ sinh viên. Giả sử rằng bảng cơ sở dữ liệu này hoạt động như hiện tại, nhưng nó cần
các sửa đổi như được mô tả trong các nhận xét (các dòng bắt đầu bằng hai dấu gạch chéo) tại
phần đầu của tệp.

Tìm lỗi

1. Các tệp sinh viên có thể tải xuống của bạn cho Chương 14 bao gồm DEBUG14-01.docx,
DEBUG14-02.docx, DEBUG14-03.docx và DEBUG14-04.docx. Mỗi tệp bắt đầu
với một số nhận xét mô tả vấn đề. Theo dõi các nhận xét, mỗi tệp
chứa một bảng không có trong 3NF. Tạo bảng nếu cần để đưa dữ liệu vào 3NF.

Khu vực chơi game

1. Trò chơi nhập vai trực tuyến nhiều người chơi (MMORPG) là trò chơi trực tuyến
trò chơi nhập vai giả lập trong đó một số lượng lớn người chơi tương tác với một
khác trong thế giới ảo. Người chơi đóng vai một nhân vật hư cấu và
điều khiển hành động của nhân vật đó. MMORPG được phân biệt với các game nhập vai nhỏ hơn
bởi số lượng người chơi và bởi thế giới liên tục của trò chơi, thường được tổ chức bởi
nhà phát hành trò chơi, tiếp tục tồn tại và phát triển trong khi người chơi rời xa
tro choi. Thiết kế cơ sở dữ liệu bạn sẽ sử dụng để lưu trữ một MMORPG, bao gồm tại
ít nhất ba bảng.

Lên cho cuộc thảo luận

1. Trong chương này, danh bạ điện thoại được đề cập như một ví dụ về cơ sở dữ liệu bạn sử dụng
thường xuyên. Kể tên một số ví dụ khác.
2. Giả sử rằng bạn có quyền duyệt cơ sở dữ liệu của công ty mình. Công ty
lưu giữ thông tin về công việc trước đây của mỗi nhân viên, yêu cầu bảo hiểm sức khỏe và bất kỳ
Hồ sơ tội phạm. Cũng giả sử rằng bạn muốn hẹn hò với đồng nghiệp.
Bạn có nên sử dụng cơ sở dữ liệu để lấy thông tin về người đó không? Nếu vậy, là
Trang 46

có bất kỳ giới hạn nào về dữ liệu bạn nên sử dụng không? Nếu không, bạn có được phép trả một
thám tử tư để khám phá dữ liệu tương tự?

3. Trung tâm Thông tin Tội phạm Quốc gia của FBI (NCIC) là một cơ sở dữ liệu được máy tính hóa
thông tin tư pháp hình sự, bao gồm dữ liệu về tiền sử tội phạm, những kẻ đào tẩu,
tài sản bị đánh cắp, và những người mất tích. Những hệ thống lớn như vậy gần như chắc chắn chứa
624
sự không chính xác. Các nghiên cứu khác nhau đã chỉ ra rằng có lẽ ít hơn một nửa số hồ sơ
trong cơ sở dữ liệu này là đầy đủ, chính xác và rõ ràng. Bạn có chấp thuận điều này không
hệ thống hay đối tượng với nó? Bạn có đổi ý nếu không có điều gì không chính xác không?
Có mức độ không chính xác nào mà bạn có thể chấp nhận được để nhận ra lợi ích của
một hệ thống như vậy?
4. Loại dữ liệu nào có thể hữu ích cho cộng đồng theo cách tự nhiên
thảm họa? Ai sẽ trả chi phí thu thập, lưu trữ và bảo trì
dữ liệu này?

You might also like