Professional Documents
Culture Documents
Chương 14
Chương 14
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ề:
https://translate.googleusercontent.com/translate_f 1/43
Trang 2
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ự.
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
Đô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.
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.
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.
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.
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.
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.
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ư.)
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
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
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.
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
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ù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:
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
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.
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 .
Một-nhiều
Nhiều nhiều
Một-một
tblCustomers tblOrders
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.
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
tblCategories
1 Thiết bị $ 30.000
3 Đồ cổ $ 10.000
4 Quần áo 25.000 đô la
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)
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:
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
tblItemsCategories tblCategories
1 5 1 Thiết bị $ 30.000
3 5 3 Đồ cổ $ 10.000
3 6 4 Quần áo 25.000 đô la
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 .
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.
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.
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.
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
thẻ học sinh Tên Địa chỉ thành phố zip bang lớp học classTitle
Đ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.
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, 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
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
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
2 Jones 234 Elm Hoa hồng dại WI 54984 MTH200 Giải tích
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?
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.
tblStudents
thẻ học sinh Tên địa chỉ thành phố zip bang
1 Rodriguez 123 gỗ sồi Schaumburg IL 60193
tblClasses tblStudentClasses
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:
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.
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à:
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
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 .
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.
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.
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.
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.
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:
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.
Đị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.
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
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.
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ạ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
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 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ả”.
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.
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.
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.
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.
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
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ừ .
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,
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) .
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.
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ỏ .
Bài tập
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.
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.
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,
Bài tập
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
MVP bóng đá
Báo chí
MVP bóng đá
3 Mitchell Cao nguyên 200 sân bay 3.6 Cán bộ lớp 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.
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)
Năm có được như một phần trong bộ sưu tập của bạn
Công ty thu â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
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
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
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.
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.
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?