Cách tôi theo dõi bộ sưu tập nhạc của mình bằng cơ sở dữ liệu SQLite dễ dàng

Tác giả Starlink, T.Ba 22, 2025, 01:22:32 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 2 Khách đang xem chủ đề.

Đây là cách thực hiện.

    SQLite là lựa chọn lý tưởng để quản lý cục bộ bộ sưu tập nhạc vật lý.
    SQLite có quy trình cài đặt dễ dàng, phù hợp với những người không có kinh nghiệm về cơ sở dữ liệu. Giao diện người dùng đồ họa (GUI) như DB Browser cũng đơn giản hóa việc quản lý cơ sở dữ liệu cho người dùng mới.
    Các tính năng của SQLite như gõ động cho phép quản lý và tùy chỉnh cơ sở dữ liệu hiệu quả, cho phép tổ chức tối ưu.


Nếu bạn là người hâm mộ âm nhạc, có lẽ bạn có những kệ đĩa nhạc hoặc đĩa CD. Bạn theo dõi chúng như thế nào? Bạn có thể sử dụng cơ sở dữ liệu, nhưng chúng không phức tạp để thiết lập sao? SQLite là một công cụ mạnh mẽ cho phép bạn thiết lập cơ sở dữ liệu SQL mà không cần máy chủ. Thật ngạc nhiên là nó dễ thiết lập đến vậy. Đây là cách tôi đã làm, mặc dù có kiến thức mơ hồ về SQL.

1. Tại sao lại là SQLite?

Vẫn còn điều gì đó về bộ sưu tập nhạc vật lý, ngay cả trong thời đại phát trực tuyến. Đó là lý do tại sao doanh số bán đĩa than đã tăng lên trong vài năm qua, theo RIAA. Định dạng nhạc mới hấp dẫn nhất không phải là Spotify, MP3 hay FLAC, mà là LP cũ tốt.

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 giai đoạn cuối của "Thời đại Album". Điều đó có nghĩa là sưu tầm album. Vì đây là những năm 90 khi tôi bắt đầu thực sự quan tâm đến âm nhạc, nên định dạng chủ đạo là CD, trừ một số người kỳ quặc thích đĩa than. (Ai sẽ muốn những đĩa nhạc cũ đó?)


Khi bạn có một bộ sưu tập vật lý đáng kể của bất kỳ loại nào, không chỉ là âm nhạc, thì sẽ rất khó để một người theo dõi nó. Đây là lú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 của nó, rất dễ hiểu, nhưng SQL lại nổi tiếng là khó học. Tôi đã được tiếp xúc với nó trong lớp hệ thống thông tin máy tính của trường đại học, nhưng tôi muốn thoải mái hơn với cơ sở dữ liệu và SQL.

Tôi đã nghĩ đến việc cài đặt một máy chủ cơ sở dữ liệu trên máy của mình như MySQL hoặc PostgreSQL, nhưng đó là những hệ thống lớn, phức tạp cần rất nhiều công sức để duy trì. Tôi chỉ là một anh chàng với một chiếc bàn phím và một thùng album.

Tôi cũng có thể thiết lập một cơ sở dữ liệu trong Discogs. Tôi có một 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 tôi. Tôi thậm chí có thể thiết lập nó như một cơ sở dữ liệu tệp phẳng bằng cách sử dụng các công cụ văn bản Linux, nhưng điều này sẽ không mở rộng thành một bộ sưu tập lớn hơn.

SQLite có vẻ 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ó nhẹ và có thể chạy mà không cần máy chủ. Rất nhiều ứng dụng trong thế giới thực đã sử dụng SQLite, bao gồm cả iTunes. Nếu SQLite có thể quản lý thư viện nhạc kỹ thuật số, tôi nghĩ nó có thể dễ dàng xử lý thư viện nhạc vật lý. Đây có thể là lý do tại sao bộ sưu tập bản ghi là ví dụ phổ biến để thiết lập cơ sở dữ liệu quan hệ. Chúng giống như "Xin chào, thế giới!" của cơ sở dữ liệu.

2. Cài đặt SQLite

Vì SQLite miễn phí và có sẵn trong rất nhiều bản phân phối Linux nên tất cả những gì tôi phải làm là sử dụng apt trong Ubuntu (nó có trong WSL, nhưng cũng giống như trong bất kỳ phiên bản Debian hoặc Ubuntu nào):

Mã nguồn [Chọn]
sudo apt install sqlite
Vậy là xong. Tôi đã cài đặt SQLite trong một cái. Điều này cho thấy việc cài đặt SQLite dễ dàng như thế nào.

Tôi có thể tải xuống phiên bản Windows gốc, nhưng tôi thích Linux hơn cho các công việc liên quan đến lập trình. Các hệ thống giống Unix là tốt nhất cho các dự án lập trình lớn và nhỏ, và đó là lý do tại sao WSL tồn tại.

3. Tạo cơ sở dữ liệu

Sau khi cài đặt SQLite, đã đến lúc bắt đầu tạo cơ sở dữ liệu của tôi. Tôi nghĩ về những gì tôi 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á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 ứng dụng dòng lệnh với tên tệp cơ sở dữ liệu mà tôi muốn tạo:

Mã nguồn [Chọn]
sqlite3 music.db
Tôi nhập mã SQL để tạo bảng:

Mã nguồn [Chọn]
CREATE TABLE albums (artist,title,year,format)
Kết thúc mỗi câu lệnh SQL bằng dấu chấm phẩy (;).

Đ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 trước. SQLite sử dụng kiểu động, trong đó nó đoán loại dữ liệu mà trường chứa bằng những gì bạn đưa vào. Nếu bạn đưa vào 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 xác định bảng.

Mặc dù các câu lệnh SQL thường được viết bằng chữ in hoa, nhưng điều này không bắt buộc. Đây là quy ước, nhưng bạn có thể nhập lệnh viết thường vì SQLite chấp nhận cả hai. Các nhà phát triển SQLite sử dụng chữ thường trong tài liệu của họ.

Với bảng đã tạo, bây giờ tôi phải đưa các bản ghi vào đó, ý 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 xuất hiện.

Mã nguồn [Chọn]
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ễ hơn. Việc nhập tất cả các câu lệnh SQL có thể rất nhàm chán, vì vậy có một số front-end trợ giúp có sẵn. Một front-end tốt là DB Browser. Nó tương tự như PHPMyAdmin cho cơ sở dữ liệu MySQL. Đây là một front-end GUI cho phép bạn tạo và thao tác cơ sở dữ liệu SQLite dễ dàng.


Tất cả những gì tôi phải làm là cài đặt nó trong Ubuntu, mặc dù nó cũng có sẵn cho Windows.

Để cài đặt trên Ubuntu, hãy sử dụng lệnh này:

Mã nguồn [Chọn]
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 đã tạo, tôi có thể thêm các trường bằng tab "Browse Data" rồi 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 được đề cập sau để bảo vệ chống lại những thay đổi không mong muốn.

Mặc dù đây là cơ sở dữ liệu cá nhân, tôi muốn thiết lập một số thói quen tốt. Khi làm việc với dữ liệu, tốt nhất là nên sao lưu. Máy khách dòng lệnh SQLite cho phép tôi lưu bản sao lưu cơ sở dữ liệu của mình bằng lệnh.backup:

Mã nguồn [Chọn]
.backup music.db.bak
Tôi có thể gọi tệp đó bằng bất kỳ tên nào tôi muốn, nhưng tôi thường sử dụng phần mở rộng.bak để sao lưu các tệp.

Khi bạn làm việc trên cơ sở dữ liệu, bạn muốn có cách để khôi phục lại các thay đổi nếu có điều gì đó bạn làm gây ra điều gì đó không tốt xảy ra. 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. Với các giao dịch cơ sở dữ liệu, một hoạt động hoặc hoàn thành hoặc không hoàn thành.

Quan trọng hơn, nếu bạn mắc lỗi, bạn có thể quay lại trạng thái trước đó bằng lệnh ROLLBACK. Nó giống như thao tác hoàn tác trong trình xử lý văn bản.

Tom Scott đã học được một bài học đắt giá về sự nguy hiểm khi không sử dụng giao dịch và sao lưu khi làm việc trên cơ sở dữ liệu:

Để bắt đầu giao dịch, hãy sử dụng lệnh này:

Mã nguồn [Chọn]
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 bản ghi, nhưng chúng sẽ không được lưu cho đến khi kết thúc giao dịch, với lệnh COMMIT:

Mã nguồn [Chọn]
COMMIT;
Đây là một ví dụ về việc thêm một vài album vào cơ sở dữ liệu

Mã nguồn [Chọn]
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;

Tạo bản sao lưu và bật giao dịch trước khi thực hiện thay đổi đối với cơ sở dữ liệu.

4. Khám phá cơ sở dữ liệu của tôi

Với cơ sở dữ liệu của tôi đang dần được điền đầy, tôi có thể thử truy vấn nó. Theo mặc định, SQLite xuất ra các bản ghi được phân tách bằng ký tự "|". Để xem chúng theo cột, tôi đặt chế độ:
 
Mã nguồn [Chọn]
.mode column
Các lệnh thuộc SQLite 3 như thế này không sử dụng dấu chấm phẩy ở cuối.

Để xem toàn bộ bộ sưu tập của mình, tôi có thể sử dụng lệnh SELECT *:
 
Mã nguồn [Chọn]
SELECT * FROM albums;

* là ký tự đại diện, tương tự như 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 của một thời điểm. Tôi có thể làm điều đó bằng lệnh LIMIT:
 
Mã nguồn [Chọn]
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:

Mã nguồn [Chọn]
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 một trường và không phân biệt chữ hoa chữ thường trên SQLite.

5. Ồ, tôi cần thêm trường nữa!

Ngay cả khi bạn thiết kế các trường trong cơ sở dữ liệu cẩn thận, có vẻ như bạn cần điều chỉnh các bảng khi bạn nhận ra mình cần một trường khác. Tôi nhận ra rằng sẽ tốt hơn nếu có một trường cho nhãn bản ghi. May mắn thay, việc thay đổi bảng của tôi trong SQLite rất dễ dàng.

Để xem dữ liệu được cấu trúc như thế nào, tôi sử dụng lệnh.schema.


Tôi mở chương trình dòng lệnh và nhập;
     
Mã nguồn [Chọn]
ALTER TABLE albums ADD label;
Tôi cũng có thể dễ dàng thực hiện điều này thông qua DB Browser. Tôi chỉ cần nhấp vào bảng album 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 các hàng, cũng như chọn các loại như một 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ó không sắp xếp năm phát hành chính xác 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 con 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 được sự cố.


Bạn có thể thêm nhãn vào các album đã nhập bằng lệnh UPDATE như sau:

Mã nguồn [Chọn]
UPDATE albums SET label = 'Factory' WHERE artist = 'Joy Division';
Đối với các bản 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 mục nhập trực tiếp và nó tự động sử dụng giao dịch để đảm bảo an toàn. Đây cũng là cơ hội để tạo chế độ xem. Chế độ xem tương tự như 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ường xuyên thực hiện.

Tôi đã tạo một cái cho album vinyl của mình:
     
Mã nguồn [Chọn]
CREATE VIEW vinyl AS SELECT * FROM albums WHERE format = "LP";

Để quay lại chế độ xem của mình, tôi chỉ cần chạy truy vấn này như thể chế độ xem là một bảng khác:

Mã nguồn [Chọn]
SELECT * FROM vinyl;
Bây giờ tôi có thể tiếp tục thêm và kiểm tra bộ sưu tập nhạc của mình và SQLite đã giúp tôi làm được điều đó.