/p>
Рис. 3. Стадия 2 - горизонтальная декомпозиция отношения DOES_JOB.
EARNS
SAL_UNK
UNSALARIED
ID
SAL
ID
ID
1234
100000
1235
1237
1236
70000
Рис. 4. Стадия 2 - горизонтальная декомпозиция отношения EARNS.
В окончательном варианте нами получены отношения DOES_JOB, JOB_UNK, UNEMPLOYED, EARNS, SAL_UNK, UNSALARIED, удовлетворяющие реляционной модели Третьего Манифеста . Им соответствуют предикаты: “человек, идентифицируемый как ID, занимает конкретную должность JOB”, “ человек, идентифицируемый как ID, занимает некоторую должность, но мы не знаем, какую”, “ человек, идентифицируемый как ID, является безработным”, “ человек, идентифицируемый как ID, имеет определенное жалование SAL”, “ человек, идентифицируемый как ID, имеет некоторое жалование, но неизвестно, какое”, “ человек, идентифицируемый как ID, не получает жалования”.
Сделаем ряд комментариев к проделанному:
В приведенном примере нами рассматривались только два вида отсутствующей информации, но метод допускает обобщение на большее их число.
Проведенная декомпозиция сохраняет первичные и внешние ключи и ограничения целостности.
Возможен и другой вариант горизонтальная декомпозиция отношений, в некоторых практических случаях более удобный, так как позволяет сократить количество результирующих отношений. Он изображен на рис. 5, 6.
DOES_JOB
JOB_UNK
ID
JOB
ID
REASON
1234
Юрист
1236
UNKNOWN
1235
Почетный президент
1237
UNEMPLOYED
Рис. 5. Другой вариант горизонтальной декомпозиции отношения DOES_JOB.
EARNS
SAL_UNK
ID
SAL
ID
REASON
1234
100000
1235
UNKNOWN
1236
70000
1237
UNSALARIED
Рис. 6. Другой вариант горизонтальной декомпозиции отношения EARNS.
Определение традиционно выглядящего представления на основе полученных таблиц представлена на рис. 7, его внешний вид – на рис. 8.
CREATE VIEW r1 AS SELECT tmp.* FROM ( (SELECT earns.id, CAST(earns.sal AS varchar(40)) AS SAL FROM earns) UNION (SELECT sal_unk.id, CAST(sal_unk.reason AS varchar(40)) FROM sal_unk) ) AS tmp GO