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

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

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2008, 14:24   #1
atarix
 
Регистрация: 10.04.2008
Сообщений: 7
По умолчанию Связь маster-detail в базе Firebird

Подскажите пожайлуйста как это сделать. Пользуюсь IBExpert'om
Суть связи такова:
Contract (contract_ID, data,manager,client_id)
SubContract (contract_id,subcontract_ID,client_ id).
Для 1го клиента может быть несколько контрактов, для каждого контракта - 1 субконтракт(содержание договора).
И ещё вопрос - как "подставлять" значения скажем client_id из таблицы client ?
atarix вне форума Ответить с цитированием
Старый 15.08.2008, 18:03   #2
Rik
Форумчанин
 
Аватар для Rik
 
Регистрация: 28.07.2007
Сообщений: 361
По умолчанию

Для связи используются внешние ключи. В IBExpert открываете таблицу и смотрите закладку Ограничения. Подставлять значения (Client_id) не нужно, это противоречит принципам построения реляционных БД. В таблице SubContrakt поле Client_id лишнее. Таблицу Contract внешним ключем связываете с таблицей Client, по полю Client_id. Таблицу SubContraсt связываете с таблицей Contract по полю Contract_id.
Пример: В IBExpert открываете таблицу Contract на закладке ограничения, открываете ещё закладку Внешние ключи. Щелкаете правой кнопкой и выбираете Новый ключ. В столбце "на поле" выбираете поле из таблицы контракт, по которому идет связь с таблицей Client - это Client_id, в столбце "внешняя таблица" выбираете Client, в столбце "Внешнее поле" выбираете первичный ключ из таблицы Client(если первичный ключ один, он подставится автоматом), в столбце правило удаления, можете поставить CASCADE, это будет гарантировать, что при удалении записи из таблицы Client, автоматом удалятся связанные записи из таблицы Contract.

Таблицы потом можно склеить, к примеру во View. В IBExpert создаете новую View и пишите код
CREATE VIEW CONTRACTS
(
CONTRACT_ID,
......,
CLIENT_ID,
....
)
SELECT
T.CONTRACT_ID,
T. .....,
C.CLIENT_ID,
C.....
FROM CONTRACT T
LEFT JOIN CLIENT C ON C.CLIENT_ID = T.CLEINT_ID

Аналогично можно склеить и три таблицы SubContract, Contract, Client, там при склеивании все интерисующие вас поля будут, без лишних подстановок.
Rik вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Клиент FireBird/InterBase sabina_smile SQL, базы данных 9 28.10.2008 21:08
TSQLConnection и FireBird Abercrombie БД в Delphi 5 12.02.2008 14:11
округление в Firebird shurik_7866 БД в Delphi 0 05.07.2007 11:10
Не работает master-detail для adostoredprocedure VAbramyak БД в Delphi 2 24.04.2007 16:48
Регистрация БД в СУБД FireBird CAHEK_zero БД в Delphi 6 17.04.2007 13:29