Вопрос

Я много слышу о подтипах таблиц при проектировании базы данных и полностью осведомлен о лежащей в их основе теории.Однако я никогда не видел подтипирования таблиц в действии.Как можно создавать подтипы таблиц?Я использую MS Access и ищу способ сделать это как с помощью SQL, так и через графический интерфейс (Access 2003).

Ваше здоровье!

Это было полезно?

Решение

Простым примером может быть таблица Person с первичным ключом и несколькими столбцами в этой таблице.Теперь вы можете создать еще одну таблицу под названием Student, у которой есть внешний ключ к таблице person (ее супертип).Теперь в таблице студентов есть несколько столбцов, которых нет у супертипа, например средний балл, специальность и т. д.Но имя, фамилия и тому подобное будут в родительской таблице.Вы всегда можете получить доступ к имени студента в таблице Person через внешний ключ в таблице Student.

В любом случае, просто помните следующее:

  • Иерархия отображает отношения между супертипами и подтипами.
  • Супертипы имеют общие признаки
  • Подтипы имеют уникальные атрибуты

Другие советы

Подтипы таблиц — это концептуальная вещь в диаграммах EER.Я не видел СУРБД (за исключением объектно-реляционных СУБД), которая поддерживала бы ее напрямую.Обычно они реализуются либо в

  1. Набор столбцов, допускающих значение NULL, для каждого свойства подтипа в одной таблице.
  2. С таблицей свойств базового типа и некоторыми другими таблицами, содержащими не более одной строки в каждой базовой таблице, которая будет содержать свойства подтипа.

Понятие подтипов таблиц полезно при использовании преобразователя ORM для создания иерархии подтипов классов, которая точно моделирует предметную область.

Таблица подтипов будет иметь внешний ключ обратно к своему родительскому элементу, который также является первичным ключом таблицы подтипов.

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

Например, если у вас есть таблица супертипов с тремя таблицами подтипов, и вам нужно отобразить все три в одной форме одновременно (и вам нужно показать не только дату супертипа), вы в конечном итоге можете использовать три внешних соединения. и Nz(), или вам понадобится UNION ALL из трех взаимоисключающих операторов SELECT (по одному для каждого подтипа).Ни один из них не будет доступен для редактирования.

Я собирался вставить немного SQL из первого крупного приложения, в котором я работал с таблицами супер/подтипов, но, глядя на него, SQL настолько сложен, что просто запутал бы людей.Это не столько потому, что мое приложение было сложным, сколько потому, что природа проблемы сложна — представление пользователю полного набора данных, как супер-, так и подтипов, сложно по самой своей природе.В результате работы с ней я пришел к выводу, что мне было бы лучше использовать только одну таблицу подтипов.

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

У меня похожая проблема, над которой я работаю.

В поисках повторяющегося шаблона я хотел убедиться, что не отказываюсь от ссылочной целостности, а это означало, что я не буду использовать решение (TABLE_NAME, PK_ID).

В конце концов я остановился на:

Таблица базового типа:КЛИЕНТ

Таблицы подтипов:ЧЕЛОВЕК, БИЗНЕС, ГОСУДАРСТВЕННОЕ ЛИЦО

Я поместил поля PRERSON_ID, BUSINESS_ID и GOVT_ENTITY_ID, допускающие значение NULL, в CUSTOMER с внешними ключами для каждого и проверочным ограничением, что только одно из них не имеет значения NULL.Добавлять новые подтипы легко, просто нужно добавить внешний ключ, допускающий значение NULL, и изменить проверочное ограничение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top