Tổng quan về giáo trình

Tài liệu thuộc phân môn Lập trình Cơ sở dữ liệu và Hệ quản trị Cơ sở dữ liệu trong chương trình đào tạo chuyên ngành Công nghệ Thông tin, Hệ thống Thông tin và Kỹ thuật Phần mềm ở bậc đại học. Nội dung trọng tâm của giáo trình tập trung vào việc hướng dẫn lập trình mở rộng với Transact-SQL (T-SQL) trên nền tảng hệ quản trị cơ sở dữ liệu Microsoft SQL Server.

Mục tiêu học tập của giáo trình là trang bị cho người học các kiến thức và kỹ năng sau:

  • Nắm vững các quy tắc định danh đối tượng, phân loại kiểu dữ liệu và cơ chế phân đoạn xử lý lệnh thông qua khái niệm gói lệnh (Batch) và kịch bản (Script).
  • Hiểu và ứng dụng thành thạo việc khai báo biến cục bộ, đọc giá trị biến toàn cục hệ thống để kiểm soát trạng thái giao dịch và kết quả truy vấn.
  • Vận dụng các cấu trúc điều khiển luồng tuần tự, rẽ nhánh, lặp và tạm dừng thực thi trong T-SQL để xây dựng giải thuật xử lý dữ liệu phức tạp.
  • Nắm vững kỹ thuật phát sinh và xử lý thông báo lỗi hệ thống/người dùng bằng RAISERROR và các thủ tục quản lý thông báo sp_addmessage, sp_dropmessage.
  • Thiết kế, triển khai và quản lý các loại thủ tục lưu trữ (Stored Procedure), hỗ trợ tham số đầu vào/đầu ra và các tùy chọn bảo mật.

Cấu trúc giáo trình được thiết kế theo trình tự từ mức cơ sở dữ liệu nền tảng đến các cấu trúc lập trình nâng cao và đóng gói mô-đun. Giáo trình tiếp cận trực tiếp qua cú pháp hình thức kết hợp các đoạn mã lệnh minh họa thực tế được triển khai trên cơ sở dữ liệu mẫu Northwind cùng các bảng dữ liệu quản lý giao dịch.


Nội dung kiến thức cốt lõi

Các chương/chủ đề chính

Nội dung giáo trình tập trung vào các chủ đề cốt lõi của lập trình T-SQL, bao gồm:

  1. Cơ sở định danh và môi trường thực thi T-SQL:

    • Quy tắc định danh (Identifier): Quy định độ dài tối đa 128 ký tự, bắt đầu bằng ký tự từ A-Z hoặc các tiền tố đặc biệt @, #. Hướng dẫn sử dụng dấu ngoặc vuông [] hoặc dấu nháy kép "" cho các định danh có khoảng trắng. Cú pháp tham chiếu đối tượng theo phân cấp Server.Object (ví dụ: Northwind.Customers).
    • Kiểu dữ liệu và đơn vị thực thi: Phân biệt kiểu dữ liệu hệ thống và kiểu dữ liệu người dùng định nghĩa (User-defined data types). Quy định gói lệnh (Batch) kết thúc bằng từ khóa GO, cơ chế biên dịch đồng thời và ràng buộc của lệnh CREATE. Định nghĩa kịch bản (Script) dưới dạng tệp .SQL.
  2. Cơ chế biến cục bộ và biến toàn cục:

    • Biến cục bộ: Khai báo bằng từ khóa DECLARE, gán giá trị qua lệnh SET hoặc SELECT, phạm vi hoạt động giới hạn trong thân khối lệnh, thủ tục hoặc hàm.
    • Biến toàn cục (Hàm hệ thống): Sử dụng tiền tố @@ không cần khai báo kiểu dữ liệu, phản ánh trạng thái hệ thống: @@Trancount (số giao dịch đang mở), @@Servername (tên máy chủ cục bộ), @@Rowcount (số dòng bị tác động bởi lệnh gần nhất), @@Identity (giá trị định danh tự tăng phát sinh sau cùng), @@Error (mã lỗi thực thi), @@Fetch_status (trạng thái con trỏ).
  3. Cấu trúc điều khiển luồng:

    • Khối lệnh và lệnh dừng: Khối BEGIN...END để nhóm các phát biểu; lệnh RETURN [Integer_expression] để kết thúc quá trình xử lý; lệnh PRINT dùng xuất dữ liệu dạng chuỗi ký tự hoặc giá trị biến ra màn hình.
    • Rẽ nhánh và lựa chọn: Cấu trúc IF...ELSE kiểm tra điều kiện logic; biểu thức CASE...WHEN...THEN...ELSE...END áp dụng cho biểu thức đầu vào hoặc biểu thức điều kiện Boolean.
    • Điều hướng và lặp: Lệnh GOTO label: điều hướng luồng chương trình đến nhãn được định nghĩa; cấu trúc WHILE Boolean_expression kèm từ khóa BREAK (thoát vòng lặp) và CONTINUE (chuyển sang lần lặp kế tiếp); lệnh WAITFOR DELAY 'hh:mm:ss' hoặc WAITFOR TIME 'hh:mm:ss' để tạm dừng tiến trình.
  4. Kiểm soát và phát sinh thông báo lỗi:

    • Cú pháp lệnh RAISERROR: Tham số msg_id (mã lỗi trong sysmessages, người dùng định nghĩa từ 50001 trở lên), chuỗi nội dung msg_str (hỗ trợ định dạng tham số %d, %i, %o, %p, %s, %u, %x, %X), mức nghiêm trọng (Severity levels từ 1 đến 25) và trạng thái state (từ 1 đến 127).
    • Phân cấp Severity: Mức 10 (thông tin), 11–16 (lỗi người dùng), 17 (cạn kiệt tài nguyên/khóa), 18–19 (lỗi không chặn tiến trình), 20–25 (sự cố hệ thống nghiêm trọng làm tê liệt tiến trình).
    • Quản lý thông báo lỗi: Sử dụng các thủ tục hệ thống sp_addmessage, sp_dropmessage, tra cứu dữ liệu lỗi qua bảng hệ thống sysmessages và thủ tục sp_helptext.
  5. Lập trình Thủ tục lưu trữ (Stored Procedure):

    • Khái niệm và phân loại: Bao gồm User-defined (người dùng tạo), System (tiền tố sp_ trong CSDL master), Temporary (lưu tại TempDB), Extended (tiền tố xp_ viết bằng ngôn ngữ ngoài), Remote (thực thi từ xa).
    • Cú pháp và tùy chọn: Sử dụng câu lệnh CREATE PROCEDURE với các tham số, tùy chọn tham số đầu ra OUTPUT, tùy chọn tái biên dịch WITH RECOMPILE và mã hóa WITH ENCRYPTION.
    • Công cụ kiểm tra: Sử dụng các thủ tục tra cứu cấu trúc và phụ thuộc gồm sp_help, sp_helptext, sp_depends, sp_stored_procedures.

Kiến thức nền tảng được xây dựng

Giáo trình xây dựng nền tảng lý thuyết về xử lý dữ liệu theo lô (batch processing), kiểm soát giao dịch thông qua các biến trạng thái, cơ chế bẫy lỗi có phân cấp mức độ nghiêm trọng và nguyên lý đóng gói mô-đun hóa trong hệ quản trị cơ sở dữ liệu quan hệ.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật: Viết kịch bản T-SQL hoàn chỉnh, sử dụng cú pháp điều khiển luồng lặp/rẽ nhánh phức tạp, thiết lập thông điệp lỗi chuẩn hóa, xây dựng Stored Procedure phục vụ xử lý nghiệp vụ CSDL.
  • Kỹ năng phân tích: Phân tích trạng thái thực thi của các câu lệnh thao tác dữ liệu qua biến toàn cục @@ROWCOUNT, @@ERROR, tối ưu hóa việc phân chia các khối lệnh Batch.
  • Kỹ năng thực hành ứng dụng: Truy xuất và biến đổi dữ liệu trên các bảng quan hệ thực tế như Orders, Order Details, Products, Employees, Customers.

Phương pháp giảng dạy và học tập

Giáo trình định hướng phương pháp giảng dạy tích hợp giữa lý thuyết cú pháp chính quy và thực hành viết kịch bản truy vấn trực tiếp trên môi trường SQL Server Management Studio hoặc công cụ quản trị Enterprise Manager.

  • Bài tập và ví dụ thực hành: Các ví dụ được xây dựng gắn liền với lược đồ cơ sở dữ liệu Northwind:

    • Kiểm tra sự tồn tại của khách hàng theo quốc gia (Customers.Country = 'Germany') bằng IF...ELSE.
    • Kiểm tra và in danh sách sản phẩm có đơn vị tính chứa từ khóa box thông qua các hàm kết hợp Count, Avg trên bảng Products.
    • Phân loại đơn giá sản phẩm thành các nhóm (Low price, Moderately Price, Expensive) bằng biểu thức CASE.
    • Tính tỷ lệ chiết khấu [discount%] dựa trên số lượng đặt hàng trong bảng [Order Details].
    • Sử dụng vòng lặp WHILE để cập nhật nhân đôi đơn giá các mặt hàng trong [Order Details] cho đến khi đơn giá trung bình vượt ngưỡng hoặc đạt điều kiện ngắt lệnh BREAK.
    • Minh họa tính toàn vẹn quan hệ giữa bảng hóa đơn hd và chi tiết hóa đơn cthd bằng cách lấy giá trị khóa chính tự tăng @@identity vừa phát sinh để chèn vào khóa ngoại của bảng chi tiết.
  • Phương pháp đánh giá: Đánh giá kết quả học tập thông qua khả năng thiết kế kịch bản SQL không lỗi cú pháp, tính chính xác trong xử lý logic điều kiện, kỹ thuật xử lý ngoại lệ bằng RAISERROR và năng lực xây dựng thủ tục lưu trữ đáp ứng đúng yêu cầu nghiệp vụ.

  • Hướng dẫn tự học: Người học được khuyến nghị trực tiếp chạy các kịch bản mẫu, sử dụng các thủ tục hệ thống như sp_helptext, sp_depends để phân tích mã nguồn và mối quan hệ phụ thuộc giữa các đối tượng cơ sở dữ liệu.


Điểm nổi bật và cập nhật

  • Chi tiết hóa cơ chế bẫy lỗi hệ thống: Giáo trình cung cấp bảng phân loại chi tiết các mức độ nghiêm trọng (Severity levels) từ 1 đến 25, giúp phân biệt rõ giữa lỗi nhập liệu của người dùng và các lỗi nghiêm trọng về tài nguyên hệ thống phần cứng/phần mềm.
  • Mở rộng thông báo lỗi người dùng: Cung cấp đầy đủ cú pháp đăng ký mã lỗi mới bằng sp_addmessage (mã từ 50001 trở lên), hướng dẫn tham số hóa thông điệp qua các ký tự định dạng kiểu chuỗi %s, số nguyên %d, con trỏ %p, hệ thập lục phân %x.
  • Hệ thống hóa các thủ tục hệ thống (System Stored Procedures): Liệt kê và giải thích chức năng của các thủ tục quản trị chuẩn như sp_databases, sp_server_info, sp_stored_procedures, sp_tables, sp_start_job, sp_stop_job, sp_password, sp_configure, sp_help, sp_helptext.
  • Minh họa bằng lược đồ cơ sở dữ liệu chuẩn: Toàn bộ các ví dụ được xây dựng đồng nhất trên cơ sở dữ liệu Northwind, giúp người học tiếp cận trực tiếp với các mô hình quản lý quan hệ thực tế.

Đối tượng sử dụng giáo trình

  • Sinh viên đại học/cao đẳng: Sinh viên năm thứ hai hoặc năm thứ ba thuộc các khối ngành Công nghệ Thông tin, Kỹ thuật Phần mềm, Hệ thống Thông tin quản lý và Khoa học Dữ liệu.
  • Điều kiện tiên quyết (Prerequisites): Người học cần hoàn thành học phần Cơ sở dữ liệu cơ bản, nắm vững lý thuyết đại số quan hệ và cú pháp các câu lệnh SQL chuẩn (DDL: CREATE TABLE, ALTER TABLE; DML: SELECT, INSERT, UPDATE, DELETE).
  • Giảng viên: Sử dụng làm đề cương bài giảng lý thuyết, ngân hàng câu hỏi thực hành phòng máy và tài liệu hướng dẫn đồ án môn học.
  • Kỹ sư và Quản trị viên CSDL (DBA): Dùng làm tài liệu tra cứu cú pháp, hàm hệ thống và quy chuẩn cấu trúc Stored Procedure trong môi trường Microsoft SQL Server.

Câu hỏi thường gặp

  1. Giáo trình này tập trung vào ngôn ngữ và hệ quản trị cơ sở dữ liệu nào?
    Giáo trình tập trung vào ngôn ngữ lập trình Transact-SQL (T-SQL) được sử dụng trên hệ quản trị cơ sở dữ liệu Microsoft SQL Server.

  2. Sự khác biệt giữa biến cục bộ và biến toàn cục trong T-SQL là gì?
    Biến cục bộ có tên bắt đầu bằng ký tự @, được người dùng khai báo bằng lệnh DECLARE và chỉ tồn tại trong phạm vi của khối lệnh/thủ tục tương ứng. Biến toàn cục có tên bắt đầu bằng @@, do hệ thống định nghĩa như các hàm trạng thái (ví dụ: @@ROWCOUNT, @@ERROR, @@IDENTITY) và không cần khai báo kiểu dữ liệu.

  3. Từ khóa GO có vai trò gì trong việc thực thi câu lệnh?
    Từ khóa GO đóng vai trò là dấu hiệu phân tách kết thúc một gói lệnh (Batch). Các câu lệnh trong cùng một gói lệnh sẽ được trình biên dịch xử lý đồng thời, và một số phát biểu như CREATE bắt buộc phải nằm trong một gói lệnh riêng biệt.

  4. Lệnh RAISERROR quản lý các mức lỗi (Severity) như thế nào?
    Mức 10 đại diện cho thông báo thông tin; mức 11 đến 16 dành cho lỗi do người dùng thao tác; mức 17 đến 19 phản ánh lỗi cạn kiệt tài nguyên nhưng tiến trình vẫn có thể tiếp tục; mức 20 đến 25 chỉ ra sự cố hệ thống nghiêm trọng khiến tiến trình bị dừng hoàn toàn.

  5. Tại sao nên sử dụng Stored Procedure thay vì các khối lệnh SQL rời rạc?
    Stored Procedure giúp mô-đun hóa thao tác, được hệ quản trị phân tích và tối ưu hóa sẵn kế hoạch thực thi, giảm lưu lượng truyền tải trên mạng và hỗ trợ phân quyền bảo mật trực tiếp trên đối tượng thủ tục.


Kết luận

Tài liệu cung cấp các nền tảng kỹ thuật về lập trình T-SQL, từ các khái niệm định danh, kiểu dữ liệu, biến hệ thống đến các cấu trúc điều khiển nâng cao, cơ chế xử lý lỗi và thiết kế Stored Procedure. Lộ trình nội dung được cấu trúc chặt chẽ, gắn liền với các ví dụ thực hành cụ thể trên cơ sở dữ liệu Northwind, đáp ứng yêu cầu học tập và nghiên cứu trong chương trình đào tạo ngành Công nghệ Thông tin.