Форум: "Базы";
Текущий архив: 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.039 c