Программирование >>  Построение запросов sql 

1 [ 2 ] 3 4 5 ... 101


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

- Boolean (Логический): SMALLINT. Поля, определяемые на этом домене, могут принимать только целочисленные значения, равные 0 или 1. Это достигается наложением в домене условия проверки (CHECK) на принимаемые этим доменом значения.

- Money (Деньги): NUMERIC(15,2). Этот домен предназначен для определения в таблицах полей, хранящих денежные суммы.

- PKField (Поле ПК): INTEGER. Этот домен предназначен для определения первичных ключей таблиц. Ограничение обязательности данных (NOT NULL) на этот домен не наложено. Оно накладывается при объявлении первичного ключа таблицы. Это сделано для того, чтобы можно было определить внешний ключ на этом домене без условия NOT NULL.

- TMonth (Месяц): SMALLINT. Этот домен предназначен для определения в таблицах полей, содержащих номера месяцев. Целочисленные значения в таком поле могут находиться в диапазоне 1...12.

- TYear (Год): SMALLINT. Этот домен предназначен для определения полей, содержащих номер года. Целочисленные значения могут принимать значения в диапазоне 1990...2100.

1.3. Первичные ключи

Поскольку строки в реляционной таблице не упорядочены, нельзя выбрать строку по ее номеру в таблице. В таблице нет первой , последней или тринадцатой строки. Тогда каким же образом можно указать в таблице конкретную строку, например строку для абонента с именем Аксенов С.А.?

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

В реляционной базе данных в каждой таблице есть один или несколько столбцов, значения в которых во всех строках разные. Этот столбец (столбцы) называется первичным ключом таблицы.

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

Вернемся к рассмотрению таблицы Abonent учебной базы данных (рис. 1.1). На первый взгляд, первичным ключом таблицы Abonent могут служить и столбец AccountCD, и столбец Fio. Однако в случае если будут зарегистрированы два абонента с одинаковыми ФИО, то столбец Fio больше не сможет исполнять роль первичного ключа. На практике в качестве первичных ключей таблиц обычно следует выбирать идентификаторы, такие как уникальный номер лицевого счета абонента (AccountCD в таблице Abonent), идентификатор улицы (StreetCD в таблице Street) и т.д.

Если в таблице нет полей, значения в которых уникальны, для создания первичного ключа в нее обычно вводят дополнительное поле, значениями которого СУБД может распоряжаться по своему усмотрению.



Если первичный ключ представляет собой комбинацию столбцов, то такой первичный ключ называется составным.

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

1.4. Внешние ключи

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

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

Если таблица связана с несколькими другими таблицами, она может иметь несколько внешних ключей. На рис. 1.2 показана таблица Request с тремя внешними ключами, ссылающимися на таблицы Abonent, Executor и Disrepair.


Рис. 1.2. Множественные отношения родитель-потомок в реляционной базе

данных



Столбец AccountCD является внешним ключом для таблицы Request, ссылающимся на первичный ключ таблицы Abonent, и связывает каждую ремонтную заявку с абонентом, подавшим ее. Столбец ExecutorCD является внешним ключом для таблицы Request, ссылающимся на первичный ключ таблицы Executor, и связывает каждую заявку с назначенным на ее выполнение исполнителем. Столбец FailureCD является внешним ключом для таблицы Request, ссылающимся на первичный ключ таблицы Disrepair, и связывает каждую заявку с типом неисправности газового оборудования.

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

1.5. Связи между таблицами

В реляционных базах данных между таблицами, как уже было отмечено, существуют связи (отношения). Если между некоторыми сущностями существует связь, то факты из одной сущности ссылаются или некоторым образом связаны с фактами из другой сущности. Связь работает путем сопоставления первичного ключа одной таблицы (родительской сущности) с элементом внешнего ключа другой таблицы (дочерней сущности) [5]. Первичный и соответствующий ему внешний ключ помогают реализовать отношение родитель-потомок между таблицами. В базе данных нужно хранить только актуальные, значимые связи.

Связи могут различаться по типу связи (идентифицирующая, не идентифицирующая, полная и неполная категория, неспецифическая связь), по мощности связи, допустимости пустых (NULL) значений.

Связь называется идентифицирующей, если экземпляр дочерней сущности идентифицируется (однозначно определяется) через ее связь с родительской сущностью. Атрибуты, составляющие первичный ключ родительской сущности, при этом входят в первичный ключ дочерней сущности. Дочерняя сущность при идентифицирующей связи всегда является зависимой.

Связь называется не идентифицирующей, если экземпляр дочерней сущности идентифицируется иначе, чем через связь с родительской сущностью. Атрибуты, составляющие первичный ключ родительской сущности, при этом входят в состав не ключевых атрибутов дочерней сущности.

Мощность связи представляет собой отношение количества экземпляров родительской сущности к соответствующему количеству дочерней сущности. По мощности связи выделяют отношения один к одному , один ко многим , многие ко многим .

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



1 [ 2 ] 3 4 5 ... 101

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика