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

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


lss-server-php:db-datastructure-sqlite

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
lss-server-php:db-datastructure-sqlite [2026/06/15 16:11] – [важные замечания] madminlss-server-php:db-datastructure-sqlite [2026/06/15 16:28] (текущий) – [SQlite - требования к структуре БД] madmin
Строка 1: Строка 1:
 ====== SQlite - требования к структуре БД ====== ====== SQlite - требования к структуре БД ======
 +В настоящий момент полноценно реализована поддержка серверов PostgreSql и SQlite. В этом документе описаны требования к **SQlite**, а для PostgreSql требования можно посмотреть здесь: [[db-datastructure-postgresql]]
 +
 ===== Создание и инициализация системных таблиц ===== ===== Создание и инициализация системных таблиц =====
 Для корректной работы LSS сервера в базе данных должны присутствовать системные таблицы: Для корректной работы LSS сервера в базе данных должны присутствовать системные таблицы:
Строка 200: Строка 202:
 PRAGMA foreign_keys = ON; PRAGMA foreign_keys = ON;
 </code> </code>
 +===== Создание структуры БД для пользовательских таблиц =====
 +Вот пример скрипта создания пользовательских таблиц из тестового примера:
 +==== содержимое скрипта ====
 +<code>
 +-- роль доступа
 +create table "role" (
 + "id" integer primary key,
 + "code" varchar(64) not null default '',
 + "name" varchar(255) not null default ''
 +);
 +create unique index "uidx_role_code" on "role" ("code") where "id">0;
 +create unique index "uidx_role_name" on "role" ("name") where "id">0;
  
 +-- пользователь системы
 +create table "user" (
 + "id" integer primary key,
 + "login" varchar(64) not null default '',
 + "password" varchar(255) not null default '',
 + "fio" varchar(255) not null default '',
 + "roleid" integer references "role" on delete restrict
 +);
 +create index "idx_user_roleid" on "user" ("roleid");
 +create unique index "uidx_user_login" on "user" ("login") where "id">0;
 +
 +-- цех
 +create table "department" (
 + "id" integer primary key,
 + "name" varchar(255) not null default ''
 +);
 +create unique index "uidx_department_name" on "department" ("name") where "id">0;
 +
 +-- участок
 +create table "sector" (
 + "id" integer primary key,
 + "departmentid" integer references "department" on delete cascade,
 + "name" varchar(255) not null default ''
 +);
 +create index "idx_sector_departmentid" on "sector" ("departmentid");
 +create unique index "uidx_sector_unique" on "sector" ("departmentid", "name") where "id">0;
 +
 +-- тип оборудования
 +create table "machinetype" (
 + "id" integer primary key,
 + "name" varchar(255) not null default ''
 +);
 +create unique index "uidx_machinetype_name" on "machinetype" ("name") where "id">0;
 +
 +-- состояние оборудования
 +create table "machinestatus" (
 + "id" integer primary key,
 + "name" varchar(255) not null default ''
 +);
 +create unique index "uidx_machinestatus_name" on "machinestatus" ("name") where "id">0;
 +
 +-- вид ремонта
 +create table "repair" (
 + "id" integer primary key,
 + "name" varchar(255) not null default '',
 + "npp" int not null default 0
 +);
 +create unique index "uidx_repair_name" on "repair" ("name") where "id">0;
 +
 +-- паспорт оборудования
 +create table "machine" (
 + "id" integer primary key,
 + "dfrom" date,
 + "invnum" varchar(64) not null default '',
 + "machinetypeid" integer references "machinetype" on delete restrict,
 + "model" varchar(64) not null default '',
 + "departmentid" integer references "department" on delete restrict,
 + "sectorid" integer references "sector" on delete restrict,
 + "dstatus" date,
 + "machinestatusid" integer references "machinestatus" on delete restrict
 +);
 +create index "idx_machine_machinetypeid" on "machine" ("machinetypeid");
 +create index "idx_machine_departmentid" on "machine" ("departmentid");
 +create index "idx_machine_sectorid" on "machine" ("sectorid");
 +create index "idx_machine_machinestatusid" on "machine" ("machinestatusid");
 +create unique index "uidx_machine_invnum" on "machine" ("invnum") where "id">0;
 +
 +-- ремонт оборудования
 +create table "machinerepair" (
 + "id" integer primary key,
 + "machineid" integer references "machine" on delete cascade,
 + "repairid" integer references "repair" on delete restrict,
 + "dplan" date,
 + "dfact" date
 +);
 +create index "idx_machinerepair_machineid" on "machinerepair" ("machineid");
 +create index "idx_machinerepair_repairid" on "machinerepair" ("repairid");
 +
 +-- нормы ремонтов
 +create table "repairnorm" (
 + "id" integer primary key,
 + "repairid" integer references "repair" on delete cascade,
 + "machinetypeid" integer references "machinetype" on delete cascade,
 + "period" integer not null default 0
 +);
 +create index "idx_repairnorm_repairid" on "repairnorm" ("repairid");
 +create index "idx_repairnorm_machinetypeid" on "repairnorm" ("machinetypeid");
 +create unique index "uidx_repairnorm_unique" on "repairnorm" ("machinetypeid","repairid") where "id">0;
 +</code>
 ==== важные замечания ==== ==== важные замечания ====
   * имена таблиц и полей - маленькие буквы английского алфавита или цифры   * имена таблиц и полей - маленькие буквы английского алфавита или цифры
   * соглашения на уникальный идентификатор таблицы:   * соглашения на уникальный идентификатор таблицы:
     * у каждой таблицы должен быть уникальный идентификатор, с именем **id**, по нему первичный ключ     * у каждой таблицы должен быть уникальный идентификатор, с именем **id**, по нему первичный ключ
-    * обычно он автоинкрементный, тип **integer**, значения строго положительные. Такие ключи объявляются как: <code>"id" bigserial primary key</code>+    * обычно он автоинкрементный, тип **integer**, значения строго положительные. Такие ключи объявляются как: <code>"id" integer primary key</code>
   * соглашения на объявление ссылок:   * соглашения на объявление ссылок:
-    * ссылка должна иметь тип, соответствующий типу **id** таблицы, на которую она ссылается. Таким образом обычно это **bigint**+    * ссылка должна иметь тип, соответствующий типу **id** таблицы, на которую она ссылается. Таким образом обычно это **integer**
     * для наглядности имя ссылки в конце содержит сочетание символов 'id', например: "machineid" - ссылка на таблицу "machine"     * для наглядности имя ссылки в конце содержит сочетание символов 'id', например: "machineid" - ссылка на таблицу "machine"
     * на уровне базы данных ссылки объявляются как **nullable**     * на уровне базы данных ссылки объявляются как **nullable**
-    * срабатывание **constraint** ссылки должно быть отнесено на конец транзакции, соответственно: <code>deferrable initially deferred</code> Это соглашение имеет исторические корни, возможно в будущем от него будем отказываться, но пока для единообразия используем +    * на примере таблицы **machinerepair**, объявление **каскадной** ссылки: <code>"machineid" integer references "machine" on delete cascade</code> Объявление **restrict** ссылки: <code>"repairid" integer references "repair" on delete restrict</code>
-    * на примере таблицы **machinerepair**, объявление **каскадной** ссылки: <code>"machineid" bigint references "machine" on delete cascade deferrable initially deferred</code> Объявление **restrict** ссылки: <code>"repairid" bigint references "repair" deferrable initially deferred</code> у restrict ссылки никаких дополнительных описаний на **on delete** не пишем, это позволяет отнести проверку на конец транзакции+
     * по каждой ссылке делаем индекс, именуем его как **idx_<имя таблицы>_<имя поля>**     * по каждой ссылке делаем индекс, именуем его как **idx_<имя таблицы>_<имя поля>**
   * соглашения на объявление полей **datetime**:   * соглашения на объявление полей **datetime**:
-    * не используем часовые пояса +    * обычно поля для хранения даты и времени nullable, без привязки к часовым поясам
-    * обычно поля для хранения даты и времени nullable+
 <code> <code>
-"datetime1" timestamp+"datetime1" text
-"datetime2" timestamp default now()+"datetime2" text not null default (datetime('now', 'localtime')),
 </code> </code>
   * соглашения на **nullable** полей:   * соглашения на **nullable** полей:
lss-server-php/db-datastructure-sqlite.1781529111.txt.gz · Последнее изменение: 2026/06/15 16:11 — madmin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki