Bảng tính hợp cho một người xem và tính toán trên một lượng dữ liệu vừa phải. Cơ sở dữ liệu được làm ra cho nhiều người và nhiều chương trình cùng đọc ghi một cách an toàn, giữ dữ liệu luôn đúng bằng những ràng buộc, liên kết nhiều bảng với nhau, và tìm kiếm nhanh trên lượng dữ liệu rất lớn.
Chào bạn, đây là Nhà Lập Trình. Rất nhiều cửa hàng, văn phòng ở Việt Nam đang chạy cả việc kinh doanh trên vài tệp bảng tính. Và rất nhiều lập trình viên mới học cơ sở dữ liệu thì nghĩ nó chỉ là bảng tính phiên bản khó dùng hơn. Tập này mình kể hai thứ khác nhau ở đâu, bằng một câu chuyện cửa hàng.
Khi bảng tính bắt đầu mệt
Hãy hình dung một cửa hàng vật liệu xây dựng quản lý bằng một tệp bảng tính. Một trang là danh sách hàng hoá, một trang là đơn bán, một trang là khách nợ. Ban đầu mọi thứ ổn, chị chủ tự nhập, tự xem.
Rồi cửa hàng thuê thêm hai nhân viên bán hàng. Cả ba cùng mở tệp. Người này sửa xong lưu lại, đè mất thay đổi của người kia. Có hôm hai phiên bản của tệp cùng tồn tại, không ai biết bản nào đúng.
Rồi một nhân viên gõ nhầm số lượng thành chữ, công thức tổng cộng báo lỗi. Một người khác gõ tên khách hơi khác, thêm một dấu cách, thế là cùng một khách thành hai khách trong báo cáo công nợ. Không có gì ngăn những lỗi đó.
Rồi dữ liệu lên tới vài chục nghìn dòng, tệp mở mất cả phút, lọc một cái là máy treo. Đây là lúc bảng tính bắt đầu mệt, và cơ sở dữ liệu bắt đầu có lý do tồn tại.
Nhiều người cùng ghi mà không đè nhau
Khác biệt lớn đầu tiên là cơ sở dữ liệu được thiết kế cho nhiều người và nhiều chương trình cùng đọc ghi. Nó không lưu cả tệp một lúc như bảng tính, mà ghi từng thay đổi nhỏ. Người này thêm một đơn, người kia sửa một khách hàng, hai thay đổi không đè lên nhau.
Khi hai người cùng sửa đúng một dòng, cơ sở dữ liệu có cơ chế xếp hàng để một người làm trước, người kia làm sau, và dữ liệu không bao giờ ở trạng thái nửa vời.
Nó cũng có quyền hạn chi tiết. Nhân viên bán hàng được thêm đơn nhưng không được xoá. Kế toán được xem công nợ nhưng không được sửa giá. Với bảng tính, ai mở được tệp là làm được mọi thứ.
Và mọi thay đổi có thể được ghi lại: ai sửa, sửa lúc nào, từ giá trị gì thành giá trị gì. Khi có sai sót, bạn lần ra được.
Ràng buộc giữ dữ liệu luôn đúng
Khác biệt thứ hai là ràng buộc. Trong cơ sở dữ liệu, bạn khai báo trước cột số lượng phải là con số, không được âm. Cột ngày phải là ngày hợp lệ. Mã khách hàng không được trùng. Mỗi đơn hàng phải thuộc về một khách hàng có thật.
Khi ai đó cố ghi dữ liệu vi phạm, cơ sở dữ liệu từ chối ngay. Không có chuyện số lượng thành chữ, không có đơn hàng mồ côi không thuộc khách nào.
Nghe có vẻ khắt khe, nhưng đây là thứ bảo vệ bạn khỏi những lỗi âm thầm tích tụ qua nhiều năm. Với bảng tính, dữ liệu bẩn lọt vào từng chút một, và đến lúc phát hiện thì đã có hàng nghìn dòng sai.
Người lập trình mới hay bỏ qua ràng buộc vì nghĩ chương trình đã kiểm tra rồi. Nhưng chương trình có thể có lỗi, có thể có người sửa dữ liệu trực tiếp, có thể có một công cụ nhập liệu khác. Ràng buộc ở cơ sở dữ liệu là lưới an toàn cuối cùng.
Liên kết thay vì chép lại
Khác biệt thứ ba là cách tổ chức. Trong bảng tính, người ta hay chép thông tin: mỗi dòng đơn hàng ghi luôn tên khách, số điện thoại, địa chỉ. Khách đổi số điện thoại, phải sửa ở hàng trăm dòng, và chắc chắn sẽ sót.
Cơ sở dữ liệu tách thành nhiều bảng liên kết với nhau. Bảng khách hàng lưu thông tin khách một lần. Bảng đơn hàng chỉ lưu mã khách. Muốn xem đơn kèm tên khách, cơ sở dữ liệu tự ghép hai bảng lại. Khách đổi số điện thoại, sửa một chỗ, mọi đơn hàng đều thấy số mới.
Cách tổ chức này giúp dữ liệu không mâu thuẫn với chính nó. Nó cũng cho phép hỏi những câu phức tạp: khách nào mua loại hàng này nhiều nhất trong ba tháng qua mà chưa trả hết nợ. Với bảng tính, câu hỏi này cần rất nhiều thao tác tay.
Ngôn ngữ để hỏi những câu như vậy là ngôn ngữ truy vấn có cấu trúc, gần như cơ sở dữ liệu quan hệ nào cũng dùng. Học nó là một trong những kỹ năng bền nhất của nghề, vì nó thay đổi rất chậm qua nhiều năm.
Khi nào bảng tính vẫn là đủ?
Nói vậy không có nghĩa là mọi thứ đều cần cơ sở dữ liệu. Bảng tính là một công cụ tuyệt vời. Một người quản lý dữ liệu vài trăm, vài nghìn dòng, cần tính toán linh hoạt, vẽ biểu đồ nhanh, thì bảng tính thường tốt hơn.
Bảng tính cũng rất tốt để phân tích. Nhiều người làm dữ liệu vẫn xuất từ cơ sở dữ liệu ra bảng tính để khám phá, lọc, xoay chiều, trước khi quyết định cần báo cáo gì cố định.
Dấu hiệu nên chuyển là khi có nhiều người cùng sửa, khi dữ liệu bắt đầu mâu thuẫn, khi có nhiều bảng cần liên kết, khi dữ liệu đủ lớn để tệp chậm, hoặc khi cần một chương trình khác đọc ghi tự động.
Nếu bạn làm phần mềm cho một cửa hàng đang dùng bảng tính, hãy tôn trọng những gì họ đã xây. Tệp bảng tính của chị chủ chứa đựng hiểu biết nhiều năm về cách cửa hàng vận hành. Nó là bản thiết kế đầu tiên cho cơ sở dữ liệu của bạn.
Câu hỏi thường gặp
Cơ sở dữ liệu là gì?
Là một hệ thống lưu trữ dữ liệu có tổ chức, cho phép nhiều người và nhiều chương trình cùng đọc ghi an toàn, giữ dữ liệu đúng bằng ràng buộc và tìm kiếm nhanh trên lượng dữ liệu lớn.
Cửa hàng nhỏ có cần cơ sở dữ liệu không?
Không nhất thiết lúc đầu. Khi có nhiều người cùng nhập liệu, dữ liệu bắt đầu mâu thuẫn hoặc cần phần mềm bán hàng, thì nên dùng phần mềm có cơ sở dữ liệu phía sau.
Ngôn ngữ truy vấn có cấu trúc là gì?
Là ngôn ngữ chuẩn để hỏi và thay đổi dữ liệu trong hầu hết cơ sở dữ liệu quan hệ. Nó cho phép lọc, sắp xếp, ghép nhiều bảng và tổng hợp dữ liệu bằng câu lệnh gần với ngôn ngữ tự nhiên.
Có thể chuyển dữ liệu từ bảng tính sang cơ sở dữ liệu không?
Có, nhưng cần làm sạch trước: thống nhất tên khách, sửa ô sai kiểu, tách thông tin bị chép lặp thành bảng riêng. Phần làm sạch thường tốn công hơn phần chuyển.
Người không phải lập trình viên có nên học cơ sở dữ liệu không?
Nên học ở mức cơ bản nếu thường xuyên làm việc với dữ liệu. Biết cách tổ chức bảng và viết truy vấn đơn giản giúp làm báo cáo nhanh và chính xác hơn nhiều.