Нужно ли включать в ПК атрибуты ФК

From
Alexey Palienko (2:5061/34)
To
All (2:5054/37.63)
Date
2005-05-24T15:15:06Z
Area
SU.DBMS
Здравствуй, All!


Возник следующий вопрос: нужно ли включать в первичный ключ таблицы атрибуты ее
внешнего ключа?

Пример:
Есть классы, операции классов, объекты этих классов и результаты выполнения
операций классов над объектами.

create table classes (
   id_classes integer not null primary key,
   name varchar2(20) not null
)

create table objects (
    id_objects integer not null primary key,
    id_classes integer not null references classes(id_classes),
    name varchar2(20) not null
)

create table operations (
    id_operations integer not null primary key,
    id_classes integer not null references classes(id_classes),
    name varchar2(20) not null
)

create table results (
    id_results     integer not null primary key,
    id_objects integer not null references objects(id_objects),
    id_operationss integer not null references operations(id_operations),
    status integer
)

Как запретить вставку в results записей, связывающих операции и объекты
_разных_ классов ?

ИМХО, возможны два варианта:
1. Включить id_classes в состав первичных ключей objects и operations, тогда в
results появится одно поле id_classes и проблема решится сама.
2. Написать триггер.

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

Что думает Алл по этому поводу? Может кто-нибудь знает статьи, где этот вопрос
обсуждается?

ЗЫ: Если вопрос уже обсуждался, то прошу сильно не пинать, а указать ссылки.


WBR Alexey

---
 * Origin: -= Mercury Station =- (2:5061/34)
SEEN-BY: 50/203 520 450/159 186 451/30 452/25 100 454/9 455/15 461/33 43 74
SEEN-BY: 461/106 132 640 463/92 464/34 465/213 469/125 200 999 478/44 550/5068
SEEN-BY: 4614/20 4616/3 4625/8 9 4627/10 4635/4 1024 4653/10 4657/50 5000/76
SEEN-BY: 5001/50 5001 5002/76 5002 5003/34 5006/1 5007/1 5009/14 5010/53 70
SEEN-BY: 5010/146 5011/13 5012/23 5015/4 28 5020/52 104 115 118 128 133 150
SEEN-BY: 5020/175 201 371 400 545 639 642 715 755 758 794 892 894 902 921 968
SEEN-BY: 5020/982 1057 1100 1169 1200 1212 1234 1523 1604 1626 1642 1826 1835
SEEN-BY: 5020/1873 1922 1930 1992 2020 2140 2200 2238 4400 4441 8383 5022/5
SEEN-BY: 5022/128 5023/11 5025/750 5026/14 45 5029/32 5030/69 195 217 382 436
SEEN-BY: 5030/473 556 611 920 966 1016 1212 1900 5031/47 5033/5 21 35 5034/8
SEEN-BY: 5035/10 5036/1 13 5037/21 31 36 5041/4 5042/13 21 5045/7 5049/157
SEEN-BY: 5050/9 41 5051/15 35 5053/16 5054/1 8 9 28 35 37 45 50 63 5055/95
SEEN-BY: 5056/16 5057/1 5058/77 5059/20 5060/88 5061/6 15 33 34 55 5062/10
SEEN-BY: 5063/51 5064/7 35 5066/18 5070/26 66 1222 5071/22 5079/49 5080/1003
SEEN-BY: 5081/2 5082/6 5083/13 21 5084/32 5093/4 27 5100/113 6001/3 6009/1
SEEN-BY: 6023/1 6033/2727 6045/7
PATH: 5061/34 33 15 5020/400 4441 52 5054/1 37