Инструменты пользователя

Инструменты сайта


manual:file_manager_db:test

Файл file_manager.db

📊 ПОЛНАЯ СХЕМА ТАБЛИЦ БАЗЫ ДАННЫХ file_manager.db (SQLite)

Локальная база данных модуля содержит 3 взаимосвязанные таблицы, которые полностью обеспечивают логику безопасности, распределения прав, учета дубликатов и ведения тегов.

📑 Таблица 1: files_catalog (Главный реестр файлов)

Эта таблица хранит физические параметры каждого файла и жестко привязывает его к уровням приватности и пространству пользователя.

Имя поля (Column)Тип данныхФлаги (Constraints)Описание поля и его логическая роль в коде
idINTEGERPRIMARY KEY AUTOINCREMENTУникальный сквозной номер файла внутри модуля.
user_idINTEGERNOT NULLВладелец файла. Сюда записывается глобальный ID пользователя из таблицы core_users ядра.
orig_nameTEXTNOT NULLОригинальное имя, которое видел юзер (например, чертеж_мурманск.dwg). Поддерживает кириллицу.
server_nameTEXTNOT NULLБезопасное имя файла на флешке (например, file_8834.dat). Исключает запуск хакерских скриптов.
file_typeTEXTNOT NULLГруппа файла для быстрой фильтрации в интерфейсе ('photo', 'video', 'audio', 'document').
file_sizeINTEGERNOT NULLРазмер файла в байтах. Используется для вывода в таблице и контроля лимитов места.
file_hashTEXTNOT NULLMD5-хэш содержимого. Нужен для защиты от дубликатов (дедупликации) и экономии памяти флешки.
virtual_folderTEXTDEFAULT '/'Виртуальный путь в интерфейсе (например, '/мурманск/проекты/'). Избавляет от создания реальных папок на диске.
access_levelTEXTDEFAULT 'private'Контур приватности. Принимает строго 3 значения: 'private' (только владелец), 'group' (семья/отдел), 'public' (все).
download_countINTEGERDEFAULT 0Счетчик скачиваний. Показывает Суперадмину популярность файла.
is_deletedINTEGERDEFAULT 0Флаг Корзины. 0 — файл активен, 1 — файл удален пользователем в Корзину (скрыт из общего списка).
created_atDATETIMEDEFAULT CURRENT_TIMESTAMPТочная дата и время загрузки файла на сервер.
updated_atDATETIMEDEFAULT CURRENT_TIMESTAMPДата и время последнего изменения файла. При первой загрузке равна created_at, но если пользователь отредактировал текст readme.txt через встроенный core_edit, PHP обновит это поле текущим штампом времени.
is_draftINTEGERDEFAULT 1Флаг черновика. 1 — файл является черновиком (виден только автору), 0 — файл опубликован (активируется проверка access_level). Это спасет админа, если он загружает огромный ISO-образ приложения частями, чтобы юзеры не начали качать битый файл до конца загрузки.
version_nameTEXTDEFAULT '1.0.0'Строковый маркер версии проекта, понятный человеку (например, v1.0.12, v2.0-beta).
parent_idINTEGERDEFAULT 0Ключ версионирования. Если файл является новой версией старого проекта, сюда записывается id самого первого (базового) файла. Таким образом, в интерфейсе мы сможем схлопнуть историю изменений в одну строчку с выпадающим списком «История версий».
os_tagTEXTDEFAULT 'any'Метка операционной системы, под которую собран файл (например: windows, linux, macos, any).
cpu_tagTEXTDEFAULT 'any'Метка архитектуры процессора (например: x86_64, arm64, any). Критически важно для нашего «CD-диска» к руководству, чтобы пользователь случайно не скачал бинарник FFmpeg для ARM на обычный ПК Intel.

🏷️ Таблица 2: files_tags (Индексатор тегов для быстрого поиска)

Позволяет привязывать к одному файлу бесконечное количество поисковых меток (например, к одной фотографии можно добавить теги: «2026», «Отпуск», «Мурманск»). Связана с главной таблицей отношением «один ко многим».

Имя поля (Column)Тип данныхФлаги (Constraints)Описание поля и его логическая роль в коде
idINTEGERPRIMARY KEY AUTOINCREMENTУникальный номер тега.
file_idINTEGERNOT NULLСвязующий ключ. Указывает, к какому конкретно файлу из files_catalog привязан этот тег.
tag_nameTEXTNOT NULLСам текст тега в нижнем регистре для удобства поиска (например, отпуск).
  • Правило каскадного удаления: Для поля file_id прописывается связь FOREIGN KEY(file_id) REFERENCES files_catalog(id) ON DELETE CASCADE. Это значит, что если Игорь окончательно очистит файл из Корзины, ядро SQLite автоматически и молча сотрет все теги, привязанные к этому файлу, предотвращая появление мусора в базе.

👥 Таблица 3: files_shares (Точечный доступ для конкретных людей)

Нужна для расширения логики приватности. Если уровень доступа файла равен private, но Игорь хочет показать этот конкретный файл только Алисе (не открывая его для всей группы или интернета), эта таблица зафиксирует исключение.

Имя поля (Column)Тип данныхФлаги (Constraints)Описание поля и его логическая роль в коде
idINTEGERPRIMARY KEY AUTOINCREMENTУникальный номер записи.
file_idINTEGERNOT NULLID файла из таблицы files_catalog, к которому дается доступ.
shared_with_idINTEGERNOT NULLID пользователя из глобальной базы ядра (core_users), которому разрешено скачать этот приватный файл.

💻 Готовый SQL-код для инсталлятора модуля (Для вашего руководства)

Когда Суперадмин будет впервые активировать модуль файлового менеджера, его controller.php выполнит этот чистый SQL-запрос для создания структуры:

SQL-- 1. Создаем таблицу каталога файлов
CREATE TABLE IF NOT EXISTS files_catalog (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,
    orig_name TEXT NOT NULL,
    server_name TEXT NOT NULL,
    file_type TEXT NOT NULL,
    file_size INTEGER NOT NULL,
    file_hash TEXT NOT NULL,
    virtual_folder TEXT DEFAULT '/',
    access_level TEXT DEFAULT 'private',
    download_count INTEGER DEFAULT 0,
    is_deleted INTEGER DEFAULT 0,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
 
-- 2. Создаем таблицу тегов с автоматической очисткой
CREATE TABLE IF NOT EXISTS files_tags (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    file_id INTEGER NOT NULL,
    tag_name TEXT NOT NULL,
    FOREIGN KEY(file_id) REFERENCES files_catalog(id) ON DELETE CASCADE
);
 
-- 3. Создаем таблицу точечных доступов
CREATE TABLE IF NOT EXISTS files_shares (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    file_id INTEGER NOT NULL,
    shared_with_id INTEGER NOT NULL,
    FOREIGN KEY(file_id) REFERENCES files_catalog(id) ON DELETE CASCADE
);
 
-- 4. Создаем системные индексы для ультрабыстрого поиска (чтобы флешка не тормозила)
CREATE INDEX IF NOT EXISTS idx_files_user ON files_catalog(user_id);
CREATE INDEX IF NOT EXISTS idx_files_hash ON files_catalog(file_hash);
CREATE INDEX IF NOT EXISTS idx_tags_file ON files_tags(file_id);
Только авторизованные участники могут оставлять комментарии.
manual/file_manager_db/test.txt · Последнее изменение: 127.0.0.1

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki