0

SQLite

Tạo Table

Table Vault

CREATE TABLE Vault (
    vault_id INTEGER PRIMARY KEY AUTOINCREMENT,
    salt TEXT NOT NULL,
    encrypted_master_key BLOB NOT NULL,
    nonce BLOB NOT NULL,
    tag BLOB NOT NULL
);
CREATE TABLE Folder (
    folder_id   INTEGER PRIMARY KEY AUTOINCREMENT, // cái này sẽ sửa lại là gán Folder ID
    vault_id    INTEGER NOT NULL,
    parent_id   INTEGER,
    name        TEXT NOT NULL,
    
    FOREIGN KEY(vault_id) REFERENCES Vault(vault_id),
    FOREIGN KEY(parent_id) REFERENCES Folder(folder_id)
);
CREATE INDEX idx_folder_lookup 
ON Folder(vault_id, parent_id, name);

Insert - Tạo folder

Tạo root folder

INSERT INTO Folder (vault_id, parent_id, name)
VALUES (1, NULL, 'photos');

Tạo folder con

INSERT INTO Folder (vault_id, parent_id, name)
VALUES (1, 1, '2024');

SELECT

Tìm folder theo path từng bước

Step 1: Tìm Root

SELECT folder_id 
FROM Folder 
WHERE vault_id = 1 
  AND parent_id IS NULL 
  AND name = 'photos';

Step2: Tìm folder con

SELECT folder_id 
FROM Folder 
WHERE parent_id = ? 
  AND name = '2024';

Lấy danh sách folder con

SELECT folder_id, name 
FROM Folder 
WHERE parent_id = ?;

UPDATE - rename/remove

Rename

UPDATE Folder 
SET name = 'documents' 
WHERE folder_id = 4;

Move Folder

UPDATE Folder 
SET parent_id = 1 
WHERE folder_id = 5;

DELETE

DELETE FROM Folder 
WHERE folder_id = ?;

Nếu muốn xóa cả sub

WITH RECURSIVE subfolders(id) AS (
    SELECT folder_id FROM Folder WHERE folder_id = ?
    UNION ALL
    SELECT f.folder_id
    FROM Folder f
    JOIN subfolders s ON f.parent_id = s.id
)
DELETE FROM Folder WHERE folder_id IN subfolders;

Workflow thực tế

Bước 1: User mở Vault

SELECT * FROM Vault WHERE vault_id = 1;

Bước 2: Lấy Root Folders

SELECT * 
FROM Folder 
WHERE vault_id = 1 AND parent_id IS NULL;

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí