Một trong những lợi ích chính của cơ sở dữ liệu máy tính là chúng giúp dễ dàng lưu trữ thông tin nên rất nhanh chóng và dễ tìm kiếm. Ví dụ: hệ thống thương mại điện tử có thể sử dụng cơ sở dữ liệu để ghi lại thông tin về các sản phẩm mà một tổ chức bán ra cũng như thông tin chi tiết về khách hàng và đơn đặt hàng mà họ đã đặt. Cơ sở dữ liệu quan hệ cung cấp mô hình lưu trữ dữ liệu và khả năng truy vấn cho phép bạn truy xuất dữ liệu nhanh chóng.
Các nội dung chính
Các đối tượng trong CSDL quan hệ
Bảng quan hệ
Khác với dữ liệu phi quan hệ, trong cơ sở dữ liệu quan hệ, bạn mô hình hóa các nhóm các thực thể từ thế giới thực dưới dạng bảng quan hệ. Một thực thể có thể là bất cứ điều gì mà bạn muốn ghi lại thông tin, điển hình là các đối tượng và sự kiện quan trọng.
Ví dụ: trong ví dụ về CSDL quan hệ cho hệ thống bán lẻ, bạn có thể tạo bảng cho khách hàng, sản phẩm, đơn đặt hàng và mặt hàng trong đơn đặt hàng. Một bảng quan hệ chứa các hàng và mỗi hàng đại diện cho một phiên bản duy nhất của một thực thể. Trong ví dụ này, mỗi hàng trong bảng khách hàng chứa dữ liệu cho một khách hàng duy nhất, mỗi hàng trong bảng sản phẩm xác định một sản phẩm duy nhất, mỗi hàng trong bảng đặt hàng đại diện cho một đơn đặt hàng được thực hiện bởi khách hàng và mỗi hàng trong bảng mục hàng đại diện cho một sản phẩm được bao gồm trong một đơn đặt hàng.

Bảng quan hệ là định dạng cho dữ liệu có cấu trúc và mỗi hàng trong bảng có cùng các cột; mặc dù trong một số trường hợp không phải tất cả các cột đều cần phải có giá trị, ví dụ: bảng Customer có thể bao gồm cột MiddleName; có thể trống (hoặc NULL) đối với các hàng đại diện cho khách hàng không có tên đệm hoặc tên đệm không xác định).
Mỗi cột trong bảng quan hệ lưu trữ dữ liệu của một kiểu dữ liệu cụ thể. Ví dụ: cột Email trong bảng Customer có thể sẽ được xác định để lưu trữ dữ liệu của kiểu dữ liệu ký tự (văn bản) (có thể được cố định hoặc thay đổi chiều dài), cột Price trong bảng Product có thể được xác định để lưu trữ dữ liệu của kiểu thập phân, trong khi cột Quantity trong bảng Order có thể bị giới hạn ở các giá trị số nguyên; và cột OrderDate cũng trong bảng Order sẽ được xác định để lưu trữ các giá trị ngày/giờ. Các kiểu dữ liệu có sẵn mà bạn có thể sử dụng khi xác định bảng phụ thuộc vào hệ thống cơ sở dữ liệu bạn đang sử dụng.
Ngoài bảng quan hệ, cơ sở dữ liệu quan hệ có thể chứa các cấu trúc khác giúp tối ưu hóa tổ chức dữ liệu, tinh gọn các thao tác lập trình và cải thiện tốc độ truy cập: VIEW, PROCEDURE VÀ INDEX
Khung nhìn – VIEW
View – khung nhìn là bảng ảo dựa trên kết quả của truy vấn SELECT. Ví dụ: bạn có thể tạo view trên bảng Order và Customer truy xuất dữ liệu đơn hàng và khách hàng để cung cấp một đối tượng duy nhất giúp dễ dàng xác định địa chỉ giao hàng cho đơn hàng:
CREATE VIEW Deliveries
AS
SELECT o.OrderNo, o.OrderDate,
c.FirstName, c.LastName, c.Address, c.City
FROM Order AS o JOIN Customer AS c
ON o.CustomerID = c.ID;
Bạn có thể truy vấn khung nhìn và lọc dữ liệu theo cách tương tự như bảng. Truy vấn sau đây truy vấn chi tiết về đơn đặt hàng cho khách hàng sống ở Seattle:
SELECT OrderNo, OrderDate, LastName, Address
FROM Deliveries
WHERE City = 'Seattle';
Quy trình được lưu trữ – STORED PROCEDURE
Một quy trình được lưu trữ sẵn (Stored Procedure) sẽ xác định các câu lệnh SQL có thể được thực thi theo lệnh. Chúng được sử dụng để tinh gọn logic lập trình trong cơ sở dữ liệu cho các thao tác mà các ứng dụng cần thực hiện khi làm việc với dữ liệu quan hệ.
Bạn có thể xác định một procedure với các tham số để tạo ra một giải pháp linh hoạt cho các thao tác phổ biến có thể cần được áp dụng cho dữ liệu dựa trên một khóa hoặc tiêu chí cụ thể. Ví dụ: procedure sau đây có thể được xác định để thay đổi tên của một sản phẩm dựa trên ID sản phẩm đã được chỉ định.
CREATE PROCEDURE RenameProduct
@ProductID INT,
@NewName VARCHAR(20)
AS
UPDATE Product
SET Name = @NewName
WHERE ID = @ProductID;
Khi một sản phẩm phải được đổi tên, bạn có thể gọi và thực hiện procedure, chuyển ID của sản phẩm và tên mới được gán:
EXEC RenameProduct 201, 'Spanner';
Chỉ mục – INDEX
Index – Chỉ mục giúp bạn tìm kiếm dữ liệu trong bảng quan hệ. Hãy nghĩ một chỉ mục trên một bảng như phụ lục ở bìa sau của một cuốn sách. Phụ lục chứa một tập hợp các tài liệu tham khảo trong cuốn sách đã được sắp xếp, với các trang mà trên đó mỗi tham chiếu xuất hiện. Khi bạn muốn tìm một tham chiếu đến một mục trong cuốn sách, bạn tìm kiếm nó thông qua phụ lục. Bạn có thể sử dụng các số trang trong phụ lục để đi trực tiếp đến các trang chính xác trong cuốn sách. Nếu không có phụ lục, bạn có thể phải đọc qua toàn bộ cuốn sách để tìm các tài liệu tham khảo bạn đang tìm kiếm.
Khi bạn tạo chỉ mục trong cơ sở dữ liệu, bạn chỉ định một cột từ bảng quan hệ và chỉ mục chứa một bản sao của dữ liệu này theo thứ tự sắp xếp, với con trỏ đến các hàng tương ứng trong bảng. Khi người dùng chạy truy vấn chỉ định cột này trong mệnh đề WHERE, hệ quản trị cơ sở dữ liệu có thể sử dụng chỉ mục này để lấy dữ liệu nhanh hơn so với khi nó phải truy vấn qua toàn bộ hàng bảng theo hàng.
Ví dụ: bạn có thể sử dụng dòng lệnh sau đây để tạo chỉ mục trên cột Name của bảng Product:
CREATE INDEX idx_ProductName
ON Product(Name);
Chỉ mục tạo ra một cấu trúc dạng cây mà trình tối ưu hóa truy vấn của hệ thống cơ sở dữ liệu có thể sử dụng để nhanh chóng tìm thấy các hàng trong bảng Product dựa trên Name được chỉ định.

Đối với một bảng chứa vài hàng, việc sử dụng chỉ mục có lẽ không hiệu quả hơn là đọc toàn bộ bảng và tìm các hàng được yêu cầu bởi truy vấn (trong trường hợp đó trình tối ưu hóa truy vấn sẽ bỏ qua chỉ mục). Tuy nhiên, khi một bảng có rất nhiều hàng, các chỉ mục của CSDL quan hệ có thể cải thiện đáng kể hiệu suất của các truy vấn.
Bạn có thể tạo nhiều chỉ mục trên bảng quan hệ. Vì vậy, nếu bạn cũng muốn tìm sản phẩm dựa trên giá, việc tạo một chỉ mục khác trên cột Price trong bảng Product có thể hữu ích. Tuy nhiên, các chỉ mục đều có “chi phí” riêng. Chỉ mục tiêu thụ không gian lưu trữ và mỗi khi bạn chèn, cập nhật hoặc xóa dữ liệu trong bảng, các chỉ mục cho bảng đó phải được duy trì. Công việc bổ sung này có thể làm chậm quá trình chèn, cập nhật và xóa các thao tác. Bạn phải cân bằng giữa việc có các chỉ mục tăng tốc truy vấn của bạn so với “chi phí” thực hiện các hoạt động khác.
Chuẩn hóa cơ sở dữ liệu quan hệ
Chuẩn hóa là một thuật ngữ được các chuyên gia cơ sở dữ liệu sử dụng nhằm mô tả một quy trình thiết kế lược đồ nhằm giảm thiểu sự trùng lặp dữ liệu và thực thi tính toàn vẹn của dữ liệu.
Mặc dù có nhiều quy tắc phức tạp xác định quá trình cấu trúc lại dữ liệu quan hệ thành nhiều cấp độ (hoặc hình thức) chuẩn hóa khác nhau nhưng ta có thể hiểu theo một cách đơn giản là chúng ta cần hướng tới các mục tiêu như sau:
- Tách từng thực thể thành bảng riêng của nó.
- Tách từng thuộc tính rời rạc thành cột riêng của nó.
- Xác định khóa chính duy nhất riêng cúa mỗi thực thể
- Sử dụng các cột khóa ngoại để liên kết các thực thể có liên quan.
Để hiểu các nguyên tắc cốt lõi của chuẩn hóa, ta đi vào ví dụ. Giả sử bảng dưới đây đại diện cho bảng tính mà một công ty sử dụng để theo dõi doanh số bán hàng của mình.

Trong bảng, khách hàng và chi tiết sản phẩm được lặp lại trong từng mặt hàng được bán; và tên khách hàng kết hợp với địa chỉ ship hàng, tên sản phẩm kết hợp với giá cả được kết hợp trong cùng một ô bảng tính.
Bây giờ hãy cùng xem chuẩn hóa thay đổi cách dữ liệu quan hệ được lưu trữ như thế nào:

Mỗi thực thể được biểu diễn dưới dạng dữ liệu (khách hàng, sản phẩm, đơn hàng hay danh mục sản phẩm) sẽ được lưu ở trong một bảng riêng và mỗi thuộc tính riêng sẽ được đặt ở một cột riêng.
Việc ghi lại từng ví dụ của một thực thể dưới dạng một hàng trong một bảng cụ thể của thực thể sẽ loại bỏ sự trùng lặp dữ liệu. Ví dụ: để thay đổi địa chỉ của khách hàng, bạn chỉ cần sửa đổi giá trị trong một hàng duy nhất.
Việc phân tách các thuộc tính thành các cột riêng lẻ đảm bảo rằng mỗi giá trị bị ràng buộc đối với một loại dữ liệu thích hợp – ví dụ, giá sản phẩm phải là giá trị thập phân, trong khi số lượng mục hàng phải là số nguyên. Ngoài ra, việc tạo ra các cột riêng lẻ biểu diễn chi tiết và hữu ích các dữ liệu để truy vấn – ví dụ, bạn có thể dễ dàng lọc khách hàng cho những người sống trong một thành phố cụ thể.
Bản sao về mỗi thực thể được xác định duy nhất bởi ID hoặc giá trị khóa khác, được gọi là khóa chính; và khi một thực thể đề cập đến một thực thể khác (ví dụ: đơn đặt hàng với khách hàng có liên quan), khóa chính của thực thể liên quan được lưu trữ dưới dạng khóa ngoại.Thông thường, một hệ thống quản lý cơ sở dữ liệu quan hệ có thể thực thi tính toàn vẹn tham chiếu để đảm bảo rằng một giá trị được nhập vào một trường khóa ngoại với khóa chính tương ứng có sẵn trong bảng có liên quan – ví dụ, không tiếp nhận các đơn đặt hàng của những khách hàng không tồn tại.
Trong một số trường hợp, một khóa (chính hoặc ngoại) có thể được định nghĩa là một khóa tổng hợp dựa trên sự kết hợp duy nhất của nhiều cột. Ví dụ: bảng LineItem trong ví dụ trên kết hợp sự duy nhất của OrderNo và ItemNo để xác định một danh mục sản phẩm từ một đơn đặt hàng riêng lẻ.
Việc nắm được khái niệm và các thuộc tính của CSDL quan hệ là tiền đề quan trọng để thực hiện quản lý, phân tích và xử lý dữ liệu. Để học kỹ hơn về phân tích dữ liệu, mình giới thiệu tới các bạn một lộ trình học data đầy đủ tại Datapot với 3 khóa học gồm Cơ sở dữ liệu, SQL và Power BI. Các bạn tham khảo combo Data Fundamentals của Datapot tại đây nhé!