×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

1.3.6. Наследование

Наследование представляет собой концепцию, заимствованную из объектно-ориентированных баз данных. Данный механизм открывает новые возможности для проектирования баз данных.

Создадим две таблицы: таблицу cities и таблицу capitals. Поскольку столицы также являются городами, требуется способ неявного включения данных о столицах при обращении к списку всех городов. Для решения этой задачи можно использовать следующую схему:

CREATE TABLE capitals (
  name       text,
  population real,
  elevation  int,    -- (in ft)
  state      char(2)
);

CREATE TABLE non_capitals (
  name       text,
  population real,
  elevation  int     -- (in ft)
);

CREATE VIEW cities AS
  SELECT name, population, elevation FROM capitals
    UNION
  SELECT name, population, elevation FROM non_capitals;

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

Более эффективным решением является следующий механизм:

CREATE TABLE cities (
  name       text,
  population real,
  elevation  int     -- (in ft)
);

CREATE TABLE capitals (
  state      char(2) UNIQUE NOT NULL
) INHERITS (cities);

В данном случае строка таблицы capitals наследует все столбцы (name, populationи elevation) от своего родительского элемента, cities. Тип данного столбца — nametext, встроенный Digital Q.DataBase тип для символьных строк переменной длины. В capitals таблице имеется дополнительный столбец state, в котором указывается аббревиатура штата. В Digital Q.DataBase, таблица может наследоваться от нуля или более других таблиц.

Например, следующий запрос позволяет получить названия всех городов, включая столицы штатов, которые расположены на высоте более 500 футов:

SELECT name, elevation
  FROM cities
  WHERE elevation > 500;

который возвращает:

   name    | elevation
-----------+-----------
 Лас-Вегас |      2174
 Mariposa  |      1953
 Madison   |       845
(3 rows)

С другой стороны, следующий запрос находит все города, не являющиеся столицами штатов, которые расположены на высоте более 500 футов:

SELECT name, elevation
    FROM ONLY cities
    WHERE elevation > 500;

   name    | elevation
-----------+-----------
 Лас-Вегас |      2174
 Mariposa  |      1953
(2 rows)

В данном случае ключевое слово ONLY перед именем таблицы cities указывает на то, что запрос должен быть выполнен только в отношении указанной cities таблицы, исключая таблицы, находящиеся ниже cities в иерархии наследования. Многие из ранее рассмотренных команд — SELECT, UPDATEи DELETE — поддерживают использование данного ONLY синтаксиса.

Примечание

Несмотря на то, что механизм наследования часто оказывается полезным, он не интегрирован с ограничениями уникальности и внешними ключами, что ограничивает его функциональность. Подробную информацию см. в разделе Раздел 2.2.11 for more detail.

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

*поля обязательные к заполнению