Data everywhere: Tại sao não cá vàng như tụi mình lại cần đến database?
- 21 thg 4
- 13 phút đọc
Đã cập nhật: 21 thg 4
Lưu ý: Chống chỉ định với những người bị dị ứng với sự kết hợp Anh - Việt. Mình chỉ là thằng già đầu đang cố bắt “trend” trong cái thế giới GenZ - thế hệ mà bọn Tiktok kêu là cợt nhả đấy - lên ngôi mà thôi! Nếu có sai sót, xin để lại comment ngay bài này nhé! Mãi iu.

Chào mấy ní đang lướt tới bài blog này! Có bao giờ mấy ní thấy mình ngập mặt trong data chưa? Tui không nói đâu xa, check nhẹ cái điện thoại xem: danh bạ cả nghìn số (có khi có tên crush mà có bao giờ gọi được đâu), list nhạc Spotify dài như sớ Táo Quân, kho ảnh selfie/meme "chục GB" chưa thèm lọc (để gửi cho đứa bạn thân mặc dù nó không xem),... Data nó nằm ở khắp mọi nơi trong vũ trụ, từ online tới offline!
Thú thật đi, có phải nhiều lúc mấy ní cũng thấy hơi ối dồi ôi khi phải quản lý cái đống thông tin hổ lốn đó hong? Nào là quên lưu file, lưu nhầm chỗ, gửi lộn version (sếp bóc trúng síc-rịt là đi cả tháng lương), tìm một cái ảnh cũ mà lục tung cả thế giới ảo... Chính vì cái sự bất ổn đó mà hôm nay, tui sẽ dẫn mấy ní vào thế giới của một vị cứu tinh mang tên cơ sở dữ liệu (CSDL), hay tiếng Anh dân IT hay gọi "cho nó high-tech" là database.
1. Nỗi đau mang tên “lưu dữ liệu kiểu ông bà anh”: Khi Excel không còn là chân ái.

1.1 Quản lý dữ liệu kiểu truyền thống.
Ok, trước khi gặp anh hùng Database, tui điểm lại mấy kiếp nạn khi quản lý data theo kiểu "cây nhà lá vườn" cái đã:
Kiếp nạn 1 - Team lớp trưởng và cô thư ký: Nhớ hồi đi học hong? Cô thư ký nhập điểm tay muốn rụng nụ, file Excel điểm lớp trưởng giữ thì mỗi lần cập nhật là y như rằng 10 đứa xin 10 version khác nhau, đứa thì bảo "Ủa sao điểm tao thấp thế?", đứa thì "Mày gửi nhầm file cũ rồi ba ơi!".
Kiếp nạn 2 - Thánh săn sale và chủ shop online: Mấy bạn mê chốt đơn Shopee hay chủ shop nhỏ tự quản lý hàng hóa chắc thấm nè. Lưu thông tin sản phẩm (tên, giá, tồn kho...), thông tin khách hàng, rồi đơn hàng (ngày bán, ai mua, mua gì, nhiêu tiền...) vô sổ tay hay mấy file Excel riêng lẻ? Ui cha, tới lúc tổng kết doanh thu hay tìm lại đơn cũ chắc "khóc thét".
Kiếp nạn 3 - Mọt sách và thủ thư hệ tâm linh: Ai hay lân la thư viện chắc biết cảnh này. Quản lý sách (tên, tác giả, mã sách...), quản lý bạn đọc (tên, lớp, mã thẻ...), rồi ai mượn sách gì, khi nào trả... mà ghi sổ tay thì thôi rồi, tìm cuốn sách mất tích chắc nhờ Conan vào cuộc may ra mới thấy.
Thấy hong? Mấy việc tưởng đơn giản này mà quản lý bằng cơm là dễ toang lắm.
1.2 Điểm danh loạt red flag của cách lưu trữ ngày xưa ơi:
Nếu vẫn xài sổ sách hoặc mỗi thứ một file Word/Excel riêng, thì đây là những trái đắng bạn phải nhấm nháp mỗi ngày:
Một là Data Redundancy (Trùng dữ liệu - Nhập đi nhập lại, mỏi tay xỉu): Cái ám ảnh nhất! Cùng một cái tên, một số điện thoại, một địa chỉ... mà phải gõ đi gõ lại 7749 lần ở các file/sổ khác nhau (file điểm danh, file sổ nợ canteen, file đăng ký CLB...). Vừa tốn thời gian, tốn công, mà sai một ly là "đi một dặm", chưa kể còn làm ổ cứng đầy bụng vô ích. Seriously?
Hai là Data Inconsistency (Thiếu nhất quán - Chỗ này đúng, chỗ kia sai, hệ thống nội chiến): Khi bạn đổi số điện thoại có đuôi đẹp, báo lớp trưởng cập nhật file điểm, nhưng quên báo thư viện, quên báo CLB... Thế là cùng một người mà có tới 3-4 version thông tin khác nhau. Lúc cần tìm gấp thì thôi rồi, thông tin bất đồng quan điểm, không biết tin ai luôn.
Ba là Sharing is NOT Caring (Khó share, khó team work): File Excel gia bảo lưu trên máy một đứa, 5 đứa khác muốn xem hay sửa cùng lúc? Forget it! Hoặc là chờ nó online gửi qua Zalo/Mess (mà mạng lag thì thôi luôn), hoặc là... đợi nó làm xong rồi mình làm tiếp. Teamwork kiểu này thì bao giờ mới xong deadline?
Bốn là Retrieval Nightmare (Khó tìm kiếm, khó tổng hợp - Muốn biết cũng không được): Cần tìm "Tất cả những cuốn sách Nguyễn Nhật Ánh mà mình đã mượn năm ngoái?" hay "Tính tổng tiền mình đã 'cống nạp' cho Liên Minh Huyền Thoại để mua skin tháng này?". Nếu dữ liệu nằm rải rác mỗi nơi một mảnh thì thôi, ngồi lọc tay, cộng tay tới rụng lông néch luôn nha.
Năm là Security Level - "Easy" (An toàn, bảo mật? Có như không!): Lưu file trên máy lỡ virus hỏi thăm, ổ cứng đột tử, hay đơn giản là não cá vàng quên save, mất điện đột ngột... là bao công sức bay màu. Còn ghi sổ tay thì còn dễ rách, mất, cháy hơn nữa. Dữ liệu quan trọng mà bảo mật kiểu này thì hơi rén đó!

1.3. Và rồi... Database xuất hiện như một vị thần!
Thấy trầm cảm với mớ hỗn độn trên chưa? Chính vì mấy cái sự bất lực và rủi ro đó, các pháp sư ngành khoa học máy tính đã tạo ra một bảo bối gọi là Cơ sở dữ liệu (Database).
Hiểu đơn giản, database giống như một cái kho siêu to khổng lồ nhưng được sắp xếp cực kỳ thông minh và khoa học. Nó sinh ra để:
Gom dữ liệu về một mối: Bye bye cảnh mỗi thứ một nơi.
Chống trùng lặp (No more redundancy!): Thông tin chỉ cần nhập một lần, xài cho nhiều chỗ.
Đảm bảo nhất quán (Consistency is key!): Sửa một nơi, mọi nơi liên quan tự động cập nhật theo. Dữ liệu luôn healthy and balanced.
Chia sẻ và truy cập đồng thời: Nhiều người có thể cùng xem, cùng sửa dữ liệu một lúc (tất nhiên là có phân quyền rõ ràng). Teamwork lên ngôi!
Truy xuất dễ như ăn kẹo: Tìm kiếm, lọc, tổng hợp thông tin trong một nốt nhạc với các công cụ hỗ trợ.
An toàn, bảo mật cao: Có cơ chế backup, phân quyền truy cập, chống truy cập trái phép... xịn sò hơn nhiều.
Okela, tới đây chắc mấy ní cũng "à há" được tại sao Database lại thần thánh và cần thiết trong cái thời đại số này rồi đúng không? Nó không chỉ dành cho dân IT code code gõ gõ đâu, mà nó ứng dụng siêu nhiều trong cuộc sống luôn á!
2. Database (CSDL) - Nó là gì và hoạt động ra sao?
Ở phần 1, tụi mình đã bóc phốt cái sự bất ổn của việc lưu data kiểu truyền thống và thấy Database xuất hiện như anh hùng giải cứu thế giới dữ liệu rồi đúng hông? Giờ thì tới lúc vén màn bí mật, soi kỹ hơn xem anh hùng này có nội công thâm hậu cỡ nào, cấu tạo ra sao nha! Let's get technical (một cách vui vẻ)!

2.1 Database
Khái niệm: Cơ sở dữ liệu (database - CSDL) là một bộ sưu tập dữ liệu có liên quan với nhau, được tổ chức một cách có hệ thống để dàng truy cập, quản lý và cập nhật.
Decode nhẹ cái định nghĩa ở trên:
Dữ liệu có liên quan: Không phải là cái mớ hổ lốn bạn vứt vào thư mục Download (hay vứt đầy trên Desktop) đâu. Mà là data về cùng một chủ đề hay một đối tượng cụ thể. Ví dụ: Toàn bộ thông tin học sinh của trường (tên, lớp, điểm số...) là một CSDL; thông tin sản phẩm của shop Tiki (tên, giá, mô tả, hình ảnh...) là một CSDL; danh bạ trên điện thoại của bạn (tên, số phone, email...) cũng là một CSDL đó!
Có hệ thống: Data được sắp xếp theo một trật tự, một cấu trúc nhất định, chứ không phải để lộn xộn như phòng của mấy đứa bạn thân đâu. (Chi tiết cấu trúc này mình sẽ nói sau nha).
Lưu trữ trên thiết bị: Thường là trên ổ cứng máy tính, server... những nơi an toàn để lưu trữ lâu dài.
Dễ dàng quản lý, cập nhật, khai thác: Đây là mục đích chính! Giúp nhiều người (hoặc nhiều app) có thể tìm kiếm, thêm, sửa, xóa dữ liệu một cách thuận tiện, nhanh chóng và đồng bộ.
Túm cái váy lại, database giống như một cái kho lưu trữ thông minh, giúp các ní sắp xếp và quản lý data một cách khoa học, hiệu quả thay vì để nó "bừa bộn" khắp nơi.
2.2 “DNA” của một Database “xịn”: Những đặc tính vàng
Để được gọi là một database "ra gì và này nọ", nó phải sở hữu những đặc điểm cốt lõi sau:
Tính cấu trúc (Structured): Dữ liệu được tổ chức theo một khuôn mẫu xác định (phổ biến nhất là các bảng - tables, giống như trang tính Excel nhưng "quyền năng" hơn nhiều). Nhờ có cấu trúc mà việc tìm kiếm, xử lý data mới nhanh và hiệu quả được.
Tính toàn vẹn (Integrity): Đảm bảo dữ liệu luôn đúng đắn và chính xác theo những quy tắc mình đặt ra. Ví dụ: Cột điểm phải là số từ 0-10, không thể là chữ hay số âm; cột Mã Sinh Viên không được phép có 2 người trùng nhau; cột Ngày Sinh phải là một ngày hợp lệ... Cái này siêu quan trọng để data đáng tin cậy!
Tính nhất quán (Consistency): Như đã than thở ở phần 1, data không được phép tiền hậu bất nhất. Nếu bạn cập nhật số điện thoại ở thông tin cá nhân, thì ở tất cả những chỗ khác có dùng số điện thoại đó (như đơn hàng, thông tin bảo hành...) nó cũng phải được cập nhật theo (hoặc ít nhất là hệ thống phải biết đâu là thông tin đúng). Không có chuyện chỗ này số cũ, chỗ kia số mới!
Tính độc lập dữ liệu (Data Independence): Cái này hơi "pro" tí nhưng rất hay! Nó có nghĩa là:
Cách dữ liệu được lưu trữ vật lý dưới ổ cứng (cấu trúc file, vị trí lưu...) có thể thay đổi mà không làm ảnh hưởng đến các chương trình (app web, app mobile...) đang sử dụng dữ liệu đó. Ví dụ: IT nâng cấp server, đổi loại ổ cứng xịn hơn, thì app của bạn vẫn chạy bình thường, không cần code lại.
Ngược lại, bạn thay đổi giao diện app, thêm tính năng mới cho app thì cũng không làm ảnh hưởng đến cách dữ liệu được lưu trữ bên dưới. => Hai tầng này (lưu trữ vật lý & ứng dụng logic) khá độc lập với nhau, giúp hệ thống linh hoạt và dễ bảo trì hơn nhiều.
Tính an toàn và bảo mật (Security): Dữ liệu phải được bảo vệ nghiêm ngặt! Chống truy cập trái phép (ai không phận sự miễn vào!), chống sửa đổi, phá hoại dữ liệu. Phải có cơ chế phân quyền rõ ràng (user A chỉ được xem, user B được xem và sửa...).
Tính chia sẻ (Sharability): Cho phép nhiều người dùng hoặc nhiều ứng dụng cùng lúc truy cập và thao tác trên dữ liệu mà không bị "conflict" hay dẫm chân lên nhau. Phải có cơ chế kiểm soát việc này để đảm bảo data vẫn nhất quán.

Một database mà thiếu mấy cái ADN này thì chưa phải là database chuẩn auth đâu nha!
2.3 Hệ quản trị CSDL (DBMS) - Quản gia quyền lực
Nếu database là cái kho dữ liệu khổng lồ, thì ai sẽ là người quản lý cái kho đó? Đó chính là Hệ quản trị cơ sở dữ liệu (DBMS - Database Management System).
DBMS là một hệ thống phần mềm chuyên dụng, đóng vai trò trung gian giữa người dùng (hoặc ứng dụng) và cái Database vật lý kia. Nó cung cấp công cụ để bạn tạo, đọc, cập nhật, và quản lý (CRUD - Create, Read, Update, Delete) cái Database đó.
Ví von dễ hiểu:
Nếu Database là thư viện sách (data), thì DBMS chính là hệ thống quản lý thư viện + các cô chú thủ thư. Họ giúp bạn tìm sách (truy vấn), ghi thông tin mượn/trả (cập nhật), sắp xếp sách lên kệ (lưu trữ), bảo quản sách (bảo mật, toàn vẹn).
Nếu Database là tiền trong ngân hàng (data), thì DBMS là hệ thống phần mềm + các giao dịch viên. Họ giúp bạn kiểm tra số dư (truy vấn), nạp/rút tiền (cập nhật), mở tài khoản (tạo mới), đảm bảo tiền của bạn an toàn (bảo mật).
Chức năng chính của quản gia DBMS:
Định nghĩa cấu trúc (DDL - Data Definition Language): Cung cấp ngôn ngữ/công cụ để bạn xây dựng nên cấu trúc của Database: tạo bảng, định nghĩa các cột dữ liệu (tên cột, kiểu dữ liệu là số hay chữ, độ dài tối đa...), đặt ra các quy tắc/ràng buộc (constraints) cho dữ liệu (như cột này không được rỗng, cột kia phải là duy nhất...).
Thao tác dữ liệu (DML - Data Manipulation Language): Cung cấp ngôn ngữ/công cụ để bạn "làm việc" với dữ liệu bên trong:
INSERT: Thêm dữ liệu mới (ví dụ: thêm một học sinh mới).
UPDATE: Sửa dữ liệu cũ (ví dụ: cập nhật điểm số).
DELETE: Xóa dữ liệu (ví dụ: xóa một sản phẩm không bán nữa).
SELECT: Truy vấn/lấy dữ liệu (ví dụ: tìm tất cả học sinh lớp 12A1 có điểm Toán trên 8). Đây là thao tác quan trọng và phổ biến nhất! Ngôn ngữ SQL (Structured Query Language) chính là "ngôn ngữ giao tiếp" chuẩn và phổ biến nhất để thực hiện cả DDL và DML với các DBMS quan hệ đó!
Kiểm soát và điều khiển: Cung cấp các công cụ để:
Quản lý người dùng và phân quyền truy cập (ai được làm gì?).
Đảm bảo an toàn, bảo mật.
Kiểm soát truy cập đồng thời (nhiều người cùng dùng không bị lỗi).
Duy trì tính toàn vẹn dữ liệu.
Sao lưu (backup) và phục hồi (recovery) khi có sự cố.
Điểm mặt một vài "quản gia" DBMS nổi tiếng:
Hệ "nhập môn" / Cá nhân: Microsoft Access (chắc ai học Tin học văn phòng cũng từng gặp).
Hệ Web / Mã nguồn mở (phổ biến nhất nhì): MySQL, PostgreSQL (trái tim của rất nhiều website và ứng dụng bạn đang dùng đó, thường miễn phí).
Hệ "đại gia" / Doanh nghiệp lớn: Oracle Database, Microsoft SQL Server, IBM Db2 (mấy ông lớn này thì siêu mạnh, siêu nhiều tính năng, và... siêu đắt, dùng cho các tập đoàn, ngân hàng...).
Mở rộng xíu: Ngoài các DBMS quan hệ kể trên (dùng SQL là chủ yếu), thế giới còn có các loại DBMS khác gọi là NoSQL (Not Only SQL) như MongoDB, Cassandra, Redis... chuyên dùng cho các loại data "khác biệt" hơn (như data mạng xã hội, Big Data, data không có cấu trúc rõ ràng...). Nhưng mà thôi, biết mấy cái tên quan hệ kia là đủ "nhập môn" rồi ha!
2.4. Hệ cơ sở dữ liệu (Database System) - Cả một "vũ trụ" thu nhỏ
Đừng nhầm lẫn nha! "Database" chỉ là phần dữ liệu thôi, còn "Hệ cơ sở dữ liệu (Database System)" là cả một hệ thống hoàn chỉnh bao gồm nhiều thành phần phối hợp với nhau. Nó giống như một hệ sinh thái vậy đó:
Cơ sở dữ liệu (Data): Hạt nhân trung tâm, chính là cái kho dữ liệu quý giá của chúng ta.
Hệ QTCSDL (DBMS): "Bộ não" điều khiển, phần mềm quản lý cái kho đó (như MySQL, SQL Server...).
Phần mềm ứng dụng (Application Software): "Cánh tay nối dài", là các chương trình, website, app mobile (viết bằng Python, Java, PHP, C#...) mà người dùng cuối tương tác. Mấy cái app này sẽ giao tiếp với DBMS để lấy/ghi dữ liệu, rồi hiển thị lên giao diện đẹp đẽ cho bạn xem. Ngay cả công cụ có sẵn trong MS Access (Forms, Reports) cũng là phần mềm ứng dụng đó.
Phần cứng (Hardware): "Cơ thể vật lý", bao gồm máy chủ (server), ổ cứng (disk), bộ nhớ RAM, CPU, đường mạng... để chứa và vận hành mọi thứ.
Con người (Users): Những người tham gia vào hệ thống:
Người dùng cuối (End Users): Là chúng ta đó! Những người xài app, web để xem tin tức, mua hàng, xem điểm... mà không cần biết bên dưới data lưu thế nào.
Lập trình viên ứng dụng (Application Programmers): Các anh chị dev "thần thánh", viết code tạo ra các phần mềm ứng dụng kia để tương tác với DBMS.
Người quản trị CSDL (Database Administrator - DBA): "Người gác đền" tối cao, chịu trách nhiệm thiết kế CSDL, cài đặt DBMS, vận hành, tối ưu hiệu năng, backup, bảo mật... Nói chung là lo cho cả hệ thống chạy mượt mà, an toàn. Vai trò này siêu quan trọng trong các công ty lớn!
2.5. Kiến trúc Hệ CSDL: "Xây Nhà" Cho Data Kiểu Nào?
Có 2 kiểu kiến trúc chính để "xây dựng" hệ thống CSDL:
Kiến trúc tập trung (Centralized): Tưởng tượng như một cái trụ sở chính duy nhất. Toàn bộ CSDL và DBMS được cài đặt và chạy trên một máy chủ (hoặc một cụm máy chủ) đặt tại một nơi. Mọi người dùng từ xa sẽ kết nối về cái "trụ sở" này để làm việc.
Ưu điểm: Dễ cài đặt, quản lý.
Nhược điểm: Nếu "trụ sở" này gặp sự cố (sập server, mất điện...) là cả hệ thống ngủm. Khả năng mở rộng cũng hạn chế hơn.
Kiến trúc phân tán (Distributed): Giống như một chuỗi cửa hàng có nhiều chi nhánh. CSDL được chia nhỏ ra và lưu trữ trên nhiều máy tính khác nhau, đặt ở nhiều nơi, kết nối với nhau qua mạng. DBMS phân tán sẽ đủ thông minh để quản lý mớ dữ liệu phân tán này và cho phép người dùng truy cập như thể nó đang nằm chung một chỗ vậy.
Ưu điểm: Độ tin cậy cao hơn (một "chi nhánh" sập, các chi nhánh khác vẫn hoạt động), hiệu năng truy cập có thể tốt hơn (người dùng truy cập chi nhánh gần mình), dễ mở rộng hơn.
Nhược điểm: Thiết kế, cài đặt và quản lý phức tạp hơn nhiều.
(Thường thì các hệ thống lớn, quan trọng như ngân hàng, mạng xã hội... sẽ dùng kiến trúc phân tán hoặc lai tạp).
Phù! Hết một bài với khá nhiều thuật ngữ "xoắn não" nhưng cực kỳ nền tảng đó nha. Hy vọng qua mấy cái ví von nghe xàm xàm này, mấy ní đã hình dung rõ hơn về các thành phần cấu tạo nên một hệ CSDL và vai trò của từng đứa. Nắm vững mấy khái niệm này là coi như có vốn kha khá để đi tiếp vào các phần hay ho hơn rồi đó!
Stay tuned và đừng quên ôn lại bài cũ trước khi qua bài mới nha! See ya!
Ta như con cá trong cái bể, chỉ mong được thả vào đại dương để làm mồi cho con cá khác.

Bình luận