Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2010, 15:36   #1
Domanoff
Форумчанин
 
Регистрация: 05.03.2010
Сообщений: 125
По умолчанию внешние ключи в interbase

есть таблица с полем с которым должны быть соеденены две таблицы, поставить внешний ключ в этом поле для обоих таблиц(и их соответствующих полей) я так понял НЕЛЬЗЯ, подскажите как в этой ситуации действовать?
пожалейте новичка
Domanoff вне форума Ответить с цитированием
Старый 05.04.2010, 15:42   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Domanoff Посмотреть сообщение
есть таблица с полем с которым должны быть соеденены две таблицы, поставить внешний ключ в этом поле для обоих таблиц(и их соответствующих полей) я так понял НЕЛЬЗЯ, подскажите как в этой ситуации действовать?
Перепроектировать БД, чтобы такого не требовалось.
pu4koff вне форума Ответить с цитированием
Старый 05.04.2010, 15:48   #3
Domanoff
Форумчанин
 
Регистрация: 05.03.2010
Сообщений: 125
По умолчанию

оказывается можно, просто надо было уникальными во внешних табл поставить поля
пожалейте новичка
Domanoff вне форума Ответить с цитированием
Старый 05.04.2010, 16:35   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Domanoff Посмотреть сообщение
оказывается можно, просто надо было уникальными во внешних табл поставить поля
Как это интересно? Мне SQL-синтаксис даже интересен стал, как можно внешний ключ к двум таблицам прикрутить.
pu4koff вне форума Ответить с цитированием
Старый 05.04.2010, 16:47   #5
Domanoff
Форумчанин
 
Регистрация: 05.03.2010
Сообщений: 125
По умолчанию

.....ALTER TABLE AVTORSTVO ADD CONSTRAINT FK_AVTORSTVO_1 FOREIGN KEY (ID_AVT) REFERENCES MEDIADANNIE (AVTORI);
ALTER TABLE AVTORSTVO ADD CONSTRAINT FK_AVTORSTVO_2 FOREIGN KEY (ID_AVT) REFERENCES DOCUMENT (AVTORI);.....
делаю, в IB expert сделал на одно поля просто два ключа, я не прав в чем то?
пожалейте новичка
Domanoff вне форума Ответить с цитированием
Старый 05.04.2010, 17:11   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Domanoff Посмотреть сообщение
.....ALTER TABLE AVTORSTVO ADD CONSTRAINT FK_AVTORSTVO_1 FOREIGN KEY (ID_AVT) REFERENCES MEDIADANNIE (AVTORI);
ALTER TABLE AVTORSTVO ADD CONSTRAINT FK_AVTORSTVO_2 FOREIGN KEY (ID_AVT) REFERENCES DOCUMENT (AVTORI);.....
делаю, в IB expert сделал на одно поля просто два ключа, я не прав в чем то?
Интересно. Не знал, что так можно. Просто мне почему-то кажется это извращением каким-то. И почему таблица "Авторство" ссылается на таблицы "Медиаданные" и "Документ". Может наоборот надо?
pu4koff вне форума Ответить с цитированием
Старый 05.04.2010, 17:24   #7
Domanoff
Форумчанин
 
Регистрация: 05.03.2010
Сообщений: 125
По умолчанию

там просто связь через таблицу авторство с еще одной таблицей сотрудники(связь многие ко многим), в медиаданных и документах инкременируются коды авторства, вставляются в табл АВТОРСТВО и она уже ссылается на сотрудников т е эти ключи только для связи многие ко многим....может как то проще можно?
пожалейте новичка
Domanoff вне форума Ответить с цитированием
Старый 05.04.2010, 17:54   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Я так понимаю, что в БД есть авторы, которые могут быть как создателями документов, так и медиаданных и причем у каждого документа/медиа может быть несколько авторов?
pu4koff вне форума Ответить с цитированием
Старый 05.04.2010, 21:37   #9
Domanoff
Форумчанин
 
Регистрация: 05.03.2010
Сообщений: 125
По умолчанию

во во, именно так!
пожалейте новичка
Domanoff вне форума Ответить с цитированием
Старый 06.04.2010, 16:15   #10
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Тогда логичнее объединить документы и медиаданные через категоризацию или как там она по научному называется.

Авторство
+----------------------+
| автор (PK, FK) |
| произведение (PK,FK) |
+----------------------+

Произведение
+----------+
| ИД (PK) |
+----------+
| Название |
| Тип |
+----------+

Документ
+-----------+
| ИД (PK,FK) | // ИД произведения
+-----------+
| ... |
+-----------+

В таблице произведение (название уж более подходящее сами придумайте ) основная информация по тому, что там авторы понаделали. Обязательно наличие поля "Тип", которое будет показывать что у нас за произведение такое: документ или медиаданные. Минус тут в том, что данные по одному объекту будут раскиданы по двум таблицам, ну а из плюсов: безболезненное добавление новых типов "произведений".
И еще: Вы сможете обеспечить уникальность индексов в таблицах "документ" и "медиаданные" или таблица авторство в итоге "поплывёт"?
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
«Внешние подпрограммы» Dr.Caste Помощь студентам 0 20.12.2009 15:36
Паскаль. Подпрограммы (внешние) Sanek19 Помощь студентам 3 16.12.2009 15:24
Паскаль. Внешние подпрограммы. HD-boy Помощь студентам 2 14.12.2009 04:38
Вынесение кода во внешние файлы KorDum Общие вопросы Delphi 18 03.07.2009 22:47