Tải bản đầy đủ (.pdf) (80 trang)

cơ sở dữ liệu quan hệ và SQL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.35 MB, 80 trang )

1
Giới thiệu cơ sở dữ liệu quan hệ
và SQL
Trước khi sử dụng SQL để làm việc với cơ sở dữ liệu SQL Server, bạn cần làm quen với
những khái niệm và thuật ngữ được dùng trong các hệ quản trị cơ sở dữ liệu. Cụ thể,
bạn cần hiểu cơ sở dữ liệu quan hệ là gì và lợi ích mà nó mang lại so với các mô hình
dữ liệu khác. Đó là những nội dung bạn sẽ được học trong phần đầu của chương này.
Tiếp đó, bạn sẽ tìm hiểu các câu lệnh SQL và những tính năng cơ bản của SQL Server.
Giới thiệu hệ thống client/server (máy khách/máy chủ)....................................... 2
Các thành phần phần cứng trong hệ thống client/server ............................................2
Các thành phần phần mềm của hệ thống client/server ..............................................4
Các kiến trúc hệ thống client/server khác ...................................................................6
Giới thiệu mô hình cơ sở dữ liệu quan hệ............................................................. 8
Cách tổ chức bảng cơ sở dữ liệu ...............................................................................8
Cách liên kết các bảng trong cơ sở dữ liệu quan hệ ................................................10
Cách định nghĩa các cột trong bảng .........................................................................12
So sánh cơ sở dữ liệu quan hệ với các mô hình dữ liệu khác .................................14
Giới thiệu về SQL và những hệ thống trên nền SQL (SQL-based system)....... 16
Tóm lược lịch sử SQL ...............................................................................................16
So sánh Oracle, DB2 và SQL Server ........................................................................18
Các hệ thống trên nền SQL khác ..............................................................................18
Các câu lệnh Transact-SQL................................................................................... 20
Giới thiệu các câu lệnh SQL .....................................................................................20
Các câu lệnh điển hình để làm việc với đối tượng cơ sở dữ liệu .............................22
Hướng dẫn truy vấn bảng đơn .................................................................................24
Hướng dẫn nối dữ liệu từ hai hay nhiều bảng ..........................................................26
Hướng dẫn thêm, sửa và xóa dữ liệu trong bảng ....................................................28
Hướng dẫn viết mã SQL ...........................................................................................30
Hướng dẫn làm việc với các đối tượng cơ sở dữ liệu khác.............................. 32
Hướng dẫn làm việc với view ...................................................................................32
Hướng dẫn làm việc với stored procedure, trigger, hàm người dùng định nghĩa .....34


Hướng dẫn sử dụng SQL từ một chương trình ứng dụng................................. 36
Các mô hình truy cập dữ liệu phổ biến .....................................................................36
Hướng dẫn sử dụng ADO.NET từ ứng dụng .NET ...................................................38
Mã Visual Basic truy xuất dữ liệu từ cơ sở dữ liệu SQL Server ...............................40
Mã C# truy xuất dữ liệu từ cơ sở dữ liệu SQL Server ..............................................42
Tổng kết .................................................................................................................. 44


2  SQL Server 2008 căn bản - Hướng dẫn học qua ví dụ

Giới thiệu hệ thống client/server (máy
khách/máy chủ)
Nếu bạn chưa quen với các hệ thống client/server, hai mục ngay bên dưới sẽ
giới thiệu cho bạn về các thành phần phần cứng và phần mềm thiết yếu của hệ
thống. Đây cũng là những dạng hệ thống được sử dụng nhiều nhất cùng với SQL.
Ở phần cuối sẽ cung cấp cho bạn một hình dung về hệ thống client/server phức
tạp sẽ như thế nào.

Các thành phần phần cứng trong hệ thống client/server
Hình 1-1 biểu diễn ba thành phần phần cứng của hệ thống client/server: Client
(máy khách), hệ thống mạng, và server (máy chủ). Client thường là các máy tính
cá nhân (Personal Computer - PC) được lắp đặt sẵn trên bàn làm việc ở một công
ty. Còn hệ thống mạng là hệ thống dây cáp, đường kết nối, card giao tiếp mạng
(NIC - network inteface card), hub, router cùng các thành phần kết nối khác giữa
client và server.
Server cơ sở dữ liệu (database server) thường được gọi là server, là một máy
tính có bộ vi xử lý đủ nhanh, bộ nhớ trong (RAM), và ổ đĩa để lưu trữ các file và cơ
sở dữ liệu của hệ thống, đồng thời cung cấp các dịch vụ tới client trong hệ thống.
Server thường là các máy tính hiệu năng cao, nhưng cũng có thể là một hệ thống
máy tính tầm trung như IBM iSeries, Unix, hoặc thậm chí là một hệ thống máy tính

lớn (mainframe system). Khi một hệ thống bao gồm mạng, hệ thống máy tầm trung
hoặc cỡ lớn nằm trải rộng trên lãnh thổ một quốc gia hoặc thế giới, sẽ được gọi là
hệ thống doanh nghiệp (enterprise system).
Để thực hiện sao lưu các file trong hệ thống client/server, server thường có
băng từ (tape drive) hoặc một vài dạng lưu trữ offline khác. Server thường có một
hay nhiều máy in, hoặc các thiết bị chuyên dụng, được chia sẻ giữa những người
dùng của hệ thống. Và server cũng có khả năng cung cấp các chương trình, hoặc
dịch vụ như email cho phép toàn bộ người dùng trong hệ thống truy cập.
Trong một hệ thống client/server đơn giản, các client và server là một phần của
mạng nội bộ (local area network - LAN). Tuy nhiên, hai hoặc nhiều mạng LAN ở
những địa điểm địa lý khác nhau có thể kết nối để trở thành một phần của hệ thống
mạng lớn hơn, như mạng diện rộng (wide area network - WAN). Thêm vào đó, các
hệ thống hoặc mạng đơn lẻ có thể được kết nối qua Internet.


Chương 1  Giới thiệu cơ sở dữ liệu quan hệ và SQL  3 

Một hệ thống client/server đơn giản

Server cơ sở
dữ liệu

Mạng
Client

Client

Client

Ba thành phần phần cứng của hệ thống client/server






Các client như PC, Macintosh hoặc máy trạm (workstation) của hệ thống.
Server là máy tính lưu trữ các file, cơ sở dữ liệu của hệ thống và cung cấp dịch
vụ tới client. Nếu server lưu trữ cơ sở dữ liệu, ta có thể gọi nó là một server cơ
sở dữ liệu (database server).
Hệ thống mạng gồm hệ thống dây cáp, đường kết nối cùng các thành phần khác
kết nối giữa client và server của hệ thống.

Cài đặt hệ thống client/server







Trong hệ thống client/server đơn giản như đã trình bày ở trên, server thường là
những máy PC hiệu năng cao giao tiếp với client qua mạng nội bộ (LAN).
Server cũng có thể là một hệ máy tầm trung như IBM iSeries, Unix hoặc một hệ
thống máy tính lớn. Server đòi hỏi những thành phần phần cứng và phần mềm
đặc biệt để client có thể thực hiện giao tiếp, kết nối với hệ máy tính lớn và máy
tầm trung.
Hệ thống client/server cũng có thể bao gồm một hoặc nhiều hệ thống máy PC, một
hoặc nhiều hệ máy tầm trung và hệ máy lớn, được đặt ở những địa điểm địa lý tách
biệt. Hệ thống như vậy thường được biết đến như một hệ thống doanh nghiệp.
Hệ thống đơn lẻ và mạng LAN có thể kết nối và chia sẻ dữ liệu qua một hệ thống

mạng riêng (private network), ví dụ như mạng diện rộng (WAN) hoặc mạng công
cộng (public network) như Internet.

Hình 1-1  Thành phần phần cứng của hệ thống client/server


4  SQL Server 2008 căn bản - Hướng dẫn học qua ví dụ

Các thành phần phần mềm của hệ thống client/server
Hình 1-2 biểu diễn các thành phần phần mềm của một hệ thống client/server
điển hình. Ngoài hệ điều hành mạng (network operating system) để quản lý chức
năng hệ thống mạng, server còn cần một hệ quản trị cơ sở dữ liệu (database
management system - DBMS) như Microsoft SQL Server hay Oracle. Các DBMS
này quản lý cơ sở dữ liệu lưu trữ trên server.
Ngược lại với server, mỗi client lại yêu cầu phần mềm ứng dụng (application
software) để thực hiện những việc có ích. Đó có thể là các gói phần mềm thương
mại như gói phần mềm tài chính, hoặc cũng có thể là những phần mềm được viết
cho ứng dụng cụ thể.
Mặc dù chạy trên client, phần mềm ứng dụng lại dùng dữ liệu được lưu trên
server. Để thực hiện điều này, phần mềm ứng dụng dùng các API truy cập dữ liệu
(Application Programing Interface - Giao diện lập trình ứng dụng) như ADO.NET.
Vì các kỹ thuật làm việc với API phụ thuộc vào ngôn ngữ lập trình và bản thân
API được sử dụng, nên bạn sẽ không học những kỹ thuật trên ở cuốn sách này.
Thay vào đó, chúng ta sẽ tìm hiểu về SQL, còn gọi là ngôn ngữ truy vấn có cấu
trúc (Structured Query Language). Thông qua SQL, mọi ứng dụng có thể giao
tiếp được với bất cứ DBMS nào. (Theo quy ước, SQL được phát âm là S-Q-L
hoặc sequel).
Khi các phần mềm trên được cài đặt cho cả client và server, client sẽ thực hiện
giao tiếp với server thông qua các truy vấn SQL (SQL query), hoặc gọi đơn giản là
truy vấn. Những truy vấn này được chuyển tới DBMS thông qua các API. Sau khi

client gửi truy vấn tới DBMS, DBMS thực hiện quá trình thông dịch và gửi lại kết
quả trả về client.
Như bạn thấy trong hình, cả client và server cùng phân chia thực hiện để hoàn
thành quá trình thực thi một công việc của hệ thống client/server. Trong trường
hợp này, DBMS trên server xử lý các yêu cầu của ứng dụng trên client. Về lý
thuyết, điều này sẽ cân bằng khối lượng công việc giữa server và client, giúp hệ
thống hoạt động hiệu quả hơn. Ngược lại, đối với hệ thống xử lý file (file-handling
system), client phải làm mọi việc, do server chỉ được dùng để lưu trữ các file này.


Chương 1  Giới thiệu cơ sở dữ liệu quan hệ và SQL  5 

Phần mềm client, phần mềm server và giao diện SQL
Truy vấn SQL
Kết quả
Client
    Server cơ sở dữ liệu
Phần mềm ứng dụng
    DBMS
API truy cập dữ liệu

    Cơ sở dữ liệu

Phần mềm server



Lưu trữ và quản lý cơ sở dữ liệu của hệ thống client/server, mỗi server đòi hỏi một
hệ quản trị cơ sở dữ liệu (DBMS) như Microsoft SQL Server.
Các xử lý thực hiện bởi DBMS được hiểu là xử lý back-end (back-end processing

- xử lý phía sau, bên dưới), và server cơ sở dữ liệu được hiểu là back-end.

Phần mềm client





Phần mềm ứng dụng thực thi các công việc mà người dùng muốn thực hiện.
Những phần mềm như vậy có thể tự phát triển hoặc mua.
API truy cập dữ liệu (Application Programing Interface - Giao diện lập trình ứng
dụng) cung cấp giao tiếp giữa chương trình ứng dụng và DBMS. ADO.NET là API
mới nhất của Microsoft, cung cấp khả năng giao tiếp trực tiếp với SQL Server. Các
API phiên bản cũ hơn đòi hỏi mô hình truy cập dữ liệu như ADO hoặc DAO, đi kèm
với một driver(1), như OLE DB hay ODBC.
Các xử lý thực hiện bởi phần mềm client được hiểu là xử lý front-end (front-end
processing - xử lý bên trên), và client được hiểu là frontend.

Giao diện SQL (SQL Interface)




Phần mềm ứng dụng giao tiếp với DBMS bằng cách gửi truy vấn SQL thông qua
API truy cập dữ liệu. Khi DBMS nhận truy vấn, nó sẽ cung cấp dịch vụ như trả về
dữ liệu được yêu cầu (kết quả truy vấn - query result) cho client.
SQL là viết tắt của Structured Query Language (ngôn ngữ truy vấn có cấu trúc),
ngôn ngữ chuẩn dùng để làm việc với cơ sở dữ liệu quan hệ.

So sánh hệ thống client/server và hệ thống xử lý file




Trong hệ thống client/server, các xử lý sẽ được ứng dụng phân chia giữa client
và server.
Trong hệ thống xử lý file, mọi xử lý sẽ được thực hiện ở client. Mặc dù client có thể
truy cập được dữ liệu lưu trong file trên server, nhưng không xử lý nào được thực
hiện trên server. Chính vì vậy, hệ thống xử lý file không được coi là một hệ thống
client/server.

Driver: trong ngữ cảnh cuốn sách này, driver là một thành phần phần mềm cho phép ứng dụng tương tác với cơ sở dữ liệu. Nó cung cấp kết
nối tới cơ sở dữ liệu và thực thi giao thức để truyền truy vấn từ client đến cơ sở dữ liệu và kết quả từ cơ sở dữ liệu đến client.
(1)

Hình 1-2  Thành phần phần mềm của hệ thống client/server


6  SQL Server 2008 căn bản - Hướng dẫn học qua ví dụ

Các kiến trúc hệ thống client/server khác
Ở dạng đơn giản nhất, hệ thống client/server bao gồm một server cơ sở dữ
liệu đơn lẻ và một hay nhiều client. Nhiều hệ thống client/server ngày nay còn bổ
sung thêm các server khác. Hình 1-3 là ví dụ mô tả hai hệ thống client/server, trong
đó, một server được thêm vào giữa các client và server cơ sở dữ liệu.
Hình minh họa đầu tiên mô tả về hệ thống trên nền Windows (Windows-based
system) đơn giản. Với hệ thống này, chỉ giao diện người dùng (user interface)
của ứng dụng mới hoạt động trên client. Các xử lý còn lại được thực hiện bởi
một hay nhiều thành phần nghiệp vụ (business component) trên server ứng dụng
(application server). Sau đó, client gửi yêu cầu xử lý tới server ứng dụng. Nếu yêu
cầu này đòi hỏi truy cập dữ liệu trên cơ sở dữ liệu, server ứng dụng tính toán truy

vấn phù hợp và chuyển nó tới server cơ sở dữ liệu. Kết quả câu truy vấn được gửi
trả lại server ứng dụng để server này tiếp tục xử lý, rồi gửi trả lại phản hồi thích
hợp tới client.
Ở hình thứ hai, hệ thống trên nền web (web-based system) cũng thực hiện
quá trình xử lý tương tự. Trong trường hợp này, trình duyệt web (web browser)
trên client được dùng để gửi yêu cầu tới ứng dụng web (web application) chạy
trên server web qua Internet. Ứng dụng web có thể sử dụng các dịch vụ web (web
service) để thực hiện việc xử lý. Sau đó, ứng dụng web hoặc dịch vụ web có thể
chuyển yêu cầu dữ liệu tới server cơ sở dữ liệu.
Mặc dù hình minh họa đưa ra một ý tưởng về kiến trúc của hệ thống client/
server, nhưng trên thực tế hệ thống có thể phức tạp hơn thế. Ví dụ, trong hệ thống
trên nền Windows, các thành phần nghiệp vụ có thể nằm phân tán trên nhiều
server ứng dụng (application server), bất kể số lượng. Đồng thời, các thành phần
này có thể giao tiếp với cơ sở dữ liệu nằm trên bất kể server cơ sở dữ liệu nào
khác. Tương tự, các ứng dụng web và dịch vụ nền web có thể được phân tán trên
nhiều server web, những server web này lại truy cập tới nhiều server cơ sở dữ
liệu. Trong đa số trường hợp, bạn không nhất thiết phải biết kiến trúc hệ thống ra
sao để sử dụng SQL.
Trước khi tiếp tục, bạn nên biết hệ thống client/server không phải là hệ thống
duy nhất hỗ trợ SQL. Ví dụ, các hệ thống máy tính lớn truyền thống và hệ thống
thin client(1) đời mới cũng sử dụng SQL. Không giống như hệ thống client/server,
hầu hết xử lý của những hệ thống này được thực hiện bởi máy tính lớn hoặc các
máy hiệu năng cao. Những thiết bị đầu cuối (terminal) hay PC truy cập tới các hệ
thống này sẽ hầu như không phải thực hiện xử lý nào.

(1)

Thin client: là các máy client mà năng lực xử lý, lưu trữ đều tập trung vào server.



Chương 1  Giới thiệu cơ sở dữ liệu quan hệ và SQL  7 

Hệ thống trên nền Windows sử dụng server ứng dụng
Yêu cầu người dùng

Truy vấn SQL

Phản hồi

Kết quả

Client
Giao diện người dùng

Server ứng dụng
Thành phần nghiệp vụ

Server cơ sở dữ liệu
DBMS
Cơ sở dữ liệu

Hệ thống trên nền web đơn giản
Yêu cầu
người dùng

Yêu cầu
người dùng

Truy vấn
SQL


Internet
Phản hồi
Client
Trình duyệt web

Kết quả

Phản hồi
Server web
Ứng dụng web
Dịch vụ web

Server cơ sở dữ liệu
DBMS
Cơ sở dữ liệu

Tóm lược









Ngoài kiến trúc gồm server cơ sở dữ liệu và client, hệ thống client/server có thể
bao gồm các server bổ sung, như server ứng dụng và server web.
Thành phần nghiệp vụ thực hiện một phần trong quá trình xử lý, và thường được

lưu trữ trên server ứng dụng. Cụ thể, những thành phần này được dùng để xử lý
các yêu cầu cơ sở dữ liệu từ giao diện người dùng hoạt động trên client.
Server web chủ yếu được sử dụng để lưu trữ các ứng dụng web (web application)
và dịch vụ web (web service). Ứng dụng web là ứng dụng được thiết kế để hoạt
động trên server web. Dịch vụ web giống như thành phần nghiệp vụ, chỉ khác là
được thiết kế để chạy được trên server web giống như các ứng dụng web.
Trong hệ thống trên nền web, một trình duyệt web chạy trên client gửi yêu cầu
thông qua Internet tới server web. Sau đó, server web xử lý yêu cầu trên và chuyển
yêu cầu dữ liệu tới server cơ sở dữ liệu.
Nhiều kiến trúc hệ thống phức tạp hơn có thể bao gồm hai hay nhiều server ứng
dụng, server web và server cơ sở dữ liệu.

Hình 1-3  Các kiến trúc hệ thống client/server khác


8  SQL Server 2008 căn bản - Hướng dẫn học qua ví dụ

Giới thiệu mô hình cơ sở dữ liệu quan hệ
Năm 1970, tiến sỹ E. F. Codd đã phát triển mô hình cơ sở dữ liệu mới với tên
gọi cơ sở dữ liệu quan hệ (relational database). Loại cơ sở dữ liệu này đã loại bỏ
được những vấn đề liên quan tới chuẩn file và các thiết kế cơ sở dữ liệu khác. Sử
dụng mô hình quan hệ, bạn có thể giảm thiểu việc dư thừa dữ liệu nhằm tiết kiệm
không gian lưu trữ ổ đĩa và truy xuất dữ liệu hiệu quả. Bạn cũng có thể quan sát
cũng như thao tác dữ liệu một cách trực quan, hiệu quả. Ngày nay, cơ sở dữ liệu
quan hệ đã trở thành chuẩn cho các ứng dụng cơ sở dữ liệu.

Cách tổ chức bảng cơ sở dữ liệu
Mô hình cho cơ sở dữ liệu quan hệ chỉ ra dữ liệu được lưu trữ trên một hoặc
nhiều bảng (table). Và mô hình này cũng cho thấy, mỗi bảng có thể được hình
dung như một ma trận hai chiều gồm các hàng (row) và cột (column). Hình 1-4 mô

tả một bảng quan hệ. Mỗi hàng của bảng này chứa thông tin về một nhà cung cấp.
Trong thực tế, các hàng và cột của bảng cơ sở dữ liệu quan hệ thường được
gọi tên theo thuật ngữ là các bản ghi (record) và trường (field). Một số gói phần
mềm sử dụng một bộ thuật ngữ, một vài gói phần mềm lại sử dụng bộ thuật ngữ
khác hoặc sử dụng kết hợp. Cuốn sách này sử dụng thuật ngữ hàng (row) và cột
(column), bởi đây là những thuật ngữ được dùng trong SQL Server.
Thông thường, mỗi bảng sẽ được mô hình hóa theo các thực thể ngoài thế giới
thực như “nhà cung cấp” (Vendor) hoặc “hóa đơn” (Invoice). Và mỗi cột của bảng
tương ứng với thuộc tính của thực thể đó, như “tên” (Name), “địa chỉ” (Address)
hay “số điện thoại” (Phone Number). Mỗi hàng của bảng tương ứng với một thể
hiện (instance) của thực thể. Mỗi giá trị được lưu trữ tại phần giao giữa hàng và
cột thường được gọi là ô (cell).
Nếu một bảng chứa một hay nhiều cột có khả năng xác định duy nhất mỗi hàng
của bảng, bạn có thể định nghĩa những cột này được là khóa chính (primary key)
của bảng. Ví dụ, khóa chính của bảng Vendors trong hình là cột VendorID. Trong ví
dụ này, khóa chính chỉ chứa một cột. Tuy nhiên, khóa chính cũng có thể chứa hai
hay nhiều cột và trong trường hợp này, nó còn được gọi là khóa chính phức hợp
(composite primary key).
Ngoài khóa chính, một số hệ quản trị cơ sở dữ liệu (DBMS) còn cho phép bạn
định nghĩa thêm các khóa có khả năng xác định duy nhất mỗi hàng trong bảng.
Ví dụ, nếu cột VendorName trên bảng Vendors chứa dữ liệu mang tính duy nhất,
nó có thể được định nghĩa là khóa phụ (non-primary key). Trong SQL Server, cột
VendorName còn được gọi là khóa đơn nhất (unique key).
Index (chỉ mục) mang đến cách thức hiệu quả để truy cập các hàng trên bảng
dựa vào giá trị của một hay nhiều cột. Vì ứng dụng thường truy cập hàng của bảng
bằng cách tham chiếu tới giá trị của khóa, nên một index sẽ được tự động tạo ra
cho mỗi khóa bạn định nghĩa. Tuy nhiên, bạn cũng có thể đánh index cho các cột
khác. Ví dụ, nếu thường xuyên phải sắp xếp các hàng của bảng Vendors theo cột
“Zip Code”, bạn có thể tạo index cho cột này. Tương tự như khóa, index có thể
gồm một hoặc nhiều cột.



Chương 1  Giới thiệu cơ sở dữ liệu quan hệ và SQL  9 

Bảng Vendors trong cơ sở dữ liệu Accounts Payable
Khóa chính

Cột

Hàng

Khái niệm











Cơ sở dữ liệu quan hệ chứa nhiều bảng (table). Bảng chứa nhiều hàng và cột. Các
hàng và cột còn được gọi là bản ghi và trường.
Mỗi bảng sẽ được mô hình hóa theo thực thể trong thế giới thực, ví dụ như “hóa
đơn” (Invoice) hoặc “nhà cung cấp” (Vendor).
Mỗi cột biểu diễn thuộc tính của thực thể, như “tổng tiền” (Amount) của một “hóa
đơn” hoặc “địa chỉ” (Address) của “nhà cung cấp”.
Mỗi hàng chứa một tập giá trị cho thể hiện của thực thể, như một hàng đại diện cho

một “hóa đơn” hay một “nhà cung cấp”.
Phần giao của hàng và cột thường được gọi là ô. Một ô chỉ chứa giá trị đơn.
Phần lớn các bảng đều có khóa chính, xác định duy nhất mỗi hàng trong bảng.
Khóa chính thường là một cột, song cũng có thể chứa hai hay nhiều cột. Nếu một
khóa chính gồm hai hay nhiều cột, nó được gọi là khóa chính phức hợp.
Ngoài khóa chính, một số DBMS còn cho phép bạn định nghĩa một hay nhiều
khóa phụ (non-primary key). Trong SQL Server, các khóa này còn được gọi là
khóa đơn nhất (unique key). Tương tự như khóa chính, khóa phụ giúp xác định
duy nhất mỗi hàng của bảng.
Mỗi bảng cũng có thể được định nghĩa một hay nhiều index (chỉ mục). Index cung
cấp cách thức hiệu quả để truy cập dữ liệu từ một bảng thông qua giá trị trên
những cột cụ thể. Một index được tự động tạo ra cho mỗi khóa chính và khóa phụ
của bảng.

Hình 1-4  Cách tổ chức bảng cơ sở dữ liệu


10  SQL Server 2008 căn bản - Hướng dẫn học qua ví dụ

Cách liên kết các bảng trong cơ sở dữ liệu quan hệ
Các bảng trong cơ sở dữ liệu quan hệ được liên kết với những bảng khác
thông qua giá trị trên các cột xác định. Hai bảng trong Hình 1-5 minh họa khái niệm
này. Ở đây, mỗi hàng của bảng Vendors liên kết với một hay nhiều hàng của bảng
Invoices. Liên kết này được gọi là quan hệ một - nhiều (one-to-many relationship).
Thông thường, các quan hệ tồn tại giữa khóa chính ở một bảng và khóa ngoại
(foreign key) ở một bảng khác. Khóa ngoại có thể là một hay nhiều cột trong một
bảng và trỏ tới khóa chính của một bảng khác. Trong SQL Server, quan hệ cũng
có thể tồn tại giữa khóa đơn nhất (unique key) trên một bảng và khóa ngoại trên
một bảng khác.
Mặc dù quan hệ một - nhiều là trường hợp hay xảy ra nhất, song giữa hai

bảng cũng có thể có quan hệ một - một hoặc nhiều - nhiều. Nếu một bảng có
quan hệ một - một (one-to-one relationship) với một bảng khác, dữ liệu trên hai
bảng có thể được lưu trữ trên một bảng đơn. Vì lý do này, quan hệ một - một
thường ít được sử dụng.
Ngược lại, quan hệ nhiều - nhiều (many-to-many relationship) thường được
thiết lập bằng cách sử dụng một bảng trung gian. Bảng trung gian này sẽ có quan
hệ một - nhiều với hai bảng có quan hệ nhiều - nhiều với nhau. Nói cách khác,
quan hệ nhiều - nhiều có thể được chia nhỏ thành hai quan hệ một - nhiều.


Chương 1  Giới thiệu cơ sở dữ liệu quan hệ và SQL  11 

Quan hệ giữa bảng Vendors và Invoices trong cơ sở dữ liệu
Khóa chính

Khóa ngoại

Khái niệm






Các bảng trong cơ sở dữ liệu quan hệ liên kết tới mỗi bảng khác qua các cột
khóa của chúng. Ví dụ, cột VendorID được dùng để liên kết bảng Vendors và
bảng Invoices ở trên. Cột VendorID trong bảng Invoices được gọi là khóa ngoại
(foreign key), bởi nó xác định tới hàng tương ứng trong bảng Vendors. Mỗi
bảng có thể chứa một hay nhiều khóa ngoại.
Trong SQL Server, khi định nghĩa khóa ngoại cho một bảng, bạn không thể thêm

hàng vào bảng đó với khóa ngoại, trừ khi khóa ngoại tương ứng với một khóa
chính trong bảng liên kết với bảng này.
Quan hệ giữa các bảng trong một cơ sở dữ liệu tương ứng với quan hệ giữa các
thực thể mà bảng đại diện. Loại quan hệ phổ biến nhất là quan hệ một - nhiều, như
minh họa bởi hai bảng Vendors và Invoices ở trên. Mỗi bảng cũng có thể có quan
hệ một - một hoặc quan hệ nhiều - nhiều tới một bảng khác.

Hình 1-5  Cách liên kết các bảng trong cơ sở dữ liệu quan hệ


12  SQL Server 2008 căn bản - Hướng dẫn học qua ví dụ

Cách định nghĩa các cột trong bảng
Khi định nghĩa một cột của bảng, bạn có thể ấn định các thuộc tính cho cột đó,
như thiết kế của bảng Invoices trong Hình 1-6. Một thuộc tính quan trọng nhất của
cột là kiểu dữ liệu, cho biết loại thông tin được lưu trữ trong cột. Với SQL Server
2008, bạn có thể sử dụng một số kiểu dữ liệu (data type) được liệt kê trong hình
minh họa. Khi định nghĩa cột của bảng, bạn thường ấn định kiểu dữ liệu để giảm
thiểu việc sử dụng tài nguyên lưu trữ, bởi điều này sẽ nâng cao hiệu suất của các
câu truy vấn sau này.
Thêm vào đó, bạn phải chỉ ra cột có thể chứa giá trị null hay không. Null thể
hiện giá trị chưa xác định, không có sẵn hoặc không thích hợp. Nếu cột không chấp
nhận giá trị null, bạn buộc phải gán giá trị cho cột đó, hoặc bạn không thể lưu trữ
cả hàng đó trong bảng.
Bạn cũng có thể gán một giá trị mặc định (default value) cho mỗi cột. Giá trị
này sẽ được gán cho cột đó khi không có giá trị nào được cung cấp. Bạn sẽ tìm
hiểu sâu hơn về cách làm việc với giá trị null và giá trị mặc định ở các phần sau
của cuốn sách.
Mỗi bảng có thể chứa cột kiểu số (numeric column), giá trị của cột có thể
được DBMS tự động tạo ra. Trong SQL Server, cột này được gọi là identity column

(cột định danh), và bạn có thể thiết lập bằng cách sử dụng thuộc tính Is Identity,
Identity Seed, và Identity Increment. Bạn sẽ học cách sử dụng các thuộc tính này ở
Chương 5. Còn bây giờ, bạn chỉ cần lưu ý, khóa chính của bảng Vendors và bảng
Invoices - VendorID và InvoiceID - chính là các identity column.


Chương 1  Giới thiệu cơ sở dữ liệu quan hệ và SQL  13 

Các cột của bảng Invoices

Các kiểu dữ liệu phổ biến trong SQL Server
Kiểu

Mô tả

bit

Giá trị 1 hoặc 0 biểu diễn giá trị True (đúng) hoặc False (sai).

int, bigint, smallint,
tinyint

Giá trị số nguyên (integer) với các kích thước khác nhau.

money, smallmoney

Các giá trị tiền tệ với độ chính xác lên tới bốn chữ số thập phân.

decimal, numeric


Các giá trị thập phân với độ chính xác đến ít nhất chữ số có nghĩa.
Các giá trị có thể chứa phần nguyên và phần thập phân.

float, real

Các giá trị số dấu phẩy động chứa giá trị xấp xỉ của số thập phân.

datetime,
smalldatetime

Ngày và giờ.

char, varchar

Chuỗi các chữ cái, ký hiệu và số trong bảng mã ký tự ASCII.

nchar, nvarchar

Chuỗi các ký tự, ký hiệu và số trong bảng mã ký tự Unicode.

Tóm lược





Kiểu dữ liệu của một cột chỉ ra kiểu và kích thước của thông tin có thể được lưu
trữ trong cột đó.
Định nghĩa của mỗi cột cũng cho biết nó có thể chứa hay không chứa giá trị null.
Giá trị null chỉ ra rằng cột đó có giá trị chưa xác định.

Mỗi cột có thể được định nghĩa với một giá trị mặc định. Giá trị mặc định sẽ được
sử dụng khi thêm một hàng vào bảng mà giá trị trên cột này không được cung cấp.
Mỗi cột cũng có thể được định nghĩa như một identity column. Identity column là một
cột kiểu số mà các giá trị của nó được tự động tạo ra mỗi khi thêm hàng vào bảng.

Hình 1-6  Cách định nghĩa các cột trong bảng


14  SQL Server 2008 căn bản - Hướng dẫn học qua ví dụ

So sánh cơ sở dữ liệu quan hệ với các mô hình dữ
liệu khác
Đến đây, khi đã hiểu cách tổ chức cơ sở dữ liệu quan hệ, bạn có thể sẵn sàng
tìm hiểu sự khác biệt giữa cơ sở dữ liệu quan hệ với các mô hình dữ liệu khác.
Đặc biệt, bạn nên biết cách so sánh giữa cơ sở dữ liệu quan hệ với hệ thống file
truyền thống, cơ sở dữ liệu phân cấp (hierachical database), và cơ sở dữ liệu mạng
(network database). Hình 1-7 chỉ ra những khác biệt quan trọng nhất.
Để bắt đầu, bạn cần nhận thức rõ rằng: Do cấu trúc vật lý của cơ sở dữ liệu
quan hệ được định nghĩa và quản lý bởi DMBS, nên việc định nghĩa cấu trúc này
trong các chương trình có sử dụng cơ sở dữ liệu là điều không cần thiết. Thay vào
đó, bạn chỉ cần gọi tên các bảng và cột, và DBMS sẽ thực hiện những việc còn lại.
Ngược lại, với hệ thống file truyền thống, bạn cần định nghĩa và quản lý các file của
hệ thống trong mỗi chương trình sử dụng chúng. Bởi mỗi hệ thống file truyền thống
chỉ là một tập hợp các file chứa dữ liệu của hệ thống. Thêm vào đó, nếu chỉnh sửa
cấu trúc của một file, bạn phải chỉnh sửa tất cả chương trình sử dụng file đó. Đó là
điều không cần thiết đối với cơ sở dữ liệu quan hệ.
Mô hình cơ sở dữ liệu phân cấp và cơ sở dữ liệu mạng là tiền thân của mô
hình cơ sở dữ liệu quan hệ. Mô hình cơ sở dữ liệu phân cấp hạn chế ở chỗ nó chỉ
có thể mô tả quan hệ một - nhiều, còn được gọi là quan hệ cha/con (parent/child
relationship). Mô hình cơ sở dữ liệu mạng là một mở rộng của mô hình cơ sở dữ

liệu phân cấp, hỗ trợ mọi loại quan hệ.
Mặc dù cơ sở dữ liệu phân cấp và cơ sở dữ liệu mạng không có những mặt
hạn chế như hệ thống file truyền thống, song lại không dễ dùng như cơ sở dữ liệu
quan hệ. Cụ thể, mỗi chương trình sử dụng cơ sở dữ liệu phân cấp và cơ sở dữ
liệu mạng sẽ phải điều hướng thông qua cách thức sắp đặt vật lý của bảng mà
chúng sử dụng. Ngược lại, trong cơ sở dữ liệu quan hệ, DBMS cung cấp việc tự
động điều hướng. Ngoài ra, chương trình có thể định nghĩa mối quan hệ ad-hoc(1)
giữa các bảng trong cơ sở dữ liệu quan hệ. Nói cách khác, chương trình có thể sử
dụng các quan hệ không được định nghĩa trong DBMS. Đó là điều bất khả thi đối
với cơ sở dữ liệu phân cấp và cơ sở dữ liệu mạng.
Một loại cơ sở dữ liệu khác không được nhắc tới trong hình vẽ là cơ sở dữ liệu
đối tượng (object database). Loại cơ sở dữ liệu này được thiết kế để lưu trữ và truy
xuất các đối tượng được dùng bởi những ứng dụng được viết bằng ngôn ngữ lập
trình hướng đối tượng như C#, C++ hay Java. Mặc dù có nhiều ưu điểm so với cơ
sở dữ liệu quan hệ, song cơ sở dữ liệu đối tượng cũng tồn tại những nhược điểm
riêng. Nói chung, cơ sở dữ liệu đối tượng hiện chưa được sử dụng rộng rãi, song
cũng có chỗ đứng thích hợp trong một số lĩnh vực, như kỹ thuật xây dựng, viễn
thông, dịch vụ tài chính, vật lý năng lượng và sinh học phân tử.

(1)

Quan hệ ad-hoc: cho phép tạo ra các bảng mới để truy vấn (gọi là truy vấn ad-hoc) từ việc nối các bảng đã tồn tại.


Chương 1  Giới thiệu cơ sở dữ liệu quan hệ và SQL  15 

So sánh cơ sở dữ liệu quan hệ với hệ thống file truyền thống
Tính năng

Hệ thống file truyền thống


Cơ sở dữ liệu quan hệ

Định nghĩa

Mỗi chương trình sử dụng file phải định Các bảng, hàng, cột được định nghĩa
nghĩa file và cách sắp đặt các bản ghi trong cơ sở dữ liệu và được truy cập
trong file.
qua tên.

Bảo trì

Nếu định nghĩa file thay đổi, mỗi chương Khi định nghĩa của bảng thay đổi,
trình sử dụng file phải thay đổi theo.
không cần thay đổi chương trình.

Kiểm tra
tính hợp lệ

Mỗi chương trình thực hiện cập nhật dữ Có thể bao gồm việc kiểm tra dữ liệu
liệu, phải bao gồm đoạn mã kiểm tra dữ hợp lệ.
liệu hợp lệ.

Quan hệ

Mỗi chương trình phải cung cấp và tuân Có thể thực thi mối quan hệ giữa các
theo quan hệ giữa các file.
bảng sử dụng khóa ngoại; có thể sử
dụng quan hệ ad-hoc.


Truy cập
dữ liệu

Mỗi thao tác I/O (vào/ra) xác định rõ bản Chương trình có thể sử dụng SQL để
ghi trong file và vị trí tương đối của nó truy cập dữ liệu được chọn trong một
trong file hoặc giá trị khóa của bản ghi. hoặc nhiều bảng của cơ sở dữ liệu.

So sánh cơ sở dữ liệu quan hệ với hệ thống cơ sở dữ liệu khác
Tính năng

Cơ sở dữ liệu phân cấp Cơ sở dữ liệu mạng

Cơ sở dữ liệu quan hệ

Quan hệ
được hỗ trợ

Một - nhiều.

Một - nhiều, một - một, Một - nhiều, một - một
nhiều - nhiều.
và nhiều - nhiều; các
quan hệ ad-hoc cũng có
thể được sử dụng.

Truy cập
dữ liệu

Chương trình phải bao
gồm đoạn mã để điều

hướng qua cấu trúc vật lý
của cơ sở dữ liệu.

Chương trình phải bao Chương trình có thể truy
gồm đoạn mã để điều cập dữ liệu mà không
hướng qua cấu trúc vật biết cấu trúc vật lý.
lý của cơ sở dữ liệu.

Bảo trì

Các quan hệ mới hay có
thay đổi có thể khó triển
khai trong chương trình
ứng dụng.

Các quan hệ mới hay có Khi định nghĩa của bảng
thay đổi có thể khó triển thay đổi, không cần thay
khai trong chương trình đổi chương trình.
ứng dụng.

Tóm lược






Để làm việc với bất cứ mô hình dữ liệu nào khác ngoài mô hình cơ sở dữ liệu quan
hệ, bạn phải biết cấu trúc vật lý của dữ liệu và mối quan hệ giữa các file hoặc bảng.
Do khó thực hiện việc cài đặt các quan hệ trong hệ thống file truyền thống, dữ liệu

dư thừa thường được lưu trữ trong các kiểu file này.
Mô hình cơ sở dữ liệu phân cấp chỉ hỗ trợ quan hệ một - nhiều, còn gọi là quan hệ
cha/con.
Mô hình cơ sở dữ liệu mạng có khả năng hỗ trợ mọi loại quan hệ.
Cơ sở dữ liệu file truyền thống, cơ sở dữ liệu phân cấp và cơ sở dữ liệu mạng
thường đạt hiệu suất cao hơn cơ sở dữ liệu quan hệ, bởi chúng đòi hỏi ít tài
nguyên của hệ thống hơn. Tuy nhiên, tính linh hoạt và dễ sử dụng của cơ sở dữ
liệu quan hệ thường mang lại nhiều giá trị hơn ảnh hưởng không đáng kể này.

Hình 1-7  So sánh cơ sở dữ liệu quan hệ với các mô hình dữ liệu khác


16  SQL Server 2008 căn bản - Hướng dẫn học qua ví dụ

Giới thiệu về SQL và những hệ thống trên
nền SQL (SQL-based system)
Trong mục này, bạn sẽ nghiên cứu về SQL và tìm hiểu xem các hệ quản trị
cơ sở dữ liệu trên nền SQL đã có những tiến triển ra sao. Thêm vào đó, mục này
cũng trình bày phép so sánh giữa các cơ sở dữ liệu trên nền SQL (SQL-based)
phổ biến nhất hiện nay.

Tóm lược lịch sử SQL
Trước bản phát hành đầu tiên của hệ quản trị cơ sở dữ liệu quan hệ (relational
database management system - RDBMS), mỗi cơ sở dữ liệu đều có một cấu trúc
vật lý duy nhất và một ngôn ngữ lập trình duy nhất mà các lập trình viên cần biết.
Sự xuất hiện của SQL và RDBMS đã làm thay đổi điều đó.
Hình 1-8 liệt kê các mốc lịch sử quan trọng của SQL. Năm 1970, tiến sỹ E. F.
Codd công bố một bài báo mô tả mô hình cơ sở dữ liệu quan hệ khi ông đang làm
việc cùng nhóm nghiên cứu tại IBM. Năm 1978, nhóm nghiên cứu của IBM đã phát
triển hệ thống cơ sở dữ liệu dựa trên mô hình này có tên System/R và một loại

ngôn ngữ truy vấn có tên SEQUEL (Structured English Query Language - Ngôn
ngữ truy vấn tiếng Anh có cấu trúc). Mặc dù khi đó cơ sở dữ liệu và ngôn ngữ truy
vấn chưa bao giờ được phát hành một cách chính thức, nhưng IBM vẫn tiếp tục
phát triển mô hình quan hệ này.
Những năm sau đó, công ty Relational Software, Inc. đã phát hành RDBMS
đầu tiên có tên Oracle. RDBMS này hoạt động trên một máy tính nhỏ và dùng SQL
làm ngôn ngữ truy vấn. Sản phẩm này đã đạt được thành công lớn và công ty
quyết định đổi tên thành Oracle để phản ánh sự thành công đó.
Năm 1982, IBM phát hành phiên bản thương mại đầu tiên của RDBMS trên
nền SQL có tên SQL/DS (SQL/Data System - SQL/Hệ thống dữ liệu), tiếp theo là
phiên bản DB2 (Database 2) vào năm 1985. Cả hai hệ thống đều chỉ chạy trên
máy tính lớn của IBM. Sau đó, DB2 được cấu hình để hoạt động trên các hệ
thống khác, bao gồm những máy sử dụng hệ điều hành Unix và Windows. Ngày
nay, DB2 tiếp tục là hệ cơ sở dữ liệu hàng đầu của IBM.
Trong suốt thập niên 1980, nhiều cơ sở dữ liệu khác trên nền SQL đã được
phát triển, bao gồm cả SQL Server. Mặc dù đều sử dụng SQL làm ngôn ngữ truy
vấn, cách thức triển khai của mỗi hệ thống đều khác nhau. Điều này bắt đầu
thay đổi vào năm 1989, khi Viện Tiêu chuẩn Quốc gia Hoa Kỳ (American National
Standards Institue - ANSI) công bố tập các chuẩn dành cho ngôn ngữ truy vấn cơ
sở dữ liệu đầu tiên. Các chuẩn này được chỉnh sửa một vài lần sau đó, và gần nhất
với thời điểm xuất bản cuốn sách này là năm 2003. Khi các nhà sản xuất cơ sở dữ
liệu cố gắng tuân theo những chuẩn trên, việc cài đặt SQL của họ trở nên tương
đồng hơn. Tuy nhiên, mỗi sản phẩm lại sử dụng hình thức ngôn ngữ (dialect) SQL
riêng, bao gồm cả những bổ sung, và mở rộng (extension) so với chuẩn.
Lợi ích chủ yếu của các chuẩn đem lại là sự đồng nhất của những câu lệnh SQL
cơ bản trên mỗi hình thức ngôn ngữ. Kết quả là, khi bạn học một dạng ngôn ngữ
SQL, bạn cũng có thể dễ dàng tìm hiểu dạng ngôn ngữ SQL khác. Tuy nhiên, việc
chuyển một chương trình sử dụng loại cơ sở dữ liệu này sang loại cơ sở dữ liệu
khác lại không dễ dàng. Thực tế, bất cứ ứng dụng quan trọng nào ít nhất cũng đòi hỏi
những thay đổi nào đó, để có thể chuyển sang sử dụng một loại cơ sở dữ liệu khác.



Chương 1  Giới thiệu cơ sở dữ liệu quan hệ và SQL  17 

Các sự kiện quan trọng trong lịch sử SQL
Năm

Sự kiện

1970 Tiến sỹ E. F. Codd phát triển mô hình cơ sở dữ liệu quan hệ.
1978 IBM phát triển tiền thân của SQL, gọi là Ngôn ngữ truy vấn tiếng Anh có cấu trúc
(Structured English Query Language - SEQUEL). Ngôn ngữ này được sử dụng trong
hệ thống cơ sở dữ liệu có tên System/R, nhưng cả hệ thống và ngôn ngữ truy vấn đều
không được phát hành.
1979 Relational Software, Inc. (sau này đổi tên thành Oracle) phát hành RDBMS đầu tiên.
1982 IBM phát hành hệ thống cơ sở dữ liệu quan hệ đầu tiên của mình, SQL/DS (SQL/Data System).
1985 IBM phát hành DB2 (Database 2).
1987 Microsoft phát hành SQL Server.
1989 Viện Tiêu chuẩn Quốc gia Hoa Kỳ (American National Standards Institute - ANSI) xuất bản
chuẩn ngôn ngữ truy vấn cơ sở dữ liệu đầu tiên, gọi là ANSI/ISO SQL-89, hay SQL1. Các
chuẩn này tương đương với hình thức ngôn ngữ trong ngôn ngữ DB2 SQL của IBM. Vì
đây không phải là chuẩn nghiêm ngặt, nên hầu hết sản phẩm thương mại đều ít bám theo.
1992 ANSI xuất bản chuẩn đã sửa đổi (ANSI/ISO SQL-92, hay SQL2) nghiêm ngặt hơn SQL1
và kết hợp chặt chẽ nhiều tính năng mới. Các chuẩn này giới thiệu các cấp độ của việc
tuân theo chuẩn, chỉ ra những mở rộng có thể có để các hình thái ngôn ngữ vẫn đáp
ứng chuẩn.
1999 ANSI xuất bản SQL3 (ANSI/ISO SQL:1999). Chuẩn này tích hợp nhiều tính năng mới,
bao gồm hỗ trợ đối tượng. Chuẩn này loại bỏ các cấp độ của việc tuân theo chuẩn, và
được thay thế bởi đặc tả cốt lõi cùng các đặc tả cho chín gói bổ sung.
2003 ANSI xuất bản SQL4 (ANSI/ISO SQL:2003). Các chuẩn này giới thiệu những tính năng

liên quan tới XML, chuẩn hóa tuần tự (sequence) và identity column (cột định danh).

Tóm lược






SQL-92 đầu tiên cung cấp ba cấp độ tuân theo chuẩn (level of compliance, hay
level of conformance) là entry (bắt đầu), intermediate (trung gian) và full (đầy
đủ). Cấp độ transitional (quá độ) về sau mới được đưa vào giữa mức entry và
intermediate, vì độ chênh lệch giữa hai cấp độ này quá lớn.
SQL:1999 bao gồm đặc tả cốt lõi (core specification) định nghĩa những yếu tố thiết
yếu phải tuân thủ kèm theo chín gói (package). Mỗi gói này được thiết kế để phục
vụ cho một mảng thị trường riêng.
Mặc dù SQL là ngôn ngữ chuẩn, mỗi nhà cung cấp lại có những hình thái (dialect)
SQL riêng, hay biến thể (variant) SQL riêng, bao gồm cả những mở rộng so với
chuẩn. SQL trên SQL Server có hình thái ngôn ngữ được gọi là Transact-SQL.

Hiểu về “chuẩn SQL” giúp ích cho bạn



Hầu hết câu lệnh SQL cơ bản đều giống nhau trên mọi hình thái ngôn ngữ.
Khi bạn học hình thái ngôn ngữ SQL này, bạn cũng dễ dàng tìm hiểu hình thái ngôn
ngữ khác.

Hiểu về “chuẩn SQL” không giúp được bạn



Bất kỳ chương trình nào cũng đòi hỏi sự thay đổi nếu bạn muốn chuyển đổi từ cơ
sở dữ liệu này sang cơ sở dữ liệu SQL khác.

Hình 1-8  Tóm lược lịch sử SQL


18  SQL Server 2008 căn bản - Hướng dẫn học qua ví dụ

So sánh Oracle, DB2 và SQL Server
Mặc dù cuốn sách nói về SQL Server, nhưng có lẽ bạn cũng muốn biết thêm
về các DBMS khác trên nền SQL. Hình 1-9 so sánh hai trong nhiều DBMS khá phổ
biến: Oracle và DB2, với SQL Server.
Một trong những điểm khác biệt lớn giữa SQL Server và các DBMS khác là
SQL Server chỉ hoạt động trên hệ điều hành Windows. Ngược lại, Oracle và DB2
có thể hoạt động trên hầu hết hệ điều hành như z/OS, Unix và Windows. Vì các
nhà phát triển coi z/OS và Unix ổn định, an toàn hơn Windows, hầu hết công ty lớn
đều sử dụng z/OS hay Unix là hệ điều hành cho server để lưu trữ cơ sở dữ liệu
dành cho các ứng dụng thiết yếu của họ.
Ban đầu, DB2 được thiết kế để chạy trên máy tính lớn của IBM và tiếp tục là
lựa chọn hàng đầu về cơ sở dữ liệu trên các hệ thống này. Nếu hệ thống máy tính
lớn của IBM và các server mới bắt buộc phải hoạt động cùng nhau, DB2 cũng tỏ
rõ sự thống trị ở môi trường lai này. Mặc dù nổi tiếng vì chi phí cao, DB2 cũng nổi
tiếng về độ tin cậy và dễ sử dụng.
Oracle có thể đáp ứng rất nhiều yêu cầu cài đặt của khách hàng và tiếp tục
thống trị thị trường, đặc biệt là thị trường server chạy hệ điều hành Unix. Oracle
hoạt động tốt với các hệ thống lớn và là một hệ thống cực kỳ đáng tin cậy, nhưng
chi phí cao và khó sử dụng.
SQL Server được sử dụng rộng rãi ở các hệ thống cỡ nhỏ và vừa với chi phí
không cao, lại dễ sử dụng. Tuy nhiên, độ tin cậy và khả năng mở rộng để phục vụ

lượng lớn người dùng của SQL Server còn rất hạn chế.
Tất nhiên, cả ba cơ sở dữ liệu trên đang có những bước phát triển bền vững
và cạnh tranh với nhau trên nhiều phân khúc thị trường. Ví dụ, một số nhà phát
triển cho rằng các phiên bản mới nhất của Oracle và DB2 dễ sử dụng hơn. Thêm
vào đó, Oracle và DB2 còn phát hành những phiên bản cơ sở dữ liệu chi phí thấp
ra thị trường. Hệ quả là, Oracle và DB2 đang bắt đầu lấy thị phần từ tay SQL
Server trên các hệ thống cỡ trung bình. Ngược lại, một số nhà phát triển khác lại
cho rằng phiên bản mới nhất của SQL Server đã được cải thiện về tính bảo mật,
độ tin cậy, hiệu suất và tính mở rộng. Vì vậy, họ cho rằng SQL Server đã sẵn sàng
để sử dụng cho những hệ thống thiết yếu với một lượng lớn người dùng.

Các hệ thống trên nền SQL khác
Nhiều hệ thống khác trên nền SQL cũng có thể được sử dụng. Ví dụ, nếu tìm
kiếm trên Internet, bạn sẽ thấy hàng tá sản phẩm cơ sở dữ liệu quan hệ với sự góp
mặt của các công ty như Informix, Sybase và Teradata. Song hành cùng các hệ
thống có bản quyền này là một số hệ thống mã nguồn mở (open source system).
Mã nguồn của các hệ thống này được công khai, tái sử dụng và phân phối miễn
phí. Hai hệ thống phổ biến nhất là MySQL và PostgreSQL. Những cơ sở dữ liệu
này đều hoạt động được trên hầu hết các hệ điều hành, bao gồm cả Unix và Linux.


Chương 1  Giới thiệu cơ sở dữ liệu quan hệ và SQL  19 

Tính năng của Oracle, DB2 và SQL Server
Loại

Oracle

IBM


Microsoft

Phát hành

1979

1985

1987

Phiên bản hiện tại

Oracle 11g

DB2 9

SQL Server 2008

Nền tảng

Unix

OS/390, z/OS và AIX

Windows

z/OS

Unix


Windows

Windows

Điểm mạnh

Tin cậy

Tin cậy

Điểm yếu

Khó sử dụng

Hệ thống điển hình Trung bình đến rất lớn

Dễ sử dụng
Ít tin cậy

Lớn đến rất lớn

Nhỏ đến trung bình

Kết nối mạng

Kiến trúc tập trung

Kết nối mạng

Nhiệm vụ quan trọng


Nhiệm vụ quan trọng

Toàn doanh nghiệp

Toàn doanh nghiệp

Tóm lược





Oracle được sử dụng chủ yếu cho các hệ thống lớn, nhiệm vụ quan trọng và hoạt
động trên một hay nhiều server Unix.
DB2 được sử dụng chủ yếu cho các hệ thống lớn, nhiệm vụ quan trọng và chạy
trên máy tính cỡ lớn của IBM (IBM mainframe), dùng hệ điều hành z/OS hoặc
OS/390.
SQL Server được sử dụng chủ yếu cho các hệ thống nhỏ và trung bình hoạt động
trên một hay nhiều server Windows.

Hình 1-9  So sánh Oracle, DB2 và SQL Server


20  SQL Server 2008 căn bản - Hướng dẫn học qua ví dụ

Các câu lệnh Transact-SQL
Trong mục này, bạn sẽ được học về một số câu lệnh SQL được cung cấp bởi
SQL Server. Như đã thấy, bạn có thể sử dụng một số câu lệnh này để thao tác dữ
liệu, và dùng một số lệnh khác để làm việc với các đối tượng cơ sở dữ liệu. Mặc

dù ngay sau khi đọc xong, bạn chưa thể viết mã các câu lệnh này, nhưng bạn sẽ
có những hình dung về cách làm việc với chúng. Sau đó, bạn đã có sự chuẩn bị
để tìm hiểu chi tiết cách viết các lệnh này được trình bày trong những phần sau
của cuốn sách.

Giới thiệu các câu lệnh SQL
Hình 1-10 tóm tắt một số câu lệnh phổ biến nhất của SQL, được chia làm hai
loại. Các lệnh làm việc với dữ liệu trong cơ sở dữ liệu được gọi là ngôn ngữ thao
tác dữ liệu (data manipulation language - DML). Bốn câu lệnh này thường được
các lập trình viên sử dụng nhiều nhất.
Các lệnh làm việc với những đối tượng trong cơ sở dữ liệu được gọi là ngôn
ngữ định nghĩa dữ liệu (data definition language - DDL). Trên những hệ thống lớn,
các lệnh này thường được quản trị viên cơ sở dữ liệu (database administrator DBA) sử dụng. Đây là công việc của DBA nhằm bảo trì cơ sở dữ liệu đã có, nâng
cao hiệu suất và tạo các cơ sở dữ liệu mới. Với những hệ thống nhỏ hơn, các lập
trình viên SQL cũng có thể là DBA. Bạn sẽ thấy ví dụ về một số lệnh này ở hình
minh họa tiếp theo, đồng thời học cách sử dụng chúng ở Chương 5.


Chương 1  Giới thiệu cơ sở dữ liệu quan hệ và SQL  21 

Các câu lệnh SQL được sử dụng để làm việc với dữ liệu (DML)
Câu lệnh

Mô tả

SELECT

Truy xuất dữ liệu từ một hoặc nhiều bảng.

INSERT


Thêm một hoặc nhiều hàng mới vào bảng.

UPDATE

Thay đổi một hoặc nhiều hàng hiện có trong bảng.

DELETE

Xóa một hoặc nhiều hàng hiện có trong bảng.

Các câu lệnh SQL được sử dụng để làm việc với đối tượng cơ sở
dữ liệu (DDL)
Câu lệnh

Mô tả

CREATE DATABASE

Tạo cơ sở dữ liệu mới.

CREATE TABLE

Tạo bảng mới trong cơ sở dữ liệu.

CREATE INDEX

Tạo index mới cho bảng.

ALTER TABLE


Thay đổi cấu trúc bảng hiện có.

DROP DATABASE

Xóa cơ sở dữ liệu hiện có.

DROP TABLE

Xóa bảng hiện có.

DROP INDEX

Xóa index hiện có.

Tóm lược




Câu lệnh SQL chia làm hai loại: Ngôn ngữ thao tác dữ liệu (DML) giúp bạn làm việc
với dữ liệu trong cơ sở dữ liệu, và ngôn ngữ định nghĩa dữ liệu (DML) giúp bạn làm
việc với các đối tượng trong cơ sở dữ liệu.
Lập trình viên SQL thường làm việc với các câu lệnh DML, trong khi nhà quản trị
cơ sở dữ liệu (DBA) thường sử dụng các câu lệnh DDL.

Hình 1-10  Giới thiệu các câu lệnh SQL


22  SQL Server 2008 căn bản - Hướng dẫn học qua ví dụ


Các câu lệnh điển hình để làm việc với đối tượng cơ
sở dữ liệu
Để giúp bạn hình dung cách sử dụng các câu lệnh DDL trong hình minh họa
trước, Hình 1-11 đưa ra năm ví dụ. Câu lệnh đầu tiên tạo một cơ sở dữ liệu
Account Payable (tài khoản thanh toán) có tên “AP”. Đây là cơ sở dữ liệu được sử
dụng trong nhiều ví dụ xuyên suốt cuốn sách.
Lệnh thứ hai tạo bảng Invoices mà bạn đã từng thấy ở phần trước của chương
này. Đừng quá lo lắng nếu tại thời điểm này bạn không thể hiểu hết các đoạn mã.
Bạn sẽ học cách viết các câu lệnh như vậy ở phần sau của cuốn sách. Chỉ cần nhớ
rằng lệnh này định nghĩa từng cột của bảng, bao gồm kiểu dữ liệu, có chấp nhận
dữ liệu null hay không, và giá trị mặc định của cột (nếu có). Thêm vào đó, nó cũng
định nghĩa ra các identity column, cột khóa chính và cột khóa ngoại.
Câu lệnh thứ ba trong hình thay đổi cấu trúc bảng Invoices bằng cách thêm cột
vào bảng. Tương tự câu lệnh tạo bảng, lệnh này định rõ toàn bộ thuộc tính của cột
mới. Còn câu lệnh thứ tư thực hiện xóa cột vừa được thêm vào.
Câu lệnh cuối cùng tạo ra index trên bảng Invoices. Trong trường hợp này,
index được sử dụng cho cột VendorID - cột thường xuyên được sử dụng khi truy
cập vào bảng. Lưu ý, tên được đặt cho index tuân theo quy ước đặt tên chuẩn mà
bạn sẽ học ở Chương 5.


Chương 1  Giới thiệu cơ sở dữ liệu quan hệ và SQL  23 

Câu lệnh tạo cơ sở dữ liệu mới
CREATE DATABASE AP

Câu lệnh tạo bảng mới
CREATE TABLE Invoices
(InvoiceIDINTNOT NULL IDENTITY PRIMARY KEY,

VendorIDINTNOT NULL
REFERENCES Vendors (VendorID),
InvoiceNumberVARCHAR (50)NOT NULL,
InvoiceDateSMALLDATETIME
NOT NULL,
InvoiceTotalMONEYNOT NULL,
PaymentTotalMONEYNOT NULL DEFAULT 0,
CreditTotalMONEYNOT NULL DEFAULT 0,
TermsIDINTNOT NULL
REFERENCES Terms (TermsID),
InvoiceDueDateSMALLDATETIME
NOT NULL,
PaymentDateSMALLDATETIME
NULL)

Câu lệnh thêm cột mới vào bảng
ALTER TABLE Invoices

ADD BalanceDue MONEY NOT NULL

Câu lệnh xóa cột vừa mới thêm
ALTER TABLE Invoices
DROP COLUMN BalanceDue

Câu lệnh tạo index trên bảng
CREATE INDEX IX_Invoices_VendorID
ON Invoices (VendorID)

Tóm lược






Mệnh đề REFERENCES cho một cột biểu thị cột đó chứa khóa ngoại, đồng thời
cho biết tên của bảng và cột chứa khóa chính. Vì bảng Invoices chứa khóa ngoại
tới bảng Vendors và bảng Terms, nên các bảng này phải được tạo trước bảng
Invoices.
Vì giá trị mặc định được chỉ định cho cột PaymentTotal và CreditTotal, nên khi thêm
một hàng vào bảng, giá trị của cột này không nhất thiết phải được chỉ rõ.
Vì cột PaymentDate chấp nhận giá trị null, khi thêm một hàng vào bảng, nếu giá trị
của cột không được chỉ rõ, giá trị null sẽ được gán cho cột đó.

Hình 1-11  Các câu lệnh điển hình để làm việc với đối tượng cơ sở dữ liệu


24  SQL Server 2008 căn bản - Hướng dẫn học qua ví dụ

Hướng dẫn truy vấn bảng đơn
Hình 1-12 minh họa cách sử dụng câu lệnh SELECT để truy vấn một bảng
đơn trong cơ sở dữ liệu. Ở phía trên của hình, bạn có thể thấy một số cột và hàng
của bảng Invoices. Trong câu lệnh SELECT ngay sau đó, mệnh đề SELECT gọi
tên các cột sẽ được truy xuất, và mệnh đề FROM gọi tên bảng chứa các cột đó,
gọi là bảng cơ sở (base table). Trong trường hợp này, sáu cột sẽ được truy xuất
từ bảng Invoices.
Chú ý cột cuối cùng, BalanceDue, được tính từ ba cột khác của bảng. Nói
cách khác, cột có tên BalanceDue không thực sự tồn tại trong cơ sở dữ liệu. Loại
cột này được gọi là giá trị được tính toán (calculated value), và chỉ tồn tại trong kết
quả truy vấn.
Ngoài mệnh đề SELECT và FROM, lệnh SELECT bao gồm mệnh đề WHERE

và ORDER BY. Mệnh đề WHERE đưa ra tiêu chuẩn để lựa chọn hàng. Trong ví dụ
trên, một hàng chỉ được lựa chọn nếu “balance due (khoản nợ) lớn hơn 0”, và các
hàng trả về được sắp xếp theo cột InvoiceDate.
Hình minh họa cũng chỉ ra bảng kết quả (result table), hay tập kết quả (result
set), được trả về từ câu lệnh SELECT. Tập kết quả là một bảng lôgíc được tạm thời
tạo ra trong cơ sở dữ liệu. Khi một ứng dụng yêu cầu dữ liệu từ cơ sở dữ liệu, nó
sẽ nhận lại tập kết quả.


Chương 1  Giới thiệu cơ sở dữ liệu quan hệ và SQL  25 

Bảng cơ sở Invoices

Câu lệnh SELECT truy xuất và sắp xếp các cột và hàng được
chọn từ bảng Invoices
SELECT InvoiceNumber, InvoiceDate, InvoiceTotal,
PaymentTotal, CreditTotal,
InvoiceTotal - PaymentTotal - CreditTotal AS BalanceDue
FROM Invoices
WHERE InvoiceTotal - PaymentTotal - CreditTotal > 0
ORDER BY InvoiceDate

Tập kết quả được định nghĩa bởi câu lệnh SELECT

Khái niệm






Bạn sử dụng câu lệnh SELECT để truy xuất các cột và hàng được chọn từ bảng
cơ sở. Kết quả của câu lệnh SELECT được gọi là bảng kết quả hay tập kết quả,
giống như hình minh họa ở trên.
Một tập kết quả có thể chứa giá trị được tính toán, được tính từ các cột của bảng.
Việc thực thi câu lệnh SELECT thường được hiểu là một truy vấn (query).

Hình 1-12  Hướng dẫn truy vấn bảng đơn


×