|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.08.2008, 14:24 | #1 |
Регистрация: 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 ? |
15.08.2008, 18:03 | #2 |
Форумчанин
Регистрация: 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, там при склеивании все интерисующие вас поля будут, без лишних подстановок. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Клиент 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 |