Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.06;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
14-1129270901
msguns
2005-10-14 10:21
2005.11.06
Мед


14-1129447109
Kerk
2005-10-16 11:18
2005.11.06
С днем рожденья! 16 октября


1-1129023719
Pavelkq
2005-10-11 13:41
2005.11.06
Самодельный Button, событие Click


6-1121858218
alexa
2005-07-20 15:16
2005.11.06
Передача голоса


14-1129636023
Stranger53
2005-10-18 15:47
2005.11.06
Новые версии Delphi