Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сущности, атрибуты, типы данных... / 17 сообщений из 17, страница 1 из 1
24.07.2002, 16:45:51
    #32038552
ТиБиБи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
Посоветуйте, пожалуйста, "стандартную" структуру для создания базы "ОБО ВСЕМ". Здесь где-то были упоминания про (реализованные таблицами) понятия Сущность , ее Атрибут , его Тип данных , т.е. речь шла о создании структуры, которую не надо изменять при добавлении нового Атрибута или новой Сущности... Поиск по форуму мне не помог.
Хоть какие-то советы, если полная структура слишком сложна окажется. Например, обязательно ли создавать отдельную таблицу для Атрибута или можно успешно хранить Атрибуты и Сущности в одной таблице? Как лучше поступить с типами данных (для SQL2000 подойдет sql_variant, а для других, видимо, понадобятся "избыточные" колонки)?
Извините, если я спрашиваю чего-то слишком сложного. Просто не хочется "изобретать велосипед", предполагаю, что многие уже реализовывали нечто подобное.
...
Рейтинг: 0 / 0
24.07.2002, 18:25:44
    #32038585
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
Ето по сути енцеклопедический вопрос - совет поройся в форуме и всех исходящих доках,скорее всего найдеш то-что исчеш.
...
Рейтинг: 0 / 0
25.07.2002, 10:57:01
    #32038686
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
"Рыыыбка, сделай так чтоб всем хорошо было" :-)))))
...
Рейтинг: 0 / 0
25.07.2002, 11:54:19
    #32038710
Hibernate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
...
Рейтинг: 0 / 0
25.07.2002, 12:38:30
    #32038721
ТиБиБи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
2 Maxx:
Согласен, мне тоже кажется, что подобный велосипед уже должен был быть изобретен, но я сам пока не нашел описаний подобных изобретений... :(

2 Genady:
Слов нет, в его адрес одни эмоции... :P :)

2 Hibernate:
Спасибо за ссылки. Сижу, читаю. Начало вполне соответствует моим представлениям базы "ОБО ВСЕМ"... ;)

Классической методикой проектирования баз данных (БД) является создание отдельной таблицы для каждой описываемой моделью данных сущности, затем — в процессе нормализации — выделение отдельных таблиц для хранения атрибутов сущности (таблицы-справочники). Такой подход хорошо работает для БД с относительно небольшим количеством описываемых объектов (десятки) и при несложных и статичных связях между ними. Однако любое изменение структуры хранимых данных приводит к внесению изменений в структуру таблиц, эти данные отображающих. Несложная на этапе разработки, эта операция становится крайне проблематичной при больших объемах данных и при отсутствии у разработчика непосредственного доступа к БД (например, если она находится у заказчика). Многим, наверное, знакомы громоздкие, медленные и требующие огромного дискового пространства операции по конвертированию БД при переходе на новую версию продукта. Не менее неприятна работа с БД, исторически разросшейся до сотен таблиц, структуру которой сложно даже изобразить в читабельном виде. В связи с этим встает вопрос: а нельзя ли создать структуру данных, не требующую переделок при появлении новых сущностей и позволяющую хранить произвольную и при этом достаточно простую и эффективную информацию? Чудес, увы, не бывает. Любая универсальная система менее эффективна, чем специализированная. Однако возможно создание решения, в котором бы приемлемая производительность и простота сочетались с достаточной степенью универсальности.
...
Рейтинг: 0 / 0
25.07.2002, 12:55:43
    #32038732
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
Слов нет, в его адрес одни эмоции...
В чей адрес? В мой? Ну дык, сорри :D
Я уже здесь обсуждал статью, которую привел Hibernate, и народ сошелся на том, что Чудес, увы, не бывает.
Если я ничего не путаю, то Dankov говорил, что автор статьи не одну собаку съел по оптимизации запросов в его продуктах, что бы системы построенные таким образом, хотя бы не слишком сильно тормозили по сравнению с системами, построенными классическим методом.
Посему возникает вопрос - а оно нам надо?
...
Рейтинг: 0 / 0
25.07.2002, 13:23:54
    #32038750
ТиБиБи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
> Я уже здесь обсуждал статью, которую привел Hibernate, и народ сошелся на том, что Чудес, увы, не бывает.

Очередь за Чудом - в соседнем Форуме. :) В самом деле, разве я спрашивал о чуде? Нет. Hibernate дал очень хорошую ссылку, спасибо ему огромное. Сижу, вникаю. Пока вполне соответствует моим представлениям... Кстати, я вполне себе представляю, что работать это будет намного медленнее, чем классическим способом (одна таблица соответствует одной сущности), но зато времени на сопровождение займет на порядки меньше (нам надо описывать даже то, что почти неизвестно на этапе разработки).

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

До оптимизации мне пока далеко, но если уже имеются какие-либо рекомендации - буду рад выслушать.

> Посему возникает вопрос - а оно нам надо?

Нам - очень. Кстати, несколько лет назад пришлось отказаться от задачи, поскольку не решились идти подобным "неклассическим" методом... Зря отказались. Ну да не важно. Считаю, что всем полезно хотя бы иметь представление о методе БД как хранилище объектов , а потом они сами решат для каждой конкретной задачи "надо" или "не надо"... ;)
...
Рейтинг: 0 / 0
25.07.2002, 13:32:11
    #32038754
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
Нам - очень

Ну что ж, как говорится, удачи! :-)
Только если так уж надо, я бы в начале присмотрелся к объектно ориентированным СУБД.
Использование реляционной СУБД для хранения объектов на мой взгляд как раз и есть изобретение велосипеда, впрочем буду рад почитат об опыте в подобных проектах, неважно отрицательном или положительном.
...
Рейтинг: 0 / 0
25.07.2002, 13:38:20
    #32038755
ТиБиБи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
Народ, у меня в руках сейчас распечатки трех статей:

1. База данных — хранилище объектов (Часть 1) (после нее дописано " Продолжение статьи будет опубликовано в течение недели ")

2. Представления идентифицируемых сложных объектов
в реляционной базе данных (Часть 1)


3. Представления идентифицируемых сложных объектов
в реляционной базе данных (Часть 2)



Вопрос:

Я не умею видеть очевидное или обещанного продолжения там все же нет? Прошло ведь гораздо больше недели после даты опубликования статьи (26.04.02)...
...
Рейтинг: 0 / 0
25.07.2002, 13:41:14
    #32038758
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
http://www.interface.ru/fset.asp?Url=/misc/hran_02.htm
...
Рейтинг: 0 / 0
25.07.2002, 13:45:43
    #32038761
ТиБиБи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
2 Genady:
Спасибо.
...
Рейтинг: 0 / 0
25.07.2002, 14:05:41
    #32038775
ТиБиБи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
Кстати, насчет объектно-ориентированных СУБД...

Реально, кого можно было бы добавить в список используемых нами СУБД, это Sybase, у него AFAIR появлялась ориентированная на объекты версия, но отзывы были весьма отрицательные, слышал что глюков при использовании объектов ну очень много . Не знаю, может уже и появилось что-либо по настоящему приличное...

Ну а поскольку реально в нашем распоряжении (нашем предприятии) сегодня лишь реляционные базы, то радуемся даже наличию sql_variant, хоть как-то облегчающего нашу жизнь...
...
Рейтинг: 0 / 0
26.07.2002, 12:54:35
    #32039063
ТиБиБи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
Вот он, набросочек...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
571.
572.
573.
574.
575.
576.
577.
578.
579.
580.
581.
582.
583.
584.
585.
586.
587.
588.
589.
590.
591.
592.
593.
594.
595.
596.
597.
598.
599.
600.
601.
602.
603.
604.
605.
606.
607.
608.
609.
610.
611.
612.
613.
614.
615.
616.
617.
618.
619.
620.
621.
622.
623.
624.
625.
626.
627.
628.
629.
630.
631.
632.
633.
634.
635.
636.
637.
638.
639.
640.
641.
642.
643.
644.
645.
646.
647.
648.
649.
650.
651.
652.
653.
654.
655.
656.
657.
658.
659.
660.
661.
662.
663.
664.
665.
666.
667.
668.
669.
670.
671.
672.
673.
674.
675.
676.
677.
678.
679.
680.
681.
682.
683.
684.
685.
686.
687.
688.
689.
690.
691.
692.
693.
694.
695.
696.
697.
698.
699.
700.
701.
702.
703.
704.
705.
706.
707.
708.
709.
710.
711.
712.
713.
714.
715.
716.
717.
718.
719.
720.
721.
722.
723.
724.
725.
726.
727.
728.
729.
730.
731.
732.
733.
734.
735.
736.
737.
738.
739.
740.
741.
742.
743.
744.
745.
746.
747.
748.
749.
750.
751.
752.
753.
754.
755.
756.
757.
758.
759.
760.
761.
762.
763.
764.
765.
766.
767.
768.
769.
770.
771.
772.
773.
774.
775.
776.
777.
778.
779.
780.
781.
782.
783.
784.
785.
786.
787.
788.
789.
790.
791.
792.
793.
794.
795.
796.
797.
798.
799.
800.
801.
802.
803.
804.
805.
806.
807.
808.
809.
810.
811.
812.
813.
814.
815.
816.
817.
818.
819.
820.
821.
822.
823.
824.
825.
826.
827.
828.
829.
830.
831.
832.
833.
834.
835.
836.
837.
838.
839.
840.
841.
842.
843.
844.
845.
846.
847.
848.
849.
850.
851.
852.
853.
854.
855.
856.
857.
858.
859.
860.
861.
862.
863.
864.
865.
866.
867.
868.
869.
870.
871.
872.
873.
874.
875.
876.
877.
878.
879.
880.
881.
882.
883.
884.
885.
886.
887.
888.
889.
890.
891.
892.
893.
894.
895.
896.
897.
898.
899.
900.
901.
902.
903.
904.
905.
906.
907.
908.
909.
910.
911.
912.
913.
914.
915.
916.
917.
918.
919.
920.
921.
922.
923.
924.
925.
926.
927.
928.
929.
930.
931.
932.
933.
934.
935.
936.
937.
938.
939.
940.
941.
942.
943.
944.
945.
946.
947.
948.
949.
950.
951.
952.
953.
954.
955.
956.
957.
958.
959.
960.
961.
962.
963.
964.
965.
966.
967.
968.
969.
970.
971.
972.
973.
974.
975.
976.
977.
978.
979.
980.
981.
982.
983.
984.
985.
986.
987.
988.
989.
990.
991.
992.
993.
994.
995.
996.
997.
998.
999.
1000.
1001.
1002.
1003.
1004.
1005.
1006.
1007.
1008.
1009.
1010.
1011.
1012.
1013.
1014.
1015.
1016.
1017.
1018.
1019.
1020.
1021.
1022.
1023.
1024.
1025.
1026.
1027.
1028.
1029.
1030.
1031.
1032.
1033.
1034.
1035.
1036.
1037.
1038.
1039.
1040.
1041.
1042.
1043.
1044.
1045.
1046.
1047.
1048.
1049.
1050.
1051.
1052.
1053.
1054.
1055.
1056.
1057.
1058.
1059.
1060.
1061.
1062.
1063.
1064.
1065.
1066.
1067.
1068.
1069.
1070.
1071.
1072.
1073.
1074.
1075.
1076.
1077.
1078.
1079.
1080.
1081.
1082.
1083.
1084.
1085.
1086.
1087.
1088.
1089.
1090.
1091.
1092.
1093.
1094.
1095.
1096.
1097.
1098.
1099.
1100.
1101.
1102.
1103.
1104.
1105.
1106.
1107.
1108.
1109.
1110.
1111.
1112.
1113.
1114.
1115.
1116.
1117.
1118.
1119.
1120.
1121.
1122.
1123.
1124.
1125.
1126.
1127.
1128.
1129.
1130.
1131.
1132.
1133.
1134.
1135.
1136.
1137.
1138.
1139.
1140.
1141.
1142.
1143.
1144.
1145.
1146.
1147.
1148.
1149.
1150.
1151.
1152.
1153.
1154.
1155.
1156.
1157.
1158.
1159.
1160.
1161.
1162.
1163.
1164.
1165.
1166.
1167.
1168.
1169.
1170.
1171.
1172.
1173.
1174.
1175.
1176.
1177.
1178.
1179.
1180.
1181.
1182.
1183.
1184.
1185.
1186.
1187.
1188.
1189.
1190.
1191.
1192.
1193.
1194.
1195.
1196.
1197.
1198.
1199.
1200.
1201.
1202.
1203.
1204.
1205.
1206.
1207.
1208.
1209.
1210.
1211.
1212.
1213.
1214.
1215.
1216.
1217.
1218.
1219.
1220.
1221.
1222.
1223.
1224.
1225.
1226.
1227.
1228.
1229.
1230.
1231.
1232.
1233.
1234.
1235.
1236.
1237.
1238.
1239.
1240.
1241.
1242.
1243.
1244.
1245.
1246.
1247.
1248.
1249.
1250.
1251.
1252.
1253.
1254.
1255.
1256.
1257.
1258.
1259.
1260.
1261.
1262.
1263.
1264.
1265.
1266.
1267.
1268.
1269.
1270.
1271.
1272.
1273.
1274.
1275.
1276.
1277.
1278.
1279.
1280.
1281.
1282.
1283.
1284.
1285.
1286.
1287.
1288.
1289.
1290.
1291.
1292.
1293.
1294.
1295.
1296.
1297.
1298.
1299.
1300.
1301.
1302.
1303.
1304.
1305.
1306.
1307.
1308.
1309.
1310.
1311.
1312.
1313.
1314.
1315.
1316.
1317.
1318.
1319.
1320.
1321.
1322.
1323.
1324.
1325.
1326.
1327.
1328.
1329.
1330.
1331.
1332.
1333.
1334.
1335.
1336.
1337.
1338.
1339.
1340.
1341.
1342.
1343.
1344.
1345.
1346.
1347.
1348.
1349.
1350.
1351.
1352.
1353.
1354.
1355.
1356.
1357.
1358.
1359.
1360.
1361.
1362.
1363.
1364.
1365.
1366.
1367.
1368.
1369.
1370.
1371.
1372.
1373.
1374.
1375.
1376.
1377.
1378.
1379.
1380.
1381.
1382.
1383.
1384.
1385.
1386.
1387.
1388.
1389.
1390.
1391.
1392.
1393.
1394.
1395.
1396.
1397.
1398.
1399.
1400.
1401.
1402.
1403.
1404.
1405.
1406.
1407.
1408.
1409.
1410.
1411.
1412.
1413.
1414.
1415.
1416.
1417.
1418.
1419.
1420.
1421.
1422.
1423.
1424.
1425.
1426.
1427.
1428.
1429.
1430.
1431.
1432.
1433.
1434.
1435.
1436.
1437.
1438.
1439.
1440.
1441.
1442.
1443.
1444.
1445.
1446.
1447.
1448.
1449.
1450.
1451.
1452.
1453.
1454.
1455.
1456.
1457.
1458.
1459.
1460.
1461.
1462.
1463.
1464.
1465.
1466.
1467.
1468.
1469.
1470.
1471.
1472.
1473.
1474.
1475.
1476.
1477.
1478.
1479.
1480.
1481.
1482.
1483.
1484.
1485.
1486.
1487.
1488.
1489.
1490.
1491.
1492.
1493.
1494.
1495.
1496.
1497.
1498.
1499.
1500.
1501.
1502.
1503.
1504.
1505.
1506.
1507.
1508.
1509.
1510.
1511.
1512.
1513.
1514.
1515.
1516.
1517.
1518.
1519.
1520.
1521.
1522.
1523.
1524.
1525.
1526.
1527.
1528.
1529.
1530.
1531.
1532.
1533.
1534.
1535.
1536.
1537.
1538.
1539.
1540.
1541.
1542.
1543.
1544.
1545.
1546.
1547.
1548.
1549.
1550.
1551.
1552.
1553.
1554.
1555.
1556.
1557.
1558.
1559.
1560.
1561.
1562.
1563.
1564.
1565.
1566.
1567.
1568.
1569.
1570.
1571.
1572.
1573.
1574.
1575.
1576.
1577.
1578.
1579.
1580.
1581.
1582.
1583.
1584.
1585.
1586.
1587.
1588.
1589.
1590.
1591.
1592.
1593.
1594.
1595.
1596.
1597.
1598.
1599.
1600.
1601.
1602.
1603.
1604.
1605.
1606.
1607.
1608.
1609.
1610.
1611.
1612.
1613.
1614.
1615.
1616.
1617.
1618.
1619.
1620.
1621.
1622.
1623.
1624.
1625.
1626.
1627.
1628.
1629.
1630.
1631.
1632.
1633.
1634.
1635.
1636.
1637.
1638.
1639.
1640.
1641.
1642.
1643.
1644.
1645.
1646.
1647.
1648.
1649.
1650.
1651.
1652.
1653.
1654.
1655.
1656.
1657.
1658.
1659.
1660.
1661.
1662.
1663.
1664.
1665.
1666.
1667.
1668.
1669.
1670.
1671.
1672.
1673.
1674.
1675.
1676.
1677.
1678.
1679.
1680.
1681.
1682.
1683.
1684.
1685.
1686.
1687.
1688.
1689.
1690.
1691.
1692.
1693.
1694.
1695.
1696.
1697.
1698.
1699.
1700.
1701.
1702.
1703.
1704.
1705.
1706.
1707.
1708.
1709.
1710.
1711.
1712.
1713.
1714.
1715.
1716.
1717.
1718.
1719.
1720.
1721.
1722.
1723.
1724.
1725.
1726.
1727.
1728.
1729.
1730.
1731.
1732.
1733.
1734.
1735.
1736.
1737.
1738.
1739.
1740.
1741.
1742.
1743.
1744.
1745.
1746.
1747.
1748.
1749.
1750.
1751.
1752.
1753.
1754.
1755.
1756.
1757.
1758.
1759.
1760.
1761.
1762.
1763.
1764.
1765.
1766.
1767.
1768.
1769.
1770.
1771.
1772.
1773.
1774.
1775.
1776.
1777.
1778.
1779.
1780.
1781.
1782.
1783.
1784.
1785.
1786.
1787.
1788.
1789.
1790.
1791.
1792.
1793.
1794.
1795.
1796.
1797.
1798.
1799.
1800.
1801.
1802.
1803.
1804.
1805.
1806.
1807.
1808.
1809.
1810.
1811.
1812.
1813.
1814.
1815.
1816.
1817.
1818.
1819.
1820.
1821.
1822.
1823.
1824.
1825.
1826.
1827.
1828.
1829.
1830.
1831.
1832.
1833.
1834.
1835.
1836.
1837.
1838.
1839.
1840.
1841.
1842.
1843.
1844.
1845.
1846.
1847.
1848.
1849.
1850.
1851.
1852.
1853.
1854.
1855.
1856.
1857.
1858.
1859.
1860.
1861.
1862.
1863.
1864.
1865.
1866.
1867.
1868.
1869.
1870.
1871.
1872.
1873.
1874.
1875.
1876.
1877.
1878.
1879.
1880.
1881.
1882.
1883.
1884.
1885.
1886.
1887.
1888.
1889.
1890.
1891.
1892.
1893.
1894.
1895.
1896.
1897.
1898.
1899.
1900.
1901.
1902.
1903.
1904.
1905.
1906.
1907.
1908.
1909.
1910.
1911.
CREATE TABLE ALLOWEDLINK (
       AllowedLinkId        int IDENTITY,
       LinkTypeId           int NULL,
       ObjectTypeId_1       int NULL,
       ObjectTypeId_2       int NULL
)
go


ALTER TABLE ALLOWEDLINK
       ADD PRIMARY KEY NONCLUSTERED (AllowedLinkId)
go


CREATE TABLE ALLOWEDMOVEMENT (
       AllowedMovementId    int IDENTITY,
       ObjectTypeId_Container int NULL,
       ObjectTypeId_Content int NULL
)
go


ALTER TABLE ALLOWEDMOVEMENT
       ADD PRIMARY KEY NONCLUSTERED (AllowedMovementId)
go


CREATE TABLE ATTRIBUTE (
       AttributeId          int IDENTITY,
       AttributeTypeId      int NULL,
       ObjectId             int NULL,
       AttributeValue       sql_variant NULL
)
go


ALTER TABLE ATTRIBUTE
       ADD PRIMARY KEY NONCLUSTERED (AttributeId)
go


CREATE TABLE ATTRIBUTETYPE (
       AttributeTypeId      int IDENTITY,
       ObjectTypeId         int NULL,
       AttributeTypeAbbr    char( 10 ) NULL,
       AttributeTypeName    char( 30 ) NULL,
       DataTypeId           int NULL
)
go


ALTER TABLE ATTRIBUTETYPE
       ADD PRIMARY KEY NONCLUSTERED (AttributeTypeId)
go


CREATE TABLE DATATYPE (
       DataTypeId           int IDENTITY,
       DataTypeAbbr         char( 10 ) NULL,
       DataTypeName         char( 30 ) NULL,
       DataTypeSQL          char( 16 ) NULL
)
go


ALTER TABLE DATATYPE
       ADD PRIMARY KEY NONCLUSTERED (DataTypeId)
go


CREATE TABLE ENUMDATATYPE (
       EnumDataTypeId       int IDENTITY
)
go


ALTER TABLE ENUMDATATYPE
       ADD PRIMARY KEY NONCLUSTERED (EnumDataTypeId)
go


CREATE TABLE LINK (
       LinkId               int IDENTITY,
       LinkTypeId           int NULL,
       ObjectId_1           int NULL,
       ObjectId_2           int NULL
)
go


ALTER TABLE LINK
       ADD PRIMARY KEY NONCLUSTERED (LinkId)
go


CREATE TABLE LINKTYPE (
       LinkTypeId           int IDENTITY,
       LinkTypeAbbr         char( 10 ) NULL,
       LinkTypeName         char( 30 ) NULL
)
go


ALTER TABLE LINKTYPE
       ADD PRIMARY KEY NONCLUSTERED (LinkTypeId)
go


CREATE TABLE MOVEMENT (
       MovementId           int IDENTITY,
       ObjectId_Operation   int NULL,
       ObjectId_Container   int NULL,
       ObjectId_Content     int NULL,
       MovementDate         datetime NULL
)
go


ALTER TABLE MOVEMENT
       ADD PRIMARY KEY NONCLUSTERED (MovementId)
go


CREATE TABLE OBJECT (
       ObjectId             int IDENTITY,
       ObjectTypeId         int NULL,
       ObjectName           char( 50 ) NULL
)
go


ALTER TABLE OBJECT
       ADD PRIMARY KEY NONCLUSTERED (ObjectId)
go


CREATE TABLE OBJECTTYPE (
       ObjectTypeId         int IDENTITY,
       ObjectTypeAbbr       char( 10 ) NOT NULL,
       ObjectTypeName       char( 30 ) NULL,
       ObjectTypeId_Parent  int NULL
)
go

CREATE UNIQUE INDEX XAK1OBJECTTYPE ON OBJECTTYPE
(
       ObjectTypeAbbr
)
go


ALTER TABLE OBJECTTYPE
       ADD PRIMARY KEY NONCLUSTERED (ObjectTypeId)
go


ALTER TABLE ALLOWEDLINK
       ADD FOREIGN KEY (ObjectTypeId_2)
                             REFERENCES OBJECTTYPE
go


ALTER TABLE ALLOWEDLINK
       ADD FOREIGN KEY (ObjectTypeId_1)
                             REFERENCES OBJECTTYPE
go


ALTER TABLE ALLOWEDLINK
       ADD FOREIGN KEY (LinkTypeId)
                             REFERENCES LINKTYPE
go


ALTER TABLE ALLOWEDMOVEMENT
       ADD FOREIGN KEY (ObjectTypeId_Content)
                             REFERENCES OBJECTTYPE
go


ALTER TABLE ALLOWEDMOVEMENT
       ADD FOREIGN KEY (ObjectTypeId_Container)
                             REFERENCES OBJECTTYPE
go


ALTER TABLE ATTRIBUTE
       ADD FOREIGN KEY (ObjectId)
                             REFERENCES OBJECT
go


ALTER TABLE ATTRIBUTE
       ADD FOREIGN KEY (AttributeTypeId)
                             REFERENCES ATTRIBUTETYPE
go


ALTER TABLE ATTRIBUTETYPE
       ADD FOREIGN KEY (DataTypeId)
                             REFERENCES DATATYPE
go


ALTER TABLE ATTRIBUTETYPE
       ADD FOREIGN KEY (ObjectTypeId)
                             REFERENCES OBJECTTYPE
go


ALTER TABLE LINK
       ADD FOREIGN KEY (ObjectId_2)
                             REFERENCES OBJECT
go


ALTER TABLE LINK
       ADD FOREIGN KEY (ObjectId_1)
                             REFERENCES OBJECT
go


ALTER TABLE LINK
       ADD FOREIGN KEY (LinkTypeId)
                             REFERENCES LINKTYPE
go


ALTER TABLE MOVEMENT
       ADD FOREIGN KEY (ObjectId_Content)
                             REFERENCES OBJECT
go


ALTER TABLE MOVEMENT
       ADD FOREIGN KEY (ObjectId_Container)
                             REFERENCES OBJECT
go


ALTER TABLE MOVEMENT
       ADD FOREIGN KEY (ObjectId_Operation)
                             REFERENCES OBJECT
go


ALTER TABLE OBJECT
       ADD FOREIGN KEY (ObjectTypeId)
                             REFERENCES OBJECTTYPE
go


ALTER TABLE OBJECTTYPE
       ADD FOREIGN KEY (ObjectTypeId_Parent)
                             REFERENCES OBJECTTYPE
go




create trigger tI_ALLOWEDLINK on ALLOWEDLINK for INSERT as
 /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
 /* INSERT trigger on ALLOWEDLINK */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* OBJECTTYPE will be the second in ALLOWEDLINK ON CHILD INSERT SET NULL */ 
  if
     /* update(ObjectTypeId_2) */ 
    update(ObjectTypeId_2)
  begin
    update ALLOWEDLINK
      set
         /* ALLOWEDLINK.ObjectTypeId_2 = NULL */ 
        ALLOWEDLINK.ObjectTypeId_2 = NULL
      from ALLOWEDLINK,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECTTYPE
          where
             /* inserted.ObjectTypeId_2 = OBJECTTYPE.ObjectTypeId */ 
            inserted.ObjectTypeId_2 = OBJECTTYPE.ObjectTypeId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* OBJECTTYPE will be the first in ALLOWEDLINK ON CHILD INSERT SET NULL */ 
  if
     /* update(ObjectTypeId_1) */ 
    update(ObjectTypeId_1)
  begin
    update ALLOWEDLINK
      set
         /* ALLOWEDLINK.ObjectTypeId_1 = NULL */ 
        ALLOWEDLINK.ObjectTypeId_1 = NULL
      from ALLOWEDLINK,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECTTYPE
          where
             /* inserted.ObjectTypeId_1 = OBJECTTYPE.ObjectTypeId */ 
            inserted.ObjectTypeId_1 = OBJECTTYPE.ObjectTypeId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* LINKTYPE will give semantic value of ALLOWEDLINK ON CHILD INSERT SET NULL */ 
  if
     /* update(LinkTypeId) */ 
    update(LinkTypeId)
  begin
    update ALLOWEDLINK
      set
         /* ALLOWEDLINK.LinkTypeId = NULL */ 
        ALLOWEDLINK.LinkTypeId = NULL
      from ALLOWEDLINK,inserted
      where
         /*  */ 
		 
        not exists (
          select * from LINKTYPE
          where
             /* inserted.LinkTypeId = LINKTYPE.LinkTypeId */ 
            inserted.LinkTypeId = LINKTYPE.LinkTypeId
        )
  end


   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tU_ALLOWEDLINK on ALLOWEDLINK for UPDATE as
 /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
 /* UPDATE trigger on ALLOWEDLINK */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @insAllowedLinkId int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* OBJECTTYPE will be the second in ALLOWEDLINK ON CHILD UPDATE SET NULL */ 
  if
     /* update(ObjectTypeId_2) */ 
    update(ObjectTypeId_2)
  begin
    update ALLOWEDLINK
      set
         /* ALLOWEDLINK.ObjectTypeId_2 = NULL */ 
        ALLOWEDLINK.ObjectTypeId_2 = NULL
      from ALLOWEDLINK,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECTTYPE
          where
             /* inserted.ObjectTypeId_2 = OBJECTTYPE.ObjectTypeId */ 
            inserted.ObjectTypeId_2 = OBJECTTYPE.ObjectTypeId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* OBJECTTYPE will be the first in ALLOWEDLINK ON CHILD UPDATE SET NULL */ 
  if
     /* update(ObjectTypeId_1) */ 
    update(ObjectTypeId_1)
  begin
    update ALLOWEDLINK
      set
         /* ALLOWEDLINK.ObjectTypeId_1 = NULL */ 
        ALLOWEDLINK.ObjectTypeId_1 = NULL
      from ALLOWEDLINK,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECTTYPE
          where
             /* inserted.ObjectTypeId_1 = OBJECTTYPE.ObjectTypeId */ 
            inserted.ObjectTypeId_1 = OBJECTTYPE.ObjectTypeId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* LINKTYPE will give semantic value of ALLOWEDLINK ON CHILD UPDATE SET NULL */ 
  if
     /* update(LinkTypeId) */ 
    update(LinkTypeId)
  begin
    update ALLOWEDLINK
      set
         /* ALLOWEDLINK.LinkTypeId = NULL */ 
        ALLOWEDLINK.LinkTypeId = NULL
      from ALLOWEDLINK,inserted
      where
         /*  */ 
		 
        not exists (
          select * from LINKTYPE
          where
             /* inserted.LinkTypeId = LINKTYPE.LinkTypeId */ 
            inserted.LinkTypeId = LINKTYPE.LinkTypeId
        )
  end


   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tI_ALLOWEDMOVEMENT on ALLOWEDMOVEMENT for INSERT as
 /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
 /* INSERT trigger on ALLOWEDMOVEMENT */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* OBJECTTYPE will be the content of ALLOWEDMOVEMENT ON CHILD INSERT SET NULL */ 
  if
     /* update(ObjectTypeId_Content) */ 
    update(ObjectTypeId_Content)
  begin
    update ALLOWEDMOVEMENT
      set
         /* ALLOWEDMOVEMENT.ObjectTypeId_Content = NULL */ 
        ALLOWEDMOVEMENT.ObjectTypeId_Content = NULL
      from ALLOWEDMOVEMENT,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECTTYPE
          where
             /* inserted.ObjectTypeId_Content = OBJECTTYPE.ObjectTypeId */ 
            inserted.ObjectTypeId_Content = OBJECTTYPE.ObjectTypeId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* OBJECTTYPE will be the container ALLOWEDMOVEMENT ON CHILD INSERT SET NULL */ 
  if
     /* update(ObjectTypeId_Container) */ 
    update(ObjectTypeId_Container)
  begin
    update ALLOWEDMOVEMENT
      set
         /* ALLOWEDMOVEMENT.ObjectTypeId_Container = NULL */ 
        ALLOWEDMOVEMENT.ObjectTypeId_Container = NULL
      from ALLOWEDMOVEMENT,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECTTYPE
          where
             /* inserted.ObjectTypeId_Container = OBJECTTYPE.ObjectTypeId */ 
            inserted.ObjectTypeId_Container = OBJECTTYPE.ObjectTypeId
        )
  end


   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tU_ALLOWEDMOVEMENT on ALLOWEDMOVEMENT for UPDATE as
 /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
 /* UPDATE trigger on ALLOWEDMOVEMENT */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @insAllowedMovementId int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* OBJECTTYPE will be the content of ALLOWEDMOVEMENT ON CHILD UPDATE SET NULL */ 
  if
     /* update(ObjectTypeId_Content) */ 
    update(ObjectTypeId_Content)
  begin
    update ALLOWEDMOVEMENT
      set
         /* ALLOWEDMOVEMENT.ObjectTypeId_Content = NULL */ 
        ALLOWEDMOVEMENT.ObjectTypeId_Content = NULL
      from ALLOWEDMOVEMENT,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECTTYPE
          where
             /* inserted.ObjectTypeId_Content = OBJECTTYPE.ObjectTypeId */ 
            inserted.ObjectTypeId_Content = OBJECTTYPE.ObjectTypeId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* OBJECTTYPE will be the container ALLOWEDMOVEMENT ON CHILD UPDATE SET NULL */ 
  if
     /* update(ObjectTypeId_Container) */ 
    update(ObjectTypeId_Container)
  begin
    update ALLOWEDMOVEMENT
      set
         /* ALLOWEDMOVEMENT.ObjectTypeId_Container = NULL */ 
        ALLOWEDMOVEMENT.ObjectTypeId_Container = NULL
      from ALLOWEDMOVEMENT,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECTTYPE
          where
             /* inserted.ObjectTypeId_Container = OBJECTTYPE.ObjectTypeId */ 
            inserted.ObjectTypeId_Container = OBJECTTYPE.ObjectTypeId
        )
  end


   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tI_ATTRIBUTE on ATTRIBUTE for INSERT as
 /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
 /* INSERT trigger on ATTRIBUTE */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* OBJECT has ATTRIBUTE ON CHILD INSERT SET NULL */ 
  if
     /* update(ObjectId) */ 
    update(ObjectId)
  begin
    update ATTRIBUTE
      set
         /* ATTRIBUTE.ObjectId = NULL */ 
        ATTRIBUTE.ObjectId = NULL
      from ATTRIBUTE,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECT
          where
             /* inserted.ObjectId = OBJECT.ObjectId */ 
            inserted.ObjectId = OBJECT.ObjectId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* ATTRIBUTETYPE is filled with the data in ATTRIBUTE ON CHILD INSERT SET NULL */ 
  if
     /* update(AttributeTypeId) */ 
    update(AttributeTypeId)
  begin
    update ATTRIBUTE
      set
         /* ATTRIBUTE.AttributeTypeId = NULL */ 
        ATTRIBUTE.AttributeTypeId = NULL
      from ATTRIBUTE,inserted
      where
         /*  */ 
		 
        not exists (
          select * from ATTRIBUTETYPE
          where
             /* inserted.AttributeTypeId = ATTRIBUTETYPE.AttributeTypeId */ 
            inserted.AttributeTypeId = ATTRIBUTETYPE.AttributeTypeId
        )
  end


   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tU_ATTRIBUTE on ATTRIBUTE for UPDATE as
 /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
 /* UPDATE trigger on ATTRIBUTE */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @insAttributeId int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* OBJECT has ATTRIBUTE ON CHILD UPDATE SET NULL */ 
  if
     /* update(ObjectId) */ 
    update(ObjectId)
  begin
    update ATTRIBUTE
      set
         /* ATTRIBUTE.ObjectId = NULL */ 
        ATTRIBUTE.ObjectId = NULL
      from ATTRIBUTE,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECT
          where
             /* inserted.ObjectId = OBJECT.ObjectId */ 
            inserted.ObjectId = OBJECT.ObjectId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* ATTRIBUTETYPE is filled with the data in ATTRIBUTE ON CHILD UPDATE SET NULL */ 
  if
     /* update(AttributeTypeId) */ 
    update(AttributeTypeId)
  begin
    update ATTRIBUTE
      set
         /* ATTRIBUTE.AttributeTypeId = NULL */ 
        ATTRIBUTE.AttributeTypeId = NULL
      from ATTRIBUTE,inserted
      where
         /*  */ 
		 
        not exists (
          select * from ATTRIBUTETYPE
          where
             /* inserted.AttributeTypeId = ATTRIBUTETYPE.AttributeTypeId */ 
            inserted.AttributeTypeId = ATTRIBUTETYPE.AttributeTypeId
        )
  end


   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tD_ATTRIBUTETYPE on ATTRIBUTETYPE for DELETE as
 /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
 /* DELETE trigger on ATTRIBUTETYPE */ 
begin
  declare  @errno   int,
           @errmsg  varchar( 255 )
     /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
     /* ATTRIBUTETYPE is filled with the data in ATTRIBUTE ON PARENT DELETE SET NULL */ 
    update ATTRIBUTE
      set
         /* ATTRIBUTE.AttributeTypeId = NULL */ 
        ATTRIBUTE.AttributeTypeId = NULL
      from ATTRIBUTE,deleted
      where
         /* ATTRIBUTE.AttributeTypeId = deleted.AttributeTypeId */ 
        ATTRIBUTE.AttributeTypeId = deleted.AttributeTypeId


     /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
    return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tI_ATTRIBUTETYPE on ATTRIBUTETYPE for INSERT as
 /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
 /* INSERT trigger on ATTRIBUTETYPE */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* DATATYPE is used at creation of ATTRIBUTETYPE ON CHILD INSERT SET NULL */ 
  if
     /* update(DataTypeId) */ 
    update(DataTypeId)
  begin
    update ATTRIBUTETYPE
      set
         /* ATTRIBUTETYPE.DataTypeId = NULL */ 
        ATTRIBUTETYPE.DataTypeId = NULL
      from ATTRIBUTETYPE,inserted
      where
         /*  */ 
		 
        not exists (
          select * from DATATYPE
          where
             /* inserted.DataTypeId = DATATYPE.DataTypeId */ 
            inserted.DataTypeId = DATATYPE.DataTypeId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* OBJECTTYPE allows to keep ATTRIBUTETYPE ON CHILD INSERT SET NULL */ 
  if
     /* update(ObjectTypeId) */ 
    update(ObjectTypeId)
  begin
    update ATTRIBUTETYPE
      set
         /* ATTRIBUTETYPE.ObjectTypeId = NULL */ 
        ATTRIBUTETYPE.ObjectTypeId = NULL
      from ATTRIBUTETYPE,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECTTYPE
          where
             /* inserted.ObjectTypeId = OBJECTTYPE.ObjectTypeId */ 
            inserted.ObjectTypeId = OBJECTTYPE.ObjectTypeId
        )
  end


   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tU_ATTRIBUTETYPE on ATTRIBUTETYPE for UPDATE as
 /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
 /* UPDATE trigger on ATTRIBUTETYPE */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @insAttributeTypeId int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* ATTRIBUTETYPE is filled with the data in ATTRIBUTE ON PARENT UPDATE SET NULL */ 
  if
     /* update(AttributeTypeId) */ 
    update(AttributeTypeId)
  begin
    update ATTRIBUTE
      set
         /* ATTRIBUTE.AttributeTypeId = NULL */ 
        ATTRIBUTE.AttributeTypeId = NULL
      from ATTRIBUTE,deleted
      where
         /* ATTRIBUTE.AttributeTypeId = deleted.AttributeTypeId */ 
        ATTRIBUTE.AttributeTypeId = deleted.AttributeTypeId
  end

   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* DATATYPE is used at creation of ATTRIBUTETYPE ON CHILD UPDATE SET NULL */ 
  if
     /* update(DataTypeId) */ 
    update(DataTypeId)
  begin
    update ATTRIBUTETYPE
      set
         /* ATTRIBUTETYPE.DataTypeId = NULL */ 
        ATTRIBUTETYPE.DataTypeId = NULL
      from ATTRIBUTETYPE,inserted
      where
         /*  */ 
		 
        not exists (
          select * from DATATYPE
          where
             /* inserted.DataTypeId = DATATYPE.DataTypeId */ 
            inserted.DataTypeId = DATATYPE.DataTypeId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* OBJECTTYPE allows to keep ATTRIBUTETYPE ON CHILD UPDATE SET NULL */ 
  if
     /* update(ObjectTypeId) */ 
    update(ObjectTypeId)
  begin
    update ATTRIBUTETYPE
      set
         /* ATTRIBUTETYPE.ObjectTypeId = NULL */ 
        ATTRIBUTETYPE.ObjectTypeId = NULL
      from ATTRIBUTETYPE,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECTTYPE
          where
             /* inserted.ObjectTypeId = OBJECTTYPE.ObjectTypeId */ 
            inserted.ObjectTypeId = OBJECTTYPE.ObjectTypeId
        )
  end


   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tD_DATATYPE on DATATYPE for DELETE as
 /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
 /* DELETE trigger on DATATYPE */ 
begin
  declare  @errno   int,
           @errmsg  varchar( 255 )
     /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
     /* DATATYPE is used at creation of ATTRIBUTETYPE ON PARENT DELETE SET NULL */ 
    update ATTRIBUTETYPE
      set
         /* ATTRIBUTETYPE.DataTypeId = NULL */ 
        ATTRIBUTETYPE.DataTypeId = NULL
      from ATTRIBUTETYPE,deleted
      where
         /* ATTRIBUTETYPE.DataTypeId = deleted.DataTypeId */ 
        ATTRIBUTETYPE.DataTypeId = deleted.DataTypeId


     /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
    return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tU_DATATYPE on DATATYPE for UPDATE as
 /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
 /* UPDATE trigger on DATATYPE */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @insDataTypeId int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
   /* DATATYPE is used at creation of ATTRIBUTETYPE ON PARENT UPDATE SET NULL */ 
  if
     /* update(DataTypeId) */ 
    update(DataTypeId)
  begin
    update ATTRIBUTETYPE
      set
         /* ATTRIBUTETYPE.DataTypeId = NULL */ 
        ATTRIBUTETYPE.DataTypeId = NULL
      from ATTRIBUTETYPE,deleted
      where
         /* ATTRIBUTETYPE.DataTypeId = deleted.DataTypeId */ 
        ATTRIBUTETYPE.DataTypeId = deleted.DataTypeId
  end


   /* ERwin Builtin Fri Jul 26 12:38:23 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tI_LINK on LINK for INSERT as
 /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
 /* INSERT trigger on LINK */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT is the second in LINK ON CHILD INSERT SET NULL */ 
  if
     /* update(ObjectId_2) */ 
    update(ObjectId_2)
  begin
    update LINK
      set
         /* LINK.ObjectId_2 = NULL */ 
        LINK.ObjectId_2 = NULL
      from LINK,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECT
          where
             /* inserted.ObjectId_2 = OBJECT.ObjectId */ 
            inserted.ObjectId_2 = OBJECT.ObjectId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT is the first in LINK ON CHILD INSERT SET NULL */ 
  if
     /* update(ObjectId_1) */ 
    update(ObjectId_1)
  begin
    update LINK
      set
         /* LINK.ObjectId_1 = NULL */ 
        LINK.ObjectId_1 = NULL
      from LINK,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECT
          where
             /* inserted.ObjectId_1 = OBJECT.ObjectId */ 
            inserted.ObjectId_1 = OBJECT.ObjectId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* LINKTYPE gives semantic value of LINK ON CHILD INSERT SET NULL */ 
  if
     /* update(LinkTypeId) */ 
    update(LinkTypeId)
  begin
    update LINK
      set
         /* LINK.LinkTypeId = NULL */ 
        LINK.LinkTypeId = NULL
      from LINK,inserted
      where
         /*  */ 
		 
        not exists (
          select * from LINKTYPE
          where
             /* inserted.LinkTypeId = LINKTYPE.LinkTypeId */ 
            inserted.LinkTypeId = LINKTYPE.LinkTypeId
        )
  end


   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tU_LINK on LINK for UPDATE as
 /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
 /* UPDATE trigger on LINK */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @insLinkId int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT is the second in LINK ON CHILD UPDATE SET NULL */ 
  if
     /* update(ObjectId_2) */ 
    update(ObjectId_2)
  begin
    update LINK
      set
         /* LINK.ObjectId_2 = NULL */ 
        LINK.ObjectId_2 = NULL
      from LINK,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECT
          where
             /* inserted.ObjectId_2 = OBJECT.ObjectId */ 
            inserted.ObjectId_2 = OBJECT.ObjectId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT is the first in LINK ON CHILD UPDATE SET NULL */ 
  if
     /* update(ObjectId_1) */ 
    update(ObjectId_1)
  begin
    update LINK
      set
         /* LINK.ObjectId_1 = NULL */ 
        LINK.ObjectId_1 = NULL
      from LINK,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECT
          where
             /* inserted.ObjectId_1 = OBJECT.ObjectId */ 
            inserted.ObjectId_1 = OBJECT.ObjectId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* LINKTYPE gives semantic value of LINK ON CHILD UPDATE SET NULL */ 
  if
     /* update(LinkTypeId) */ 
    update(LinkTypeId)
  begin
    update LINK
      set
         /* LINK.LinkTypeId = NULL */ 
        LINK.LinkTypeId = NULL
      from LINK,inserted
      where
         /*  */ 
		 
        not exists (
          select * from LINKTYPE
          where
             /* inserted.LinkTypeId = LINKTYPE.LinkTypeId */ 
            inserted.LinkTypeId = LINKTYPE.LinkTypeId
        )
  end


   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tD_LINKTYPE on LINKTYPE for DELETE as
 /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
 /* DELETE trigger on LINKTYPE */ 
begin
  declare  @errno   int,
           @errmsg  varchar( 255 )
     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
     /* LINKTYPE will give semantic value of ALLOWEDLINK ON PARENT DELETE SET NULL */ 
    update ALLOWEDLINK
      set
         /* ALLOWEDLINK.LinkTypeId = NULL */ 
        ALLOWEDLINK.LinkTypeId = NULL
      from ALLOWEDLINK,deleted
      where
         /* ALLOWEDLINK.LinkTypeId = deleted.LinkTypeId */ 
        ALLOWEDLINK.LinkTypeId = deleted.LinkTypeId

     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
     /* LINKTYPE gives semantic value of LINK ON PARENT DELETE SET NULL */ 
    update LINK
      set
         /* LINK.LinkTypeId = NULL */ 
        LINK.LinkTypeId = NULL
      from LINK,deleted
      where
         /* LINK.LinkTypeId = deleted.LinkTypeId */ 
        LINK.LinkTypeId = deleted.LinkTypeId


     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
    return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tU_LINKTYPE on LINKTYPE for UPDATE as
 /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
 /* UPDATE trigger on LINKTYPE */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @insLinkTypeId int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* LINKTYPE will give semantic value of ALLOWEDLINK ON PARENT UPDATE SET NULL */ 
  if
     /* update(LinkTypeId) */ 
    update(LinkTypeId)
  begin
    update ALLOWEDLINK
      set
         /* ALLOWEDLINK.LinkTypeId = NULL */ 
        ALLOWEDLINK.LinkTypeId = NULL
      from ALLOWEDLINK,deleted
      where
         /* ALLOWEDLINK.LinkTypeId = deleted.LinkTypeId */ 
        ALLOWEDLINK.LinkTypeId = deleted.LinkTypeId
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* LINKTYPE gives semantic value of LINK ON PARENT UPDATE SET NULL */ 
  if
     /* update(LinkTypeId) */ 
    update(LinkTypeId)
  begin
    update LINK
      set
         /* LINK.LinkTypeId = NULL */ 
        LINK.LinkTypeId = NULL
      from LINK,deleted
      where
         /* LINK.LinkTypeId = deleted.LinkTypeId */ 
        LINK.LinkTypeId = deleted.LinkTypeId
  end


   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tI_MOVEMENT on MOVEMENT for INSERT as
 /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
 /* INSERT trigger on MOVEMENT */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT is the content of MOVEMENT ON CHILD INSERT SET NULL */ 
  if
     /* update(ObjectId_Content) */ 
    update(ObjectId_Content)
  begin
    update MOVEMENT
      set
         /* MOVEMENT.ObjectId_Content = NULL */ 
        MOVEMENT.ObjectId_Content = NULL
      from MOVEMENT,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECT
          where
             /* inserted.ObjectId_Content = OBJECT.ObjectId */ 
            inserted.ObjectId_Content = OBJECT.ObjectId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT is the container MOVEMENT ON CHILD INSERT SET NULL */ 
  if
     /* update(ObjectId_Container) */ 
    update(ObjectId_Container)
  begin
    update MOVEMENT
      set
         /* MOVEMENT.ObjectId_Container = NULL */ 
        MOVEMENT.ObjectId_Container = NULL
      from MOVEMENT,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECT
          where
             /* inserted.ObjectId_Container = OBJECT.ObjectId */ 
            inserted.ObjectId_Container = OBJECT.ObjectId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT is the operation MOVEMENT ON CHILD INSERT SET NULL */ 
  if
     /* update(ObjectId_Operation) */ 
    update(ObjectId_Operation)
  begin
    update MOVEMENT
      set
         /* MOVEMENT.ObjectId_Operation = NULL */ 
        MOVEMENT.ObjectId_Operation = NULL
      from MOVEMENT,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECT
          where
             /* inserted.ObjectId_Operation = OBJECT.ObjectId */ 
            inserted.ObjectId_Operation = OBJECT.ObjectId
        )
  end


   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tU_MOVEMENT on MOVEMENT for UPDATE as
 /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
 /* UPDATE trigger on MOVEMENT */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @insMovementId int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT is the content of MOVEMENT ON CHILD UPDATE SET NULL */ 
  if
     /* update(ObjectId_Content) */ 
    update(ObjectId_Content)
  begin
    update MOVEMENT
      set
         /* MOVEMENT.ObjectId_Content = NULL */ 
        MOVEMENT.ObjectId_Content = NULL
      from MOVEMENT,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECT
          where
             /* inserted.ObjectId_Content = OBJECT.ObjectId */ 
            inserted.ObjectId_Content = OBJECT.ObjectId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT is the container MOVEMENT ON CHILD UPDATE SET NULL */ 
  if
     /* update(ObjectId_Container) */ 
    update(ObjectId_Container)
  begin
    update MOVEMENT
      set
         /* MOVEMENT.ObjectId_Container = NULL */ 
        MOVEMENT.ObjectId_Container = NULL
      from MOVEMENT,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECT
          where
             /* inserted.ObjectId_Container = OBJECT.ObjectId */ 
            inserted.ObjectId_Container = OBJECT.ObjectId
        )
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT is the operation MOVEMENT ON CHILD UPDATE SET NULL */ 
  if
     /* update(ObjectId_Operation) */ 
    update(ObjectId_Operation)
  begin
    update MOVEMENT
      set
         /* MOVEMENT.ObjectId_Operation = NULL */ 
        MOVEMENT.ObjectId_Operation = NULL
      from MOVEMENT,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECT
          where
             /* inserted.ObjectId_Operation = OBJECT.ObjectId */ 
            inserted.ObjectId_Operation = OBJECT.ObjectId
        )
  end


   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tD_OBJECT on OBJECT for DELETE as
 /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
 /* DELETE trigger on OBJECT */ 
begin
  declare  @errno   int,
           @errmsg  varchar( 255 )
     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
     /* OBJECT is the content of MOVEMENT ON PARENT DELETE SET NULL */ 
    update MOVEMENT
      set
         /* MOVEMENT.ObjectId_Content = NULL */ 
        MOVEMENT.ObjectId_Content = NULL
      from MOVEMENT,deleted
      where
         /* MOVEMENT.ObjectId_Content = deleted.ObjectId */ 
        MOVEMENT.ObjectId_Content = deleted.ObjectId

     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
     /* OBJECT is the container MOVEMENT ON PARENT DELETE SET NULL */ 
    update MOVEMENT
      set
         /* MOVEMENT.ObjectId_Container = NULL */ 
        MOVEMENT.ObjectId_Container = NULL
      from MOVEMENT,deleted
      where
         /* MOVEMENT.ObjectId_Container = deleted.ObjectId */ 
        MOVEMENT.ObjectId_Container = deleted.ObjectId

     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
     /* OBJECT is the operation MOVEMENT ON PARENT DELETE SET NULL */ 
    update MOVEMENT
      set
         /* MOVEMENT.ObjectId_Operation = NULL */ 
        MOVEMENT.ObjectId_Operation = NULL
      from MOVEMENT,deleted
      where
         /* MOVEMENT.ObjectId_Operation = deleted.ObjectId */ 
        MOVEMENT.ObjectId_Operation = deleted.ObjectId

     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
     /* OBJECT is the second in LINK ON PARENT DELETE SET NULL */ 
    update LINK
      set
         /* LINK.ObjectId_2 = NULL */ 
        LINK.ObjectId_2 = NULL
      from LINK,deleted
      where
         /* LINK.ObjectId_2 = deleted.ObjectId */ 
        LINK.ObjectId_2 = deleted.ObjectId

     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
     /* OBJECT is the first in LINK ON PARENT DELETE SET NULL */ 
    update LINK
      set
         /* LINK.ObjectId_1 = NULL */ 
        LINK.ObjectId_1 = NULL
      from LINK,deleted
      where
         /* LINK.ObjectId_1 = deleted.ObjectId */ 
        LINK.ObjectId_1 = deleted.ObjectId

     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
     /* OBJECT has ATTRIBUTE ON PARENT DELETE SET NULL */ 
    update ATTRIBUTE
      set
         /* ATTRIBUTE.ObjectId = NULL */ 
        ATTRIBUTE.ObjectId = NULL
      from ATTRIBUTE,deleted
      where
         /* ATTRIBUTE.ObjectId = deleted.ObjectId */ 
        ATTRIBUTE.ObjectId = deleted.ObjectId


     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
    return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tI_OBJECT on OBJECT for INSERT as
 /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
 /* INSERT trigger on OBJECT */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECTTYPE is realized by OBJECT ON CHILD INSERT SET NULL */ 
  if
     /* update(ObjectTypeId) */ 
    update(ObjectTypeId)
  begin
    update OBJECT
      set
         /* OBJECT.ObjectTypeId = NULL */ 
        OBJECT.ObjectTypeId = NULL
      from OBJECT,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECTTYPE
          where
             /* inserted.ObjectTypeId = OBJECTTYPE.ObjectTypeId */ 
            inserted.ObjectTypeId = OBJECTTYPE.ObjectTypeId
        )
  end


   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tU_OBJECT on OBJECT for UPDATE as
 /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
 /* UPDATE trigger on OBJECT */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @insObjectId int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT is the content of MOVEMENT ON PARENT UPDATE SET NULL */ 
  if
     /* update(ObjectId) */ 
    update(ObjectId)
  begin
    update MOVEMENT
      set
         /* MOVEMENT.ObjectId_Content = NULL */ 
        MOVEMENT.ObjectId_Content = NULL
      from MOVEMENT,deleted
      where
         /* MOVEMENT.ObjectId_Content = deleted.ObjectId */ 
        MOVEMENT.ObjectId_Content = deleted.ObjectId
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT is the container MOVEMENT ON PARENT UPDATE SET NULL */ 
  if
     /* update(ObjectId) */ 
    update(ObjectId)
  begin
    update MOVEMENT
      set
         /* MOVEMENT.ObjectId_Container = NULL */ 
        MOVEMENT.ObjectId_Container = NULL
      from MOVEMENT,deleted
      where
         /* MOVEMENT.ObjectId_Container = deleted.ObjectId */ 
        MOVEMENT.ObjectId_Container = deleted.ObjectId
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT is the operation MOVEMENT ON PARENT UPDATE SET NULL */ 
  if
     /* update(ObjectId) */ 
    update(ObjectId)
  begin
    update MOVEMENT
      set
         /* MOVEMENT.ObjectId_Operation = NULL */ 
        MOVEMENT.ObjectId_Operation = NULL
      from MOVEMENT,deleted
      where
         /* MOVEMENT.ObjectId_Operation = deleted.ObjectId */ 
        MOVEMENT.ObjectId_Operation = deleted.ObjectId
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT is the second in LINK ON PARENT UPDATE SET NULL */ 
  if
     /* update(ObjectId) */ 
    update(ObjectId)
  begin
    update LINK
      set
         /* LINK.ObjectId_2 = NULL */ 
        LINK.ObjectId_2 = NULL
      from LINK,deleted
      where
         /* LINK.ObjectId_2 = deleted.ObjectId */ 
        LINK.ObjectId_2 = deleted.ObjectId
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT is the first in LINK ON PARENT UPDATE SET NULL */ 
  if
     /* update(ObjectId) */ 
    update(ObjectId)
  begin
    update LINK
      set
         /* LINK.ObjectId_1 = NULL */ 
        LINK.ObjectId_1 = NULL
      from LINK,deleted
      where
         /* LINK.ObjectId_1 = deleted.ObjectId */ 
        LINK.ObjectId_1 = deleted.ObjectId
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECT has ATTRIBUTE ON PARENT UPDATE SET NULL */ 
  if
     /* update(ObjectId) */ 
    update(ObjectId)
  begin
    update ATTRIBUTE
      set
         /* ATTRIBUTE.ObjectId = NULL */ 
        ATTRIBUTE.ObjectId = NULL
      from ATTRIBUTE,deleted
      where
         /* ATTRIBUTE.ObjectId = deleted.ObjectId */ 
        ATTRIBUTE.ObjectId = deleted.ObjectId
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECTTYPE is realized by OBJECT ON CHILD UPDATE SET NULL */ 
  if
     /* update(ObjectTypeId) */ 
    update(ObjectTypeId)
  begin
    update OBJECT
      set
         /* OBJECT.ObjectTypeId = NULL */ 
        OBJECT.ObjectTypeId = NULL
      from OBJECT,inserted
      where
         /*  */ 
		 
        not exists (
          select * from OBJECTTYPE
          where
             /* inserted.ObjectTypeId = OBJECTTYPE.ObjectTypeId */ 
            inserted.ObjectTypeId = OBJECTTYPE.ObjectTypeId
        )
  end


   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tD_OBJECTTYPE on OBJECTTYPE for DELETE as
 /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
 /* DELETE trigger on OBJECTTYPE */ 
begin
  declare  @errno   int,
           @errmsg  varchar( 255 )
     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
     /* OBJECTTYPE will be the content of ALLOWEDMOVEMENT ON PARENT DELETE SET NULL */ 
    update ALLOWEDMOVEMENT
      set
         /* ALLOWEDMOVEMENT.ObjectTypeId_Content = NULL */ 
        ALLOWEDMOVEMENT.ObjectTypeId_Content = NULL
      from ALLOWEDMOVEMENT,deleted
      where
         /* ALLOWEDMOVEMENT.ObjectTypeId_Content = deleted.ObjectTypeId */ 
        ALLOWEDMOVEMENT.ObjectTypeId_Content = deleted.ObjectTypeId

     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
     /* OBJECTTYPE will be the container ALLOWEDMOVEMENT ON PARENT DELETE SET NULL */ 
    update ALLOWEDMOVEMENT
      set
         /* ALLOWEDMOVEMENT.ObjectTypeId_Container = NULL */ 
        ALLOWEDMOVEMENT.ObjectTypeId_Container = NULL
      from ALLOWEDMOVEMENT,deleted
      where
         /* ALLOWEDMOVEMENT.ObjectTypeId_Container = deleted.ObjectTypeId */ 
        ALLOWEDMOVEMENT.ObjectTypeId_Container = deleted.ObjectTypeId

     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
     /* OBJECTTYPE will be the second in ALLOWEDLINK ON PARENT DELETE SET NULL */ 
    update ALLOWEDLINK
      set
         /* ALLOWEDLINK.ObjectTypeId_2 = NULL */ 
        ALLOWEDLINK.ObjectTypeId_2 = NULL
      from ALLOWEDLINK,deleted
      where
         /* ALLOWEDLINK.ObjectTypeId_2 = deleted.ObjectTypeId */ 
        ALLOWEDLINK.ObjectTypeId_2 = deleted.ObjectTypeId

     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
     /* OBJECTTYPE will be the first in ALLOWEDLINK ON PARENT DELETE SET NULL */ 
    update ALLOWEDLINK
      set
         /* ALLOWEDLINK.ObjectTypeId_1 = NULL */ 
        ALLOWEDLINK.ObjectTypeId_1 = NULL
      from ALLOWEDLINK,deleted
      where
         /* ALLOWEDLINK.ObjectTypeId_1 = deleted.ObjectTypeId */ 
        ALLOWEDLINK.ObjectTypeId_1 = deleted.ObjectTypeId

     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
     /* OBJECTTYPE allows to keep ATTRIBUTETYPE ON PARENT DELETE SET NULL */ 
    update ATTRIBUTETYPE
      set
         /* ATTRIBUTETYPE.ObjectTypeId = NULL */ 
        ATTRIBUTETYPE.ObjectTypeId = NULL
      from ATTRIBUTETYPE,deleted
      where
         /* ATTRIBUTETYPE.ObjectTypeId = deleted.ObjectTypeId */ 
        ATTRIBUTETYPE.ObjectTypeId = deleted.ObjectTypeId

     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
     /* OBJECTTYPE is realized by OBJECT ON PARENT DELETE SET NULL */ 
    update OBJECT
      set
         /* OBJECT.ObjectTypeId = NULL */ 
        OBJECT.ObjectTypeId = NULL
      from OBJECT,deleted
      where
         /* OBJECT.ObjectTypeId = deleted.ObjectTypeId */ 
        OBJECT.ObjectTypeId = deleted.ObjectTypeId

     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
     /* OBJECTTYPE is inherited by OBJECTTYPE ON PARENT DELETE SET NULL */ 
    update OBJECTTYPE
      set
         /* OBJECTTYPE.ObjectTypeId_Parent = NULL */ 
        OBJECTTYPE.ObjectTypeId_Parent = NULL
      from OBJECTTYPE,deleted
      where
         /* OBJECTTYPE.ObjectTypeId_Parent = deleted.ObjectTypeId */ 
        OBJECTTYPE.ObjectTypeId_Parent = deleted.ObjectTypeId


     /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
    return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tI_OBJECTTYPE on OBJECTTYPE for INSERT as
 /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
 /* INSERT trigger on OBJECTTYPE */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECTTYPE is inherited by OBJECTTYPE ON CHILD INSERT SET NULL */ 
  if
     /* update(ObjectTypeId_Parent) */ 
    update(ObjectTypeId_Parent)
  begin
    update OBJECTTYPE
      set
         /* OBJECTTYPE.ObjectTypeId_Parent = NULL */ 
        OBJECTTYPE.ObjectTypeId_Parent = NULL
      from OBJECTTYPE,inserted
      where
         /* OBJECTTYPE.ObjectTypeId = inserted.ObjectTypeId */ 
		OBJECTTYPE.ObjectTypeId = inserted.ObjectTypeId and
		 
        not exists (
          select * from OBJECTTYPE
          where
             /* inserted.ObjectTypeId_Parent = OBJECTTYPE.ObjectTypeId */ 
            inserted.ObjectTypeId_Parent = OBJECTTYPE.ObjectTypeId
        )
  end


   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go

create trigger tU_OBJECTTYPE on OBJECTTYPE for UPDATE as
 /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
 /* UPDATE trigger on OBJECTTYPE */ 
begin
  declare  @numrows int,
           @nullcnt int,
           @validcnt int,
           @insObjectTypeId int,
           @errno   int,
           @errmsg  varchar( 255 )

  select @numrows = @@rowcount
   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECTTYPE will be the content of ALLOWEDMOVEMENT ON PARENT UPDATE SET NULL */ 
  if
     /* update(ObjectTypeId) */ 
    update(ObjectTypeId)
  begin
    update ALLOWEDMOVEMENT
      set
         /* ALLOWEDMOVEMENT.ObjectTypeId_Content = NULL */ 
        ALLOWEDMOVEMENT.ObjectTypeId_Content = NULL
      from ALLOWEDMOVEMENT,deleted
      where
         /* ALLOWEDMOVEMENT.ObjectTypeId_Content = deleted.ObjectTypeId */ 
        ALLOWEDMOVEMENT.ObjectTypeId_Content = deleted.ObjectTypeId
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECTTYPE will be the container ALLOWEDMOVEMENT ON PARENT UPDATE SET NULL */ 
  if
     /* update(ObjectTypeId) */ 
    update(ObjectTypeId)
  begin
    update ALLOWEDMOVEMENT
      set
         /* ALLOWEDMOVEMENT.ObjectTypeId_Container = NULL */ 
        ALLOWEDMOVEMENT.ObjectTypeId_Container = NULL
      from ALLOWEDMOVEMENT,deleted
      where
         /* ALLOWEDMOVEMENT.ObjectTypeId_Container = deleted.ObjectTypeId */ 
        ALLOWEDMOVEMENT.ObjectTypeId_Container = deleted.ObjectTypeId
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECTTYPE will be the second in ALLOWEDLINK ON PARENT UPDATE SET NULL */ 
  if
     /* update(ObjectTypeId) */ 
    update(ObjectTypeId)
  begin
    update ALLOWEDLINK
      set
         /* ALLOWEDLINK.ObjectTypeId_2 = NULL */ 
        ALLOWEDLINK.ObjectTypeId_2 = NULL
      from ALLOWEDLINK,deleted
      where
         /* ALLOWEDLINK.ObjectTypeId_2 = deleted.ObjectTypeId */ 
        ALLOWEDLINK.ObjectTypeId_2 = deleted.ObjectTypeId
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECTTYPE will be the first in ALLOWEDLINK ON PARENT UPDATE SET NULL */ 
  if
     /* update(ObjectTypeId) */ 
    update(ObjectTypeId)
  begin
    update ALLOWEDLINK
      set
         /* ALLOWEDLINK.ObjectTypeId_1 = NULL */ 
        ALLOWEDLINK.ObjectTypeId_1 = NULL
      from ALLOWEDLINK,deleted
      where
         /* ALLOWEDLINK.ObjectTypeId_1 = deleted.ObjectTypeId */ 
        ALLOWEDLINK.ObjectTypeId_1 = deleted.ObjectTypeId
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECTTYPE allows to keep ATTRIBUTETYPE ON PARENT UPDATE SET NULL */ 
  if
     /* update(ObjectTypeId) */ 
    update(ObjectTypeId)
  begin
    update ATTRIBUTETYPE
      set
         /* ATTRIBUTETYPE.ObjectTypeId = NULL */ 
        ATTRIBUTETYPE.ObjectTypeId = NULL
      from ATTRIBUTETYPE,deleted
      where
         /* ATTRIBUTETYPE.ObjectTypeId = deleted.ObjectTypeId */ 
        ATTRIBUTETYPE.ObjectTypeId = deleted.ObjectTypeId
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECTTYPE is realized by OBJECT ON PARENT UPDATE SET NULL */ 
  if
     /* update(ObjectTypeId) */ 
    update(ObjectTypeId)
  begin
    update OBJECT
      set
         /* OBJECT.ObjectTypeId = NULL */ 
        OBJECT.ObjectTypeId = NULL
      from OBJECT,deleted
      where
         /* OBJECT.ObjectTypeId = deleted.ObjectTypeId */ 
        OBJECT.ObjectTypeId = deleted.ObjectTypeId
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECTTYPE is inherited by OBJECTTYPE ON PARENT UPDATE SET NULL */ 
  if
     /* update(ObjectTypeId) */ 
    update(ObjectTypeId)
  begin
    update OBJECTTYPE
      set
         /* OBJECTTYPE.ObjectTypeId_Parent = NULL */ 
        OBJECTTYPE.ObjectTypeId_Parent = NULL
      from OBJECTTYPE,deleted
      where
         /* OBJECTTYPE.ObjectTypeId_Parent = deleted.ObjectTypeId */ 
        OBJECTTYPE.ObjectTypeId_Parent = deleted.ObjectTypeId
  end

   /* ERwin Builtin Fri Jul 26 12:38:24 2002 */ 
   /* OBJECTTYPE is inherited by OBJECTTYPE ON CHILD UPDATE SET NULL */ 
  if
     /* update(ObjectTypeId_Parent) */ 
    update(ObjectTypeId_Parent)
  begin
    update OBJECTTYPE
      set
         /* OBJECTTYPE.ObjectTypeId_Parent = NULL */ 
        OBJECTTYPE.ObjectTypeId_Parent = NULL
      from OBJECTTYPE,inserted
      where
         /* OBJECTTYPE.ObjectTypeId = inserted.ObjectTypeId */ 
		OBJECTTYPE.ObjectTypeId = inserted.ObjectTypeId and
		 
        not exists (
          select * from OBJECTTYPE
          where
             /* inserted.ObjectTypeId_Parent = OBJECTTYPE.ObjectTypeId */ 
            inserted.ObjectTypeId_Parent = OBJECTTYPE.ObjectTypeId
        )
  end


  return
error:
    raiserror @errno @errmsg
    rollback transaction
end
go


Обращаю внимание, что структура еще сырая, NOT NULL практически нигде еще не проставлен, RI Actions не прописаны... Ну т.е. набросок это, сделанный за пару часов.

Так что просьба не ругаться, а дополнить, поправить... т.е. весьма интересует конструктивное общение на эту тему.
...
Рейтинг: 0 / 0
26.07.2002, 14:03:10
    #32039087
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
Вопрос ? Почему ObjectId у Вас int?По моему мнению я бы хранил guid обьекта ,для етого и спец тип данных uniqueindefier, да ф-ция генерации нового значения New_Giud.
...
Рейтинг: 0 / 0
26.07.2002, 14:13:09
    #32039092
Белов Владимир
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
А может быть проще использовать т.н. объектно-ориентированную БД. например, Cache
...
Рейтинг: 0 / 0
26.07.2002, 14:19:15
    #32039096
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
абсолютно согласен с Беловым Владимиром....
Cache ... она для этого и предназначина в принципе...
...
Рейтинг: 0 / 0
26.07.2002, 16:50:21
    #32039173
ТиБиБи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности, атрибуты, типы данных...
Почему Id у меня Int? Потому что мы привыкли использовать обычный IDENTITY (централизованный ввод данных), но Вы правы, эта конкретная БД может быть предназначена для удаленного оффлайнового ввода, поэтому надо будет использовать механизм объединения таких данных...

Почему мы не используем Cache? Потому что нет опыта работы с ней не только у нас, но и у наших знакомых, зато есть сертификаты по MS SQL и есть соответствующий опыт. Здесь есть у кого-нибудь реальный опыт использования Cache? В каких условиях эксплуатировали? Блин, я о Cache ничего не знаю, потому изначально больше нравится название R/3, поскольку уже слышал это название много раз (кстати, разве там не на обычной реляционной базе все держится?) и теперь у меня рекламный сдвиг в эту сторону... :)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сущности, атрибуты, типы данных... / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]