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

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


lss-server-php:database-postgresql

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
lss-server-php:database-postgresql [2025/12/14 17:21] – [важные замечания] 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>
Строка 340: Строка 340:
   * соглашения на объявление ссылок:   * соглашения на объявление ссылок:
     * ссылка должна иметь тип, соответствующий типу **id** таблицы, на которую она ссылается. Таким образом обычно это **bigint**     * ссылка должна иметь тип, соответствующий типу **id** таблицы, на которую она ссылается. Таким образом обычно это **bigint**
-    * на уровне базы данных ссылки объявляются как nullable+    * на уровне базы данных ссылки объявляются как **nullable**
     * срабатывание **constraint** ссылки должно быть отнесено на конец транзакции, соответственно: <code>deferrable initially deferred</code> Это соглашение имеет исторические корни, возможно в будущем от него будем отказываться, но пока для единообразия используем     * срабатывание **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 не пишем, это позволяет отнести проверку на конец транзакции+    * на примере таблицы **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.1765722061.txt.gz · Последнее изменение: 2025/12/14 17:21 — madmin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki