Главная страница
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.058 c
9-1119442278
Lostcoder
2005-06-22 16:11
2005.11.06
Зеркальное отражение


3-1127721141
nikolas
2005-09-26 11:52
2005.11.06
Подстрока в Interbase


14-1129217046
ArtemESC
2005-10-13 19:24
2005.11.06
Дизассемблер-редактор


2-1129476362
_WWW
2005-10-16 19:26
2005.11.06
WebBrowser


6-1122025060
KirGus
2005-07-22 13:37
2005.11.06
У меня такая проблема с клиент-сокетом: