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

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


lss-server-php:database-postgresql

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
lss-server-php:database-postgresql [2025/12/14 16:54] – [Создание структуры БД для пользовательских таблиц] madminlss-server-php:database-postgresql [2025/12/14 17:34] (текущий) – [Описание структуры базы данных] madmin
Строка 1: Строка 1:
-====== Создание структуры базы данных ======+====== Требования к структуре базы данных ======
 В настоящий момент серверная платформа LSS лучше всего адаптирована для совместной работы с SQL сервером Postgresql. На его примере и рассмотрим создание структуры БД. В настоящий момент серверная платформа LSS лучше всего адаптирована для совместной работы с SQL сервером Postgresql. На его примере и рассмотрим создание структуры БД.
-===== Создание и заполнение содержимым системных таблиц =====+===== Создание и инициализация системных таблиц =====
 Для корректной работы LSS сервера в базе данных должны присутствовать системные таблицы: Для корректной работы LSS сервера в базе данных должны присутствовать системные таблицы:
   * **systablecategory**, **systable**, **sysfield**, **sysfieldparams**, **sysconstraint** - таблицы для хранения и правки LSS описания БД.   * **systablecategory**, **systable**, **sysfield**, **sysfieldparams**, **sysconstraint** - таблицы для хранения и правки LSS описания БД.
Строка 231: Строка 231:
 </code> </code>
 ===== Создание структуры БД для пользовательских таблиц ===== ===== Создание структуры БД для пользовательских таблиц =====
-Вот пример скрипта создания пользовательских таблиц для тестового примера:+Вот пример скрипта создания пользовательских таблиц из тестового примера:
 ==== содержимое скрипта ==== ==== содержимое скрипта ====
 <code> <code>
Строка 332: Строка 332:
 create unique index "uidx_repairnorm_unique" on "repairnorm" ("machinetypeid","repairid") where "id">0;</code> create unique index "uidx_repairnorm_unique" on "repairnorm" ("machinetypeid","repairid") where "id">0;</code>
 ==== важные замечания ==== ==== важные замечания ====
 +  * все таблицы размещаются в схеме **public**
 +  * имена таблиц и полей - маленькие буквы английского алфавита или цифры
 +    * единственное исключение, отсутствующее в этом примере - поля начинающиеся с символа '~'. Есть соглашение, что такие поля содержат служебную информацию, рассчитываемую алгоритмами и используются для оптимизации частых SQL запросов.
 +  * соглашения на уникальный идентификатор таблицы:
 +    * у каждой таблицы должен быть уникальный идентификатор, с именем **id**, по нему первичный ключ
 +    * обычно он автоинкрементный, тип **bigint**, значения строго положительные. Такие ключи объявляются как: <code>"id" bigserial primary key</code>
 +  * соглашения на объявление ссылок:
 +    * ссылка должна иметь тип, соответствующий типу **id** таблицы, на которую она ссылается. Таким образом обычно это **bigint**
 +    * на уровне базы данных ссылки объявляются как **nullable**
 +    * срабатывание **constraint** ссылки должно быть отнесено на конец транзакции, соответственно: <code>deferrable initially deferred</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_<имя таблицы>_<имя поля>**
 +  * соглашения на **nullable** полей:
 +    * если у поля признак **not null**, то должно быть объявление **default**
 +    * для типов: число, строка, boolean - поля объявляем как **not null**, **default**
 +    * для типов: ссылка, дата - поля объявляем как **nullable**, в случае необходимости проверку на заполнение реализуем на слое бизнес логики
 +  * проверка уникальности реализуется уникальным индексом, с условием **id>0** и именем **uidx_<имя таблицы>_<имя>**
 +
  
lss-server-php/database-postgresql.1765720496.txt.gz · Последнее изменение: 2025/12/14 16:54 — madmin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki