Nếu bạn là một người yêu nhạc, chắc hẳn bạn đang sở hữu những kệ đĩa than, CD hoặc cassette quý giá. Việc theo dõi và quản lý một bộ sưu tập ngày càng lớn có thể trở nên phức tạp. Liệu có giải pháp nào dễ dàng mà không cần phải là chuyên gia cơ sở dữ liệu? Câu trả lời là SQLite – một công cụ mạnh mẽ cho phép bạn thiết lập các cơ sở dữ liệu SQL mà không cần máy chủ, và thật bất ngờ, nó cực kỳ dễ cài đặt. Dù chỉ có kiến thức mơ hồ về SQL, tôi đã tự mình xây dựng một hệ thống quản lý hiệu quả như thế nào, bạn cũng có thể làm được!
Tại Sao SQLite Là Lựa Chọn Lý Tưởng Cho Bộ Sưu Tập Nhạc Của Bạn?
Trong thời đại của nhạc số và các dịch vụ streaming, vẫn có một sức hấp dẫn đặc biệt đối với bộ sưu tập nhạc vật lý. Đó là lý do tại sao doanh số bán đĩa than đã tăng vọt trong vài năm qua, theo báo cáo từ RIAA. Định dạng âm nhạc “hot” nhất hiện nay không phải là Spotify hay MP3, mà chính là những chiếc đĩa LP truyền thống. Là một người thuộc thế hệ Millennials, thói quen nghe nhạc của tôi được hình thành vào cuối “Thời kỳ Album”, điều đó có nghĩa là việc sưu tầm các album là điều tất yếu. Khi tôi bắt đầu quan tâm nghiêm túc đến âm nhạc vào những năm 90, định dạng thống trị là CD, bên cạnh một số ít người vẫn ưa chuộng đĩa than cũ.
Khi bạn có một bộ sưu tập vật lý đáng kể, không chỉ riêng âm nhạc, việc theo dõi nó trở nên khó khăn. Đây là lúc các cơ sở dữ liệu phát huy tác dụng. Cơ sở dữ liệu quan hệ, với các hàng và cột, rất dễ hiểu, nhưng SQL lại có tiếng là khó học. Tôi từng được tiếp xúc với nó trong một lớp học hệ thống thông tin máy tính ở đại học, nhưng tôi muốn trở nên thành thạo hơn với cơ sở dữ liệu và SQL.
Tôi đã cân nhắc việc cài đặt một máy chủ cơ sở dữ liệu trên máy tính của mình như MySQL hoặc PostgreSQL, nhưng đó là những hệ thống lớn, phức tạp và đòi hỏi nhiều công sức để bảo trì. Tôi chỉ là một người dùng muốn quản lý bộ sưu tập album của mình một cách đơn giản.
Một lựa chọn khác là thiết lập cơ sở dữ liệu trong Discogs. Tôi có tài khoản người dùng ở đó, nhưng tôi muốn một cơ sở dữ liệu chạy cục bộ dưới sự kiểm soát của mình. Tôi thậm chí có thể thiết lập nó như một cơ sở dữ liệu flat-file bằng các công cụ văn bản của Linux, nhưng điều này sẽ không mở rộng được cho một bộ sưu tập lớn hơn.
SQLite dường như là lựa chọn lý tưởng. Đó là một cơ sở dữ liệu quan hệ sử dụng SQL làm ngôn ngữ truy vấn. Nó cực kỳ nhẹ và sẽ chạy mà không cần máy chủ. Rất nhiều ứng dụng thực tế đã sử dụng SQLite, bao gồm cả iTunes. Nếu SQLite có thể quản lý một thư viện nhạc kỹ thuật số, tôi nghĩ nó hoàn toàn có thể xử lý một thư viện vật lý. Đây có lẽ là lý do tại sao việc quản lý bộ sưu tập đĩa nhạc là một ví dụ phổ biến khi thiết lập các cơ sở dữ liệu quan hệ, nó giống như câu “Hello, world!” trong lĩnh vực database vậy.
Trang web chính thức của SQLite – tài nguyên hữu ích cho người mới
Hướng Dẫn Cài Đặt SQLite Nhanh Chóng
Vì SQLite là miễn phí và có sẵn trong rất nhiều bản phân phối Linux, tất cả những gì tôi phải làm là sử dụng apt
trong Ubuntu (tôi dùng trong WSL, nhưng nó sẽ tương tự trên bất kỳ phiên bản Debian hoặc Ubuntu nào):
sudo apt install sqlite3
Chỉ vậy thôi! Tôi đã cài đặt SQLite xong trong tích tắc. Điều này cho thấy việc cài đặt SQLite dễ dàng đến mức nào.
Tôi cũng có thể tải xuống phiên bản gốc dành cho Windows, nhưng tôi vẫn thích Linux cho các công việc liên quan đến lập trình. Các hệ thống giống Unix là lựa chọn tốt nhất cho các dự án lập trình lớn nhỏ, và đó là lý do WSL tồn tại.
Xây Dựng Cơ Sở Dữ Liệu Bộ Sưu Tập Nhạc Của Bạn
Sau khi cài đặt SQLite, đã đến lúc bắt đầu tạo cơ sở dữ liệu. Tôi đã nghĩ về những gì mình sẽ cần. Một cơ sở dữ liệu cho bộ sưu tập CD và LP của tôi sẽ cần các trường cho nghệ sĩ, tiêu đề, năm phát hành gốc và định dạng.
Tôi khởi động công cụ dòng lệnh với tên tệp cơ sở dữ liệu mà tôi muốn tạo:
sqlite3 music.db
Tôi đã nhập mã SQL để tạo bảng:
CREATE TABLE albums (artist,title,year,format);
Lưu ý: Kết thúc mỗi câu lệnh SQL bằng ký tự dấu chấm phẩy (;).
Một điểm hay của SQLite so với các hệ thống cơ sở dữ liệu khác là tôi không cần phải mã hóa cứng các kiểu dữ liệu từ trước. SQLite sử dụng kiểu dữ liệu động (dynamic typing), nơi nó đoán loại dữ liệu mà trường chứa dựa trên những gì bạn nhập vào. Nếu bạn nhập một chuỗi ký tự, nó sẽ quyết định trường đó là một chuỗi. Điều này giúp tôi tiết kiệm thời gian và công sức trong việc định nghĩa bảng.
Mặc dù các câu lệnh SQL theo truyền thống được viết bằng chữ hoa, nhưng điều đó không bắt buộc. Đó là một quy ước, nhưng bạn có thể nhập các lệnh chữ thường vì SQLite chấp nhận cả hai. Các nhà phát triển SQLite thậm chí còn sử dụng chữ thường trong tài liệu của họ.
Với bảng đã được tạo, giờ tôi phải đưa các bản ghi vào đó, và ý tôi là các bản ghi cơ sở dữ liệu, không phải đĩa than. Đó là lúc lệnh INSERT INTO
phát huy tác dụng:
INSERT INTO albums VALUES ("Pink Floyd", "The Dark Side of the Moon", 1973,"LP");
Tôi có thể làm điều này cho toàn bộ bộ sưu tập của mình, nhưng có một cách dễ dàng hơn. Việc gõ tất cả các câu lệnh SQL có thể tẻ nhạt, vì vậy có một số giao diện người dùng hỗ trợ có sẵn. Một công cụ tốt là DB Browser for SQLite. Nó tương tự như PHPMyAdmin cho cơ sở dữ liệu MySQL. Đây là giao diện người dùng đồ họa (GUI) cho phép bạn tạo và thao tác cơ sở dữ liệu SQLite một cách dễ dàng.
Giao diện DB Browser hiển thị bảng "albums" đã tạo
Tất cả những gì tôi phải làm là cài đặt nó trên Ubuntu, mặc dù nó cũng có sẵn cho Windows.
Để cài đặt trên Ubuntu, sử dụng lệnh này:
sudo apt install sqlitebrowser
Để làm việc trên cơ sở dữ liệu SQLite, tôi chỉ cần mở tệp music.db
mà tôi đã tạo bằng cách vào File > Open Database và điều hướng đến tệp cơ sở dữ liệu. Với cơ sở dữ liệu đã được tạo, tôi có thể thêm các trường với tab “Browse Data” và sau đó nhấn nút “Insert Record”. Nó hiển thị một bảng tương tự như bảng tính. Tôi có thể điền vào các trường cho các album mà tôi có. Đằng sau hậu trường, nó sử dụng các giao dịch (transactions) được đề cập sau để bảo vệ chống lại các thay đổi không mong muốn.
Mặc dù đây là một cơ sở dữ liệu cá nhân, tôi vẫn muốn hình thành một số thói quen tốt. Khi làm việc với dữ liệu, tốt nhất là có bản sao lưu (backup). Công cụ dòng lệnh của SQLite cho phép tôi lưu một bản sao lưu cơ sở dữ liệu của mình bằng lệnh .backup
:
.backup music.db.bak
Tôi có thể đặt tên tệp bất cứ thứ gì tôi muốn, nhưng tôi có xu hướng sử dụng phần mở rộng .bak
cho các bản sao lưu của tệp.
Khi bạn đang làm việc trên một cơ sở dữ liệu, bạn muốn có một cách để quay lại các thay đổi nếu điều gì đó bạn làm gây ra lỗi. SQLite, giống như nhiều hệ thống cơ sở dữ liệu khác, có một hệ thống giao dịch (transaction system). Với các giao dịch cơ sở dữ liệu, một thao tác hoặc hoàn thành hoặc không.
Quan trọng hơn, nếu bạn mắc lỗi, bạn có thể quay lại các trạng thái trước đó bằng lệnh ROLLBACK
. Nó giống như thao tác hoàn tác trong một trình xử lý văn bản.
Để bắt đầu một giao dịch, sử dụng lệnh này:
BEGIN TRANSACTION;
Bất cứ điều gì bạn làm với cơ sở dữ liệu sẽ được hiển thị, chẳng hạn như thêm, xóa hoặc sửa đổi các bản ghi, nhưng chúng sẽ không được lưu cho đến khi kết thúc một giao dịch, với lệnh COMMIT
:
COMMIT;
Đây là một ví dụ về việc thêm một vài album vào cơ sở dữ liệu:
BEGIN TRANSACTION;
INSERT INTO albums VALUES ("Pearl Jam","Ten",1991,"CD");
INSERT INTO albums VALUES ("Nirvana", "Nevermind",1991,"CD");
INSERT INTO albums VALUES ("Pink Floyd","Wish You Were Here", 1975,"Pink Floyd Records");
COMMIT;
Lời khuyên: Luôn tạo bản sao lưu và bật giao dịch trước khi thực hiện các thay đổi lớn đối với cơ sở dữ liệu để đảm bảo an toàn dữ liệu.
Khám Phá và Truy Vấn Bộ Sưu Tập Nhạc Của Bạn Với SQLite
Với cơ sở dữ liệu của tôi dần được điền đầy, tôi có thể thử truy vấn nó. Theo mặc định, SQLite xuất các bản ghi được phân tách bằng ký tự “|”. Để xem chúng trong các cột, tôi đặt chế độ:
.mode column
Các lệnh là một phần của SQLite 3 như lệnh trên không sử dụng dấu chấm phẩy ở cuối.
Để xem toàn bộ bộ sưu tập của tôi, tôi có thể sử dụng lệnh SELECT *
:
SELECT * FROM albums;
Câu lệnh SELECT trên bảng albums trong SQLite, hiển thị dữ liệu
Dấu *
là một ký tự đại diện, tương tự như các ký tự đại diện trên shell Linux, cho phép tôi chọn mọi bản ghi. Tất nhiên, tôi chỉ muốn xem một vài bản ghi một lúc. Tôi có thể làm điều đó với lệnh LIMIT
:
SELECT * FROM albums LIMIT 5;
Để tìm các trường khớp với tiêu chí, chẳng hạn như nghệ sĩ, tôi có thể sử dụng mệnh đề WHERE
:
SELECT * FROM albums WHERE artist LIKE '%pink floyd%';
Các câu lệnh LIKE
của SQLite khớp một phần với trường và chúng không phân biệt chữ hoa chữ thường trên SQLite.
Dễ Dàng Điều Chỉnh Cấu Trúc Bảng Với SQLite
Dù bạn thiết kế các trường trong cơ sở dữ liệu cẩn thận đến đâu, dường như bạn vẫn cần điều chỉnh bảng khi nhận ra mình cần thêm một trường khác. Tôi nhận ra rằng sẽ rất tốt nếu có một trường cho nhãn hiệu đĩa (record label). May mắn thay, việc thay đổi bảng của tôi trong SQLite rất dễ dàng.
Để xem cấu trúc dữ liệu, tôi sử dụng lệnh .schema
.
Xem schema của cơ sở dữ liệu bộ sưu tập nhạc trong SQLite
Tôi mở công cụ dòng lệnh và gõ:
ALTER TABLE albums ADD label;
Tôi cũng có thể dễ dàng làm điều này thông qua DB Browser. Tôi chỉ cần nhấp vào bảng albums
trong tab “Database Structure” và nhấp vào chức năng “Modify Table”. Tôi có thể thêm hoặc xóa hàng, cũng như chọn các kiểu dữ liệu làm ràng buộc. Khi tôi nhập năm phát hành trong DB Browser, tôi nhận thấy rằng nó sẽ không sắp xếp năm phát hành đúng cách cho các mục tôi đã thêm. Tôi đã nói rõ ràng với SQLite rằng năm phát hành là một số thông qua menu bằng cách chọn tùy chọn “INTEGER”, và điều đó dường như đã khắc phục vấn đề.
Chỉnh sửa cấu trúc bảng trong DB Browser để thêm trường mới
Có thể thêm nhãn hiệu cho các album đã nhập với lệnh UPDATE
như sau:
UPDATE albums SET label = 'Factory' WHERE artist = 'Joy Division';
Đối với các cập nhật đơn giản, sử dụng DB Browser có thể tốt hơn vì bạn có thể chỉnh sửa trực tiếp các mục và nó tự động sử dụng các giao dịch để đảm bảo an toàn. Đây cũng là cơ hội để tạo một view (chế độ xem). Một view tương tự như một tìm kiếm đã lưu. Điều này cho phép bạn lưu các truy vấn phức tạp mà bạn thực hiện thường xuyên.
Tôi đã tạo một chế độ xem cho các album đĩa than của mình:
CREATE VIEW vinyl AS SELECT * FROM albums WHERE format = "LP";
Kết quả truy vấn view "vinyl" trong SQLite, hiển thị chỉ đĩa than
Để quay lại chế độ xem của tôi, tôi chỉ cần chạy truy vấn này như thể chế độ xem là một bảng khác:
SELECT * FROM vinyl;
Giờ đây, tôi có thể tiếp tục thêm vào và kiểm tra bộ sưu tập nhạc của mình, và SQLite đã giúp điều đó trở nên khả thi.
Bạn đã thử quản lý bộ sưu tập của mình bằng SQLite chưa? Hãy chia sẻ kinh nghiệm của bạn dưới phần bình luận nhé!