44 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
Trang 1Giớ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
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
Trang 2Giớ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
Trang 3Server cơ sở
dữ liệu
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
• 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
Trang 4Cá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
Trang 5• 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ệ
(1)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.
Trang 6Cá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.
Trang 7Hình 1-3 Các kiến trúc hệ thống client/server khác
Hệ thống trên nền Windows sử dụng server ứng dụng
Kết quả Phản hồi
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
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
Trang 8Giớ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
Trang 9• 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
Trang 10Cá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
Trang 11Hình 1-5 Cách liên kết các bảng trong cơ sở dữ liệu quan hệ
Quan hệ giữa bảng Vendors và Invoices trong cơ sở dữ liệu
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.
Trang 12Cá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
Trang 13Hình 1-6 Cách định nghĩa các cột trong bảng
Các cột của bảng Invoices
Các kiểu dữ liệu phổ biến trong SQL Server
int, bigint, smallint,
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.
Các giá trị có thể chứa phần nguyên và phần thập phân.
datetime,
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
Trang 14So 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.
Trang 15Hì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
So sánh cơ sở dữ liệu quan hệ với hệ thống file truyền thống
Định nghĩa Mỗi chương trình sử dụng file phải định
nghĩa file và cách sắp đặt các bản ghi
trong file.
Các bảng, hàng, cột được định nghĩa trong cơ sở dữ liệu và được truy cập qua tên.
trình sử dụng file phải thay đổi theo. Khi định nghĩa của bảng thay đổi, 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ữ liệu, phải bao gồm đoạn mã kiểm tra dữ
liệu hợp lệ.
Có thể bao gồm việc kiểm tra dữ liệu hợp lệ.
theo quan hệ giữa các file. Có thể thực thi mối quan hệ giữa các 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 ghi trong file và vị trí tương đối của nó
trong file hoặc giá trị khóa của bản ghi.
Chương trình có thể sử dụng SQL để truy cập dữ liệu được chọn trong một 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, nhiều - nhiều. Một - nhiều, một - một 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 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 có thể truy cập dữ liệu mà không biết cấu trúc vật lý.
thay đổi có thể khó triển
khai trong chương trình
ứng dụng.
Các quan hệ mới hay có thay đổi có thể khó triển khai trong chương trình ứng dụng.
Khi định nghĩa của bảng thay đổi, không cần thay đổi chương trình
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
Trang 16Giớ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
Trang 17Hình 1-8 Tóm lược lịch sử SQL
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).
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
Trang 18So 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
Trang 19Hình 1-9 So sánh Oracle, DB2 và SQL Server
Tính năng của Oracle, DB2 và SQL Server
• 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
Trang 20Cá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
Trang 21Hình 1-10 Giới thiệu các câu lệnh SQL
Các câu lệnh SQL được sử dụng để làm việc với dữ liệu (DML)
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)
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.
Trang 22Cá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
Trang 23Hì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
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
(InvoiceID INT NOT NULL IDENTITY PRIMARY KEY,
InvoiceNumber VARCHAR (50) NOT NULL,
InvoiceDate SMALLDATETIME NOT NULL,
PaymentTotal MONEY NOT NULL DEFAULT 0,
CreditTotal MONEY NOT NULL DEFAULT 0,
InvoiceDueDate SMALLDATETIME NOT NULL,
PaymentDate SMALLDATETIME 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 đó
Trang 24Hướ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
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ả
Trang 25• 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
Trang 26Hướng dẫn nối dữ liệu từ hai hay nhiều bảng
Hình 1-13 thể hiện câu lệnh SELECT lấy dữ liệu từ hai bảng Thao tác này
được gọi là phép nối (join), bởi dữ liệu từ hai bảng sẽ được nối với nhau tạo
thành một tập kết quả Ví dụ, câu lệnh SELECT trong hình nối dữ liệu từ các bảng Invoices và Vendors
Phép nối trong (inner join) là kiểu kết nối phổ biến Khi bạn sử dụng phép nối
trong, các hàng từ hai bảng trong câu lệnh sẽ được đưa vào tập kết quả chỉ khi các cột liên quan tương ứng của chúng bằng nhau Sự tương ứng của các cột được định rõ trong mệnh đề FROM của câu lệnh SELECT Ví dụ, trong câu lệnh SELECT trên hình minh họa, các hàng từ các bảng Invoices và Vendors chỉ được lựa chọn khi giá trị của cột VendorID trong bảng Vendors bằng giá trị của cột VendorID trên một hay nhiều hàng trong bảng Invoices Nếu như không có “hóa đơn” nào cho một “nhà cung cấp” cụ thể, “nhà cung cấp” đó sẽ không được đưa vào tập kết quả.Mặc dù hình trên chỉ minh họa cách kết nối dữ liệu từ hai bảng, bạn cũng nên biết rằng bạn có thể kết nối dữ liệu từ nhiều bảng Ví dụ, nếu muốn thêm dữ liệu
từ bảng InvoiceLineItems vào tập kết quả trong hình trên, bạn có thể viết mệnh đề FROM trong lệnh SELECT như sau:
Trang 27Hình 1-13 Hướng dẫn nối dữ liệu từ hai hay nhiều bảng
Câu lệnh SELECT nối dữ liệu từ hai bảng Vendors và Invoices
SELECT VendorName, InvoiceNumber, InvoiceDate, InvoiceTotal
FROM Vendors INNER JOIN Invoices
ON Vendors.VendorID = Invoices.VendorID
WHERE InvoiceTotal >= 500
ORDER BY VendorName, InvoiceTotal DESC
Tập kết quả được định nghĩa bằng câu lệnh SELECT
Khái niệm
• Phép nối (join) cho phép bạn kết hợp dữ liệu từ hai hay nhiều bảng thành một tập
kết quả
• Kiểu nối thường gặp nhất là phép nối trong (inner join) Kiểu nối này trả về các
hàng từ cả hai bảng chỉ khi các cột liên quan của chúng tương ứng với nhau
• Phép nối ngoài (outer join) trả về các hàng từ một bảng trong kết nối ngay cả khi
bảng còn lại không chứa hàng tương ứng
Trang 28Hướng dẫn thêm, sửa và xóa dữ liệu trong bảng
Hình 1-14 chỉ ra cách bạn có thể sử dụng câu lệnh INSERT, UPDATE và DELETE để chỉnh sửa dữ liệu trên bảng Ví dụ, câu lệnh đầu tiên trong hình là lệnh INSERT thêm một hàng vào bảng Invoices Mệnh đề INSERT đưa vào tên các cột, giá trị của các cột này được cung cấp trong mệnh đề VALUES Bạn cần chỉ định giá trị cho các cột không phải là cột identity column, cột cho phép giá trị null hoặc cột được định nghĩa giá trị mặc định
Hai câu lệnh UPDATE trong hình minh họa cách thay đổi dữ liệu trên một hay nhiều hàng của bảng Ví dụ, câu lệnh đầu tiên gán giá trị 35.89 cho cột CreditTotal của một hóa đơn trên bảng Invoices, với mã InvoiceNumber bằng 367447 Câu lệnh thứ hai cộng 30 ngày vào ngày đáo hạn hóa đơn của mỗi hàng trên bảng Invoices có cột TermsID bằng 4
Để xóa các hàng ra khỏi bảng, bạn sử dụng câu lệnh DELETE Ví dụ, câu lệnh DELETE đầu tiên trong hình xóa các hóa đơn có InvoiceNumber bằng 4-342-8096
ra khỏi bảng Invoices Câu lệnh DELETE thứ hai xóa tất cả các hóa đơn có dư nợ bằng 0
Trước khi tiếp tục, bạn nên biết, các lệnh INSERT, UPDATE và DELETE
thường được gọi là truy vấn thao tác (action query - hay còn gọi là truy vấn hành động), bởi chúng thực hiện một tác động lên cơ sở dữ liệu Điều này đối lập với
câu lệnh SELECT được hiểu là một câu truy vấn, bởi câu lệnh SELECT chỉ thực hiện truy vấn trên cơ sở dữ liệu Khi sử dụng thuật ngữ truy vấn trong cuốn sách này, bạn có thể hiểu rằng đó là câu lệnh SELECT
Trang 29Hình 1-14 Hướng dẫn thêm, sửa và xóa dữ liệu trong bảng
Câu lệnh thêm một hàng vào bảng Invoices
INSERT INTO Invoices (VendorID, InvoiceNumber, InvoiceDate,
InvoiceTotal, TermsID, InvoiceDueDate)
Câu lệnh xóa một hóa đơn được chọn ra khỏi bảng Invoices
DELETE FROM Invoices
WHERE InvoiceNumber = '4-342-8069'
Câu lệnh xóa toàn bộ hóa đơn đã thanh toán ra khỏi bảng Invoices
DELETE FROM Invoices
WHERE InvoiceTotal - PaymentTotal - CreditTotal = 0
Khái niệm
• Bạn sử dụng câu lệnh INSERT để thêm hàng vào bảng
• Bạn sử dụng câu lệnh UPDATE để thay đổi giá trị của một hay nhiều hàng của bảng tùy theo điều kiện được chỉ định
• Bạn sử dụng câu lệnh DELETE để xóa một hay nhiều hàng của bảng tùy theo điều kiện được chỉ định
• Việc thực thi câu lệnh INSERT, UPDATE hay DELETE thường được gọi là truy vấn thao tác.
Trang 30cả hai mà không ảnh hưởng tới việc cơ sở dữ liệu thông dịch mã lệnh.
Mặc dù bạn có thể viết mã SQL với định dạng tự do, nhưng bạn nên tuân theo những khuyến nghị viết mã được biểu diễn trong Hình 1-15 Trước tiên, bạn nên viết mỗi mệnh đề của một câu lệnh trên một dòng mới Ngoài ra, bạn nên chia các mệnh đề dài thành nhiều dòng và thực hiện lùi đầu dòng ở các dòng tiếp theo trong khối mệnh đề đó Bạn cần viết hoa chữ cái đầu của mỗi từ khóa để dễ nhận biết, đồng thời viết hoa chữ cái đầu trong mỗi từ của tên bảng và tên cột Cuối cùng,
bạn nên chú thích cho những đoạn mã khó hiểu.
Ví dụ, phần phía trên Hình 1-15 minh họa các khuyến nghị khi viết mã lệnh Ví
dụ đầu tiên thể hiện câu lệnh SELECT không được định dạng, khá khó đọc Ngược lại, câu lệnh này trở nên dễ đọc hơn sau khi áp dụng những khuyến nghị trên, như bạn thấy ở ví dụ thứ hai
Ví dụ thứ ba minh họa cách viết một khối chú thích (block comment) Loại chú
thích này được viết ở đầu mỗi lệnh và được dùng để giải thích cho toàn bộ câu lệnh Khối chú thích có thể đặt bên trong một lệnh để mô tả khối mã lệnh, nhưng cách này không phổ biến
Ví dụ thứ tư trong hình minh họa gồm dòng chú thích đơn (single-line comment)
Loại chú thích này được sử dụng chủ yếu để giải thích cho một dòng mã lệnh Dòng chú thích đơn có thể được viết riêng trên một dòng như trong hình minh họa, hoặc cũng có thể ở cuối dòng mã lệnh
Mặc dù nhiều lập trình viên thường viết mã lệnh đi kèm với chú thích, nhưng bạn cũng không cần thực hiện điều này nếu mã lệnh của bạn dễ đọc và dễ hiểu Thay vào đó, bạn chỉ nên chú thích để những phần mã lệnh khó hiểu trở thành sáng sủa dễ hiểu Và nếu thay đổi mã lệnh, bạn nên nhớ thay đổi cả chú thích Bằng cách này, chú thích sẽ luôn luôn phản ánh chính xác mã lệnh thực hiện việc gì
Trang 31Hình 1-15 Hướng dẫn viết mã SQL
Câu lệnh SELECT khó đọc
select invoicenumber, invoicedate, invoicetotal,
invoicetotal - paymenttotal - credittotal as balancedue
from invoices where invoicetotal - paymenttotal –
credittotal > 0 order by invoicedate
Câu lệnh SELECT được định dạng để mã dễ đọc
Select InvoiceNumber, InvoiceDate, InvoiceTotal,
InvoiceTotal - PaymentTotal - CreditTotal As BalanceDue
SELECT InvoiceNumber, InvoiceDate, InvoiceTotal,
InvoiceTotal - PaymentTotal - CreditTotal AS BalanceDue
FROM Invoices
Câu lệnh SELECT với dòng chú thích đơn
SELECT InvoiceNumber, InvoiceDate, InvoiceTotal,
InvoiceTotal - PaymentTotal - CreditTotal AS BalanceDue
Cột thứ tư tính dư nợ của mỗi hóa đơn
FROM Invoices
Khuyến nghị khi viết mã lệnh
• Bắt đầu mỗi mệnh đề trên một dòng mới
• Chia nhỏ mệnh đề dài thành nhiều dòng và thực hiện lùi đầu dòng
• Viết hoa chữ cái đầu tiên của mỗi từ khóa và từng từ trong tên bảng cũng như tên cột
• Sử dụng chú thích cho những phần mã lệnh khó hiểu Sau đó, hãy đảm bảo chú
thích của bạn đúng và được cập nhật khi có thay đổi
• Xuyên suốt cuốn sách, các từ khóa của SQL được viết hoa để bạn dễ dàng nhận
ra chúng Tuy nhiên, khi bạn viết mã lệnh của riêng mình, điều này không thực sự cần thiết
Trang 32Hướng dẫn làm việc với các đối tượng cơ
sở dữ liệu khác
Ngoài những gì bạn đã được học về bảng, cơ sở dữ liệu quan hệ còn chứa những đối tượng khác Trong hai mục sắp tới, bạn sẽ được giới thiệu bốn đối tượng: view, stored procedure (thủ tục được lưu trữ), trigger và các hàm người dùng định nghĩa (user-defined function) Trong Chương 1 và Chương 3 cuốn "SQL Server 2008 nâng cao - Hướng dẫn học qua ví dụ", bạn sẽ tìm hiểu thêm về cách viết mã và sử dụng những đối tượng này
Hướng dẫn làm việc với view
View (khung nhìn) là một truy vấn được định nghĩa sẵn và lưu trong cơ sở dữ
liệu Để tạo một view, bạn sử dụng câu lệnh CREATE VIEW như trong Hình 1-16 Câu lệnh này giúp câu lệnh SELECT bạn chỉ định được lưu trữ trong cơ sở dữ liệu Với trường hợp này, câu lệnh CREATE VIEW tạo ra một view có tên VendorsMin
để trả về ba cột từ bảng Vendors
Khi tạo view, bạn có thể tham chiếu nó thay cho bảng trong phần lớn các
câu lệnh SQL Vì lý do này, đôi khi view được gọi là bảng khung nhìn (viewed table) Ví dụ, câu lệnh SELECT được mô tả trong Hình 1-16 tham chiếu đến view
VendorsMin thay vì tham chiếu đến bảng Vendors Chú ý, câu lệnh SELECT sử dụng toán tử * để lấy ra toàn bộ ba cột của view VendorsMin
Bạn có thể để người dùng truy vấn từ view và ngăn không cho truy vấn từ các bảng tạo nên view đó Bằng cách này, view có thể được sử dụng để giới hạn, cho phép người dùng nhìn thấy các cột và hàng của một bảng Ngoài ra, bạn có thể đơn giản hóa việc truy cập của người dùng đến một hay nhiều bảng bằng cách viết truy vấn SELECT phức tạp dưới dạng view
Trang 33Hình 1-16 Hướng dẫn làm việc với view
Câu lệnh CREATE VIEW tạo view có tên VendorsMin
CREATE VIEW VendorsMin AS
SELECT VendorName, VendorState, VendorPhone
FROM Vendors
Bảng ảo được biểu diễn bởi view
Câu lệnh SELECT sử dụng view VendorsMin
SELECT * FROM VendorsMin
WHERE VendorState = 'CA'
ORDER BY VendorName
Kết quả trả về của câu lệnh SELECT
Tóm lược
• View được tạo nên bởi câu lệnh SELECT được lưu trữ trong cơ sở dữ liệu Do
view được lưu lại như một phần của cơ sở dữ liệu, các ứng dụng có thể quản lý view một cách độc lập
• View hoạt động như một bảng ảo Vì bạn có thể viết mã tên view ở bất cứ nơi nào
tên bảng có thể viết trong câu lệnh SQL, nên đôi khi, view được gọi là bảng khung nhìn (viewed table).
• View có thể được sử dụng để giới hạn dữ liệu mà người dùng được phép truy cập hoặc hiển thị dữ liệu theo định dạng giúp người dùng dễ hiểu Ở một số cơ sở dữ liệu, người dùng chỉ có thể truy cập dữ liệu thông qua view
Trang 34Hướng dẫn làm việc với stored procedure, trigger, hàm người dùng định nghĩa
Stored procedure (thủ tục được lưu trữ) là tập gồm một hay nhiều câu lệnh SQL
được lưu trữ cùng nhau trong cơ sở dữ liệu Để tạo một stored procedure, bạn sử dụng câu lệnh CREATE PROCEDURE như trong Hình 1-17 Ở ví dụ này, stored procedure chứa một câu lệnh SELECT duy nhất Để sử dụng stored procedure, bạn có thể gửi yêu cầu để nó thực hiện tác vụ Một cách để làm được điều này là
sử dụng lệnh Transact-SQL EXEC như trong hình Bạn cũng có thể chạy stored procedure này từ một chương trình ứng dụng bằng cách sử dụng những câu lệnh thích hợp Cách thực hiện phụ thuộc vào ngôn ngữ lập trình và API bạn sử dụng
để truy cập cơ sở dữ liệu
Khi server nhận yêu cầu, nó sẽ thực thi stored procedure Nếu stored cedure chứa một câu lệnh SELECT như trong hình này, tập kết quả được gửi lại chương trình gọi nó Nếu stored procedure chứa lệnh INSERT, UPDATE hoặc DELETE, những xử lý thích hợp sẽ được thực hiện
pro-Chú ý, stored procedure trong hình chấp nhận tham số đầu vào (input parameter) có tên @State từ ứng dụng gọi nó Giá trị của tham số này sẽ được
thay thế cho tham số trong mệnh đề WHERE để kết quả trả về chỉ chứa những nhà cung cấp ở một bang (state) nào đó Khi thực hiện xong, stored procedure cũng
có thể chuyển tham số đầu ra (output parameter) cho ứng dụng gọi nó Thêm vào
đó, stored procedure có thể bao gồm ngôn ngữ điều khiển luồng (control-of-flow language) xác định các xử lý sẽ được hoàn tất dựa vào các điều kiện cụ thể Bạn
sẽ tìm hiểu chi tiết cách viết stored procedure trong Chương 3 cuốn "SQL Server
2008 nâng cao - Hướng dẫn học qua ví dụ"
Trigger là một loại stored procedure đặc biệt, được tự động thực hiện khi một
thao tác thêm (insert), cập nhật (update) hay xóa (delete) được thực thi trên bảng Trigger thường được sử dụng để kiểm tra tính hợp lệ của dữ liệu trước khi thêm hoặc cập nhật một hàng, và để đảm bảo mối quan hệ giữa các bảng
Hàm người dùng định nghĩa (user-defined function - UDF) cũng là một loại thủ
tục đặc biệt Sau khi thực hiện xử lý, UDF sẽ trả về một giá trị đơn hoặc một bảng cho chương trình gọi nó Bạn sẽ được học cách viết mã cũng như sử dụng hàm người dùng định nghĩa và trigger ở Chương 3 cuốn "SQL Server 2008 nâng cao - Hướng dẫn học qua ví dụ"
Trang 35Hình 1-17 Hướng dẫn làm việc với stored procedure, trigger và hàm người dùng định nghĩa
Câu lệnh CREATE PROCEDURE cho thủ tục có tên là
spVendorsByState
CREATE PROCEDURE spVendorsByState @State char(2) AS
SELECT VendorName, VendorState, VendorPhone
FROM Vendors
WHERE VendorState = @State
ORDER BY VendorName
Câu lệnh thực thi stored procedure spVendorsByState
EXEC spVendorsByState 'CA'
Tập kết quả tạo ra khi stored procedure được thực thi
Khái niệm
• Stored procedure là một hay nhiều câu lệnh SQL được biên dịch và lưu trữ trong
cơ sở dữ liệu Stored procedure có thể được khởi động từ mã ứng dụng trên client
• Stored procedure giúp nâng cao hiệu suất cơ sở dữ liệu bởi các câu lệnh SQL trong đã được biên dịch và tối ưu hóa trong lần đầu tiên chúng được thực thi Ngược lại, các câu lệnh SQL được gửi từ client tới server phải được biên dịch và tối ưu hóa mỗi khi thực thi
• Ngoài câu lệnh SELECT, mỗi stored procedure có thể chứa các câu lệnh khác như
INSERT, DELETE và UPDATE Nó cũng có thể chứa ngôn ngữ điều khiển luồng,
giúp bạn thực hiện xử lý theo điều kiện ở trong stored procedure
• Trigger là loại thủ tục đặc biệt, được thực thi mỗi khi hàng được thêm vào, cập nhật
hay xóa khỏi bảng Trigger chủ yếu được sử dụng để kiểm tra tính hợp lệ của dữ liệu trong hàng được thêm hoặc cập nhật trong bảng
• Hàm người dùng định nghĩa (UDF) là loại thủ tục đặc biệt, có khả năng trả về một
giá trị đơn hoặc một bảng
Trang 36Hướng dẫn sử dụng SQL từ một chương trình ứng dụng
Cuốn sách này sẽ dạy bạn cách dùng SQL trong môi trường SQL Server Tuy nhiên, SQL cũng thường được sử dụng từ các chương trình ứng dụng Vì vậy, ở các mục tiếp theo, bạn sẽ có những hình dung chung nhất về điều này Và bạn cũng dễ dàng nhận ra câu lệnh SQL trong một chương trình ứng dụng, bởi chúng giống như những câu lệnh bạn đã tìm hiểu
Các mô hình truy cập dữ liệu phổ biến
Hình 1-18 chỉ ra ba cách phổ biến để một ứng dụng có thể truy cập cơ sở dữ liệu SQL Server Ví dụ, để truy cập cơ sở dữ liệu SQL Server từ một ứng dụng
.NET được viết bằng C# hay Visual Basic, bạn có thể sử dụng ADO.NET Đây là
mô hình truy cập dữ liệu (data access model) mới nhất của Microsoft, có thể tương
tác trực tiếp tới SQL Server
Để truy cập SQL Server từ một ứng dụng Visual Basic 6, bạn có thể sử dụng
mô hình truy cập dữ liệu cũ hơn, đó là ADO Mô hình này là tiền thân của ADO.NET, linh hoạt và dễ sử dụng Không giống như ADO.NET, ADO đòi hỏi một phần mềm đi kèm để tương tác với SQL Server, gọi là driver
Mặc dù ADO vẫn được sử dụng, nhưng việc dùng ADO.NET đang ngày càng
phổ biến, nhất là ứng dụng web Bởi những ứng dụng này thường làm việc với dữ liệu phi kết nối (disconnected data) Nghĩa là, khi ứng dụng web gửi phản hồi tới
client, chúng sẽ không duy trì kết nối (connection) tới cơ sở dữ liệu nữa Và ADO
NET sử dụng kiến trúc dữ liệu phi kết nối (disconnected data architecture) để làm
việc dễ dàng hơn với dữ liệu phi kết nối
Mô hình truy cập dữ liệu thứ ba trong hình là JDBC, được dùng bởi các ứng dụng Java Giống như ADO, JDBC đòi hỏi phải có driver để giao tiếp tới SQL Server
Trang 37Hình 1-18 Các mô hình truy cập dữ liệu phổ biến
Những lựa chọn phổ biến để truy cập dữ liệu SQL Server
Tóm lược
• Các ứng dụng sử dụng mô hình truy cập dữ liệu để làm việc với dữ liệu trên cơ
sở dữ liệu SQL Server Với các ứng dụng NET được viết bằng C# hay Visual
Basic, mô hình thường được sử dụng là ADO.NET Với các ứng dụng Java, mô hình điển hình là JDBC (Java Database Connectivity) Còn với các ứng dụng Visual Basic 6, mô hình đặc trưng là ADO (ActiveX Data Object).
• Mỗi mô hình truy cập dữ liệu định nghĩa tập các đối tượng bạn có thể dùng để kết nối và làm việc với cơ sở dữ liệu SQL Server Chẳng hạn, trong hình mô tả bên trên, mỗi mô hình đều chứa đối tượng kết nối, dùng để chỉ định thông tin kết nối tới cơ sở dữ liệu
• Một số mô hình truy cập dữ liệu yêu cầu có các phần mềm đi kèm, được gọi là
driver, dùng để giao tiếp tới SQL Server Ví dụ, ADO đòi hỏi OLE DB driver, và
JDBC đòi hỏi Java driver
• ADO.NET, mô hình truy cập dữ liệu mới nhất của Microsoft, đã bao gồm sẵn driver để giao tiếp trực tiếp tới SQL Server
Trang 38Hướng dẫn sử dụng ADO.NET từ ứng dụng NET
Để minh họa cách sử dụng mô hình truy cập dữ liệu, Hình 1-19 giới thiệu những đối tượng ADO.NET cơ bản được dùng trong ứng dụng NET Và ở hai hình minh họa tiếp theo, bạn sẽ thấy một số dòng mã lệnh dùng để tạo và sử dụng những đối tượng này Hãy nhớ, còn rất nhiều điều về ADO.NET bạn cần tìm hiểu thêm ngoài những gì đã trình bày ở đây
Khi phát triển ứng dụng NET, bạn có thể chọn một vài ngôn ngữ để phát triển, nhưng phổ biến nhất là Visual Basic và C# Ngôn ngữ bạn chọn phần lớn phụ thuộc vào sở thích cá nhân Để tìm hiểu thêm về ADO.NET với Visual Basic, tác
giả khuyến nghị đọc cuốn sách Murach’s Visual Basic 2008 Hoặc nếu bạn muốn
sử dụng ADO.NET với C#, tác giả khuyến nghị đọc cuốn sách Murach’s C# 2008.
Khi làm việc với ADO.NET, dữ liệu sử dụng bởi ứng dụng thường được lưu
trong dataset (tập dữ liệu), là đối tượng chứa một hay nhiều data table (bảng dữ liệu) Để tải dữ liệu vào một data table, bạn sử dụng data adapter (bộ điều hợp dữ liệu) Chức năng chính của data adapter là quản lý luồng dữ liệu giữa dataset và
cơ sở dữ liệu Để làm được điều này, data adapter sử dụng các command (lệnh)
định nghĩa những câu lệnh SQL Ví dụ, với command để truy xuất dữ liệu thì định nghĩa câu lệnh là SELECT Tiếp theo, command kết nối đến cơ sở dữ liệu thông
qua một connection (kết nối) và truyền câu lệnh SELECT tới cơ sở dữ liệu Sau khi
câu lệnh SELECT được thực thi, kết quả được gửi lại data adapter để lưu vào data table Sau đó đóng kết nối
Để cập nhật dữ liệu trong cơ sở dữ liệu, data adapter sử dụng command định nghĩa các lệnh INSERT, UPDATE hay DELETE trên một data table Command này
sẽ sử dụng một kết nối tới cơ sở dữ liệu và thực hiện thao tác theo yêu cầu Khi thao tác hoàn tất, kết nối sẽ bị đóng lại cho đến khi thao tác tiếp theo được thực hiện trên cơ sở dữ liệu
Trang 39Hình 1-19 Hướng dẫn sử dụng ADO.NET từ ứng dụng NET
Đối tượng ADO.NET cơ bản trong ứng dụng NET
• Một ứng dụng có thể lưu trữ dữ liệu dưới dạng data table bên trong dataset Data
table có định dạng hàng và cột giống như bảng trong cơ sở dữ liệu SQL Server, và mỗi dataset có thể chứa một hay nhiều data table
• Để truy xuất dữ liệu từ cơ sở dữ liệu và lưu lại trong data table, bạn có thể sử dụng
data adapter để truyền câu lệnh SELECT được lưu trong một command Tiếp đến, command này sẽ sử dụng một connection để kết nối tới cơ sở dữ liệu và truy xuất
dữ liệu Sau đó, dữ liệu được truyền lại data adapter để lưu vào dataset
• Để cập nhật dữ liệu trong cơ sở dữ liệu thông qua dữ liệu trong data table, bạn có thể dùng data adapter để truyền câu lệnh INSERT, UPDATE hoặc DELETE đã lưu trong một command Và command này sẽ sử dụng một connection để kết nối đến
cơ sở dữ liệu và cập nhật cơ sở dữ liệu
• Sau khi đã thực hiện truy xuất hoặc cập nhật dữ liệu, kết nối sẽ được đóng lại,
đồng thời giải phóng các tài nguyên mà kết nối đó sử dụng Đây được gọi là kiến trúc dữ liệu phi kết nối.
Trang 40Mã Visual Basic truy xuất dữ liệu từ cơ sở dữ liệu SQL Server
Hình 1-20 biểu thị đoạn mã Visual Basic sử dụng các đối tượng ADO.NET đã nêu ở hình trước Đoạn mã này được lấy từ một ứng dụng đơn giản có nhiệm vụ truy xuất và hiển thị dữ liệu từ bảng Vendors Nó tạo các đối tượng ADO.NET được dùng bởi ứng dụng và sử dụng chúng để tải dữ liệu vào trong data table Mặc dù không hy vọng bạn hiểu đoạn mã lệnh này, nhưng tôi hy vọng nó sẽ mang lại cho bạn cảm nhận về cách làm việc với SQL từ một chương trình ứng dụng
Đoạn mã bắt đầu với việc tạo đối tượng connection, data adapter, command
và dataset Tại thời điểm này, các đối tượng trên không chứa thông tin đặc trưng nào của ứng dụng Các dòng mã tiếp theo sẽ cung cấp các thông tin này Ví dụ, dòng mã tiếp theo gán chuỗi kết nối (connection string) cho đối tượng connection Chuỗi kết nối trong ADO.NET chứa thông tin cần để kết nối tới cơ sở dữ liệu.Sau khi chuỗi kết nối được thiết lập, câu lệnh tiếp theo gán đối tượng connection cho đối tượng command Nghĩa là, khi câu lệnh chứa trong command được thực thi, thì đối tượng command có thể sử dụng chuỗi kết nối để kết nối tới cơ sở dữ liệu Dòng mã tiếp theo xác định câu lệnh SELECT của đối tượng command, dòng
mã tiếp nữa gán đối tượng command này cho data adapter để quản lý thao tác thu nhận dữ liệu
Ba câu lệnh cuối cùng thực hiện mở kết nối, truy xuất dữ liệu và đưa vào data table, sau đó đóng kết nối Chú ý, câu lệnh truy xuất dữ liệu được thực hiện thông qua data adapter Data adapter này chứa tham chiếu tới đối tượng command mà chứa câu lệnh SELECT Cũng cần chú ý thêm rằng, câu lệnh này đặt tên bảng sẽ lưu trữ dữ liệu được truy xuất từ câu lệnh SELECT Trong trường hợp này, dữ liệu được lưu thành một bảng có tên Vendors
Đến đây, sau khi đã đọc đoạn mã, bạn có thể thấy có nhiều thành phần tham gia vào việc truy cập tới cơ sở dữ liệu SQL Server từ chương trình ứng dụng Tuy nhiên, bạn có thể thấy, chỉ có một dòng mã sử dụng SQL Dòng mã này chỉ định câu lệnh SELECT Tất nhiên, nếu chương trình cũng cung cấp việc cập nhật
dữ liệu trong bảng Vendors, chương trình sẽ bao gồm các câu lệnh INSERT, UPDATE và DELETE Với những kỹ năng học được từ cuốn sách này, bạn sẽ không gặp khó khăn khi viết mã lệnh SQL cần thiết cho ứng dụng