Skip to content

Latest commit

 

History

History
74 lines (54 loc) · 3.33 KB

File metadata and controls

74 lines (54 loc) · 3.33 KB

Структура данных

Идентификаторы сущностей

Все сущности в системе должны иметь суррогатный, то есть, искусственный идентификатор. Например, автоинкрементный целочисленный. Такой идентификатор должен быть даже в том случае, если сущность имеет естественный идентификатор.

Например, сущность "Категория товара" может иметь естественный идентификатор, созданный на основе названия категории. Для неё всё равно заводится суррогатный идентификатор.

Пример таблицы:

CREATE TABLE categories
(
  id bigserial PRIMARY KEY, -- Суррогатный идентификатор
  code character varying, -- Системное уникальное название категории
  name character varying -- Название категории, отображаемое на клиенте
);

CREATE UNIQUE INDEX index_categories_on_code
  ON categories
  (code);

Индексы базы данных

Любые поля в таблицах, которые являются ссылками на строки в другой таблице, должны быть проиндексированы. В случае составных индексов это поле должно находиться на первом месте. Например, если в таблице вариантов товара хранится идентификатор товара, то это поле должно быть проиндексировано:

CREATE TABLE products
(
  id bigserial PRIMARY KEY,
  name character varying
);

CREATE TABLE variants
(
  id bigserial PRIMARY KEY,
  product_id bigint
);

CREATE INDEX index_variants_on_product_id
  ON variants
  (product_id);

Именование таблиц

Любая таблица - это хранилище множества строк. Логичным решением будет называть таблицы во множественном числе. Например, таблицу пользователей назвать users.

Для промежуточных таблиц название составляется из названий тех сущностей, которые она связывает. Например, для связи пользователей и ролей название таблицы будет user_roles.

Именование полей

При именовании полей не дублируйте название сущности в названии поля, так как эта информация не несет никакого смысла.

Пример плохих именований:

CREATE TABLE cities
(
  city_id bigserial PRIMARY KEY,
  city_name character varying
);

Пример хороших именований:

CREATE TABLE cities
(
  id bigserial PRIMARY KEY,
  name character varying
);