Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Вниз

Правильно-ли представлена связь между таблицами?   Найти похожие ветки 

 
Barmaglot   (2005-09-28 09:19) [0]

Всем привет! Не очень давно работаю с IB, возник вопрос по связности таблиц (один-ко-многим):
Смысл такой: Есть таблица agent (контрагенты). У контрагента может быть несколько счетов, которые я описываю в отдельной таблице, и много договоров (тоже их вынес в отдельную таблицу):

CREATE TABLE "AGENT"
(
 "KOD_AGENT" INTEGER NOT NULL,
 "VID_AGENT" VARCHAR(20),
 "AGENT" VARCHAR(150),
 "ADRESS_YRID" VARCHAR(200),
  ...

 "KOD_DOG" INTEGER NOT NULL,
 "KOD_SCHET" INTEGER NOT NULL,
 "NAIMEN" VARCHAR(200) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
 "NUM_SCHET" VARCHAR(20) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
PRIMARY KEY ("KOD_AGENT")
);
ALTER TABLE "AGENT" ADD FOREIGN KEY ("KOD_DOG") REFERENCES DOGOVOR ("KOD_DOG");
ALTER TABLE "AGENT" ADD FOREIGN KEY ("KOD_SCHET") REFERENCES SCHET ("KOD_SCHET");

CREATE TABLE "DOGOVOR"
(
 "KOD_DOG" INTEGER NOT NULL,
 "AGENT" VARCHAR(150) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
 "NAIMEN" VARCHAR(200) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
 "DATA_NACH" TIMESTAMP,
 "DATA_END" TIMESTAMP,
PRIMARY KEY ("KOD_DOG")
);

CREATE TABLE "SCHET"
(
 "KOD_SCHET" INTEGER NOT NULL,
 "AGENT" VARCHAR(150) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
 "WORK_NAME" VARCHAR(50) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
 "NUM_SCHET" VARCHAR(20) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
  ...

 "RECV" VARCHAR(300) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
PRIMARY KEY ("KOD_SCHET")

В табл. "AGENT" связал таблицы по ключам KOD_DOG и KOD_SCHET, но не совсем понятно, в таблицах договоров и счетов нужно-ли поле "AGENT" - название агента, для обеспечения ссылочной целостности?

Прошу проверить правильность связности таблиц.....
Спасибо.


 
Sergey13 ©   (2005-09-28 09:24) [1]

>Прошу проверить правильность связности таблиц.....
Неправильно. Все с точностью до наоборот. Счета и Договоры должны ссылаться на Агентов мирового империализму. 8-)


 
Barmaglot   (2005-09-28 09:31) [2]

То есть:

CREATE TABLE "DOGOVOR"
(
"KOD_DOG" INTEGER NOT NULL,
"KOD_AGENT" INTEGER NOT NULL,
"NAIMEN" VARCHAR(200) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
"DATA_NACH" TIMESTAMP,
"DATA_END" TIMESTAMP,
PRIMARY KEY ("KOD_DOG")
);
ALTER TABLE "DOGOVOR" ADD FOREIGN KEY ("KOD_AGENT") REFERENCES AGENT ("KOD_AGENT");

CREATE TABLE "SCHET"
(
"KOD_SCHET" INTEGER NOT NULL,
"KOD_AGENT" INTEGER NOT NULL,
"WORK_NAME" VARCHAR(50) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
"NUM_SCHET" VARCHAR(20) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
 ...

"RECV" VARCHAR(300) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
PRIMARY KEY ("KOD_SCHET");
ALTER TABLE "SCHET" ADD FOREIGN KEY ("KOD_AGENT") REFERENCES AGENT ("KOD_KOD_AGENT");

а в таблице "AGENT" определять foreign key не надо?


 
Sergey13 ©   (2005-09-28 09:41) [3]

Теперь правильно. Все, кроме сервера. Викинь его нафиг и поставь ФБ1.5. И будет тебе счастье. 8-)


 
Top ©   (2005-09-28 09:50) [4]

ты бы попробовал проверил как работает а потом с проблемами сюды, если возникнут


 
Barmaglot   (2005-09-28 09:51) [5]

Дык в том то и дело, что попробовал и не работало.....


 
Desdechado ©   (2005-09-28 11:07) [6]

рекомендую делать именованные констраинты, тогда при необходимости изменить структуру данных это легко будет сделать
ALTER TABLE tablica ADD CONSTRAINT constr_name FOREIGN KEY ...
аналогично для уников и первичных ключей



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.059 c
1-1129711467
saNat
2005-10-19 12:44
2005.11.06
Упорядочение создания компонент


2-1129462287
STEEL
2005-10-16 15:31
2005.11.06
Перевод курсора на новую строку


14-1129126547
Anatoly Podgoretsky
2005-10-12 18:15
2005.11.06
Тестирование DSL


1-1129694438
Квэнди
2005-10-19 08:00
2005.11.06
Сортировка StringGrid


1-1129296155
Sysanin
2005-10-14 17:22
2005.11.06
Проигрывание звука из DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский