В окончательном варианте нами получены
/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
Содержание Назад Вперед