1. Trang chủ
  2. » Công Nghệ Thông Tin

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

80 536 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 80
Dung lượng 3,35 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

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

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 2

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

Trang 3

Server 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 4

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

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 6

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.

Trang 7

Hì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 8

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

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 10

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

Trang 11

Hì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 12

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

Trang 13

Hì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 14

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.

Trang 15

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

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 16

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

Trang 17

Hì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 18

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

Trang 19

Hì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 20

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

Trang 21

Hì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 22

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

Trang 23

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

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 24

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

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 26

Hướ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 27

Hì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 28

Hướ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 29

Hì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 30

cả 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 31

Hì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 32

Hướ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 33

Hì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 34

Hướ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 35

Hì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 36

Hướ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 37

Hì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 38

Hướ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 39

Hì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 40

Mã 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

Ngày đăng: 22/02/2017, 10:30

HÌNH ẢNH LIÊN QUAN

Hình 1-1  Thành phần phần cứng của hệ thống client/server - cơ sở dữ liệu quan hệ và SQL
Hình 1 1 Thành phần phần cứng của hệ thống client/server (Trang 3)
Hình 1-3  Các kiến trúc hệ thống client/server khác - cơ sở dữ liệu quan hệ và SQL
Hình 1 3 Các kiến trúc hệ thống client/server khác (Trang 7)
Hình 1-4  Cách tổ chức bảng cơ sở dữ liệu - cơ sở dữ liệu quan hệ và SQL
Hình 1 4 Cách tổ chức bảng cơ sở dữ liệu (Trang 9)
Hình 1-6  Cách định nghĩa các cột trong bảng - cơ sở dữ liệu quan hệ và SQL
Hình 1 6 Cách định nghĩa các cột trong bảng (Trang 13)
Hình 1-18  Các mô hình truy cập dữ liệu phổ biến - cơ sở dữ liệu quan hệ và SQL
Hình 1 18 Các mô hình truy cập dữ liệu phổ biến (Trang 37)
Hình 2-5  Hướng dẫn attach hoặc detach cơ sở dữ liệu - cơ sở dữ liệu quan hệ và SQL
Hình 2 5 Hướng dẫn attach hoặc detach cơ sở dữ liệu (Trang 57)
Hình 2-6  Hướng dẫn sao lưu và khôi phục cơ sở dữ liệu - cơ sở dữ liệu quan hệ và SQL
Hình 2 6 Hướng dẫn sao lưu và khôi phục cơ sở dữ liệu (Trang 59)
Hình 2-7  Hướng dẫn đặt mức độ tương thích cho cơ sở dữ liệu - cơ sở dữ liệu quan hệ và SQL
Hình 2 7 Hướng dẫn đặt mức độ tương thích cho cơ sở dữ liệu (Trang 61)
Hình 2-8  Hướng dẫn hiển thị quan hệ giữa các bảng - cơ sở dữ liệu quan hệ và SQL
Hình 2 8 Hướng dẫn hiển thị quan hệ giữa các bảng (Trang 63)
Hình 2-9  Hướng dẫn hiển thị hoặc chỉnh sửa các định nghĩa cột của bảng - cơ sở dữ liệu quan hệ và SQL
Hình 2 9 Hướng dẫn hiển thị hoặc chỉnh sửa các định nghĩa cột của bảng (Trang 65)
Hình 2-10  Hướng dẫn hiển thị hoặc chỉnh sửa dữ liệu của bảng - cơ sở dữ liệu quan hệ và SQL
Hình 2 10 Hướng dẫn hiển thị hoặc chỉnh sửa dữ liệu của bảng (Trang 67)
Hình 2-11  Hướng dẫn nhập và thực thi truy vấn - cơ sở dữ liệu quan hệ và SQL
Hình 2 11 Hướng dẫn nhập và thực thi truy vấn (Trang 69)
Hình 2-12  Hướng dẫn xử lý lỗi cú pháp - cơ sở dữ liệu quan hệ và SQL
Hình 2 12 Hướng dẫn xử lý lỗi cú pháp (Trang 71)
Hình 2-13  Hướng dẫn mở và lưu truy vấn - cơ sở dữ liệu quan hệ và SQL
Hình 2 13 Hướng dẫn mở và lưu truy vấn (Trang 73)
Hình 2-14  Giới thiệu Query Designer - cơ sở dữ liệu quan hệ và SQL
Hình 2 14 Giới thiệu Query Designer (Trang 75)

TỪ KHÓA LIÊN QUAN

w