![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Правильно-ли представлена связь между таблицами? [D6, IB6.x]
Barmaglot © (2005-09-28 09:19:00)Всем привет! Не очень давно работаю с 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" - название агента, для обеспечения ссылочной целостности?
Прошу проверить правильность связности таблиц.....
Спасибо.
Desdechado (2005-09-28 11:07:00) [1]рекомендую делать именованные констраинты, тогда при необходимости изменить структуру данных это легко будет сделать
ALTER TABLE tablica ADD CONSTRAINT constr_name FOREIGN KEY ...
аналогично для уников и первичных ключей
Barmaglot (2005-09-28 09:51:00) [2]Дык в том то и дело, что попробовал и не работало.....
Top (2005-09-28 09:50:00) [3]ты бы попробовал проверил как работает а потом с проблемами сюды, если возникнут
Sergey13 (2005-09-28 09:41:00) [4]Теперь правильно. Все, кроме сервера. Викинь его нафиг и поставь ФБ1.5. И будет тебе счастье. 8-)
Barmaglot (2005-09-28 09:31:00) [5]То есть:
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:24:00) [6]>Прошу проверить правильность связности таблиц.....
Неправильно. Все с точностью до наоборот. Счета и Договоры должны ссылаться на Агентов мирового империализму. 8-)