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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2012, 23:10   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос О первичных и внешных ключах

Добрый вечер! СУБД - Firebird. Прошу пояснить мне принцип работы первичных и внешних ключей. Мне немного непонятен сам принцип использования внешних ключей. Правильно ли я понимаю их: есть главная таблица и подчиненная. Подчиненная связана с полем ID в главной таблице через некое поле ID_FK. Обе таблицы изначально пусты и не содержат записей. Каскадное удаление и обновление выставлено на поле ID_FK. Нужно ли при вставке записей в главную таблицу в поле ID_FK заносить ID из главной таблицы? Или это реализуется на каком-то другом уровне, который я немного не понимаю? Или достаточно заполнять записями только главную таблицу? Прошу разъяснить эти вопросы мне. Буду премного благодарен.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.05.2012, 08:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нужно ли при вставке записей в главную таблицу в поле ID_FK заносить ID из главной таблицы?
Эту фразу как понимайт?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.05.2012, 09:23   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Загадочная фраза При вставке в дочернюю таблицу нужно самому позаботиться о значении поля ID_FK. При вставке в главную это поле в дочерней таблице не при делах, просто нет в этот момент дочерних записей. Если в ттриггере на вставку в главную создается запись и в дочерней (почему бы и нет), то триггер должен обеспечить передачу значения ключа главной таблицы в дочернюю
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 26.05.2012 в 09:28.
Аватар вне форума Ответить с цитированием
Старый 26.05.2012, 18:04   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Эту фразу как понимайт?
Ну, т.е. например, что если в главной записи есть такие записи:
ID Firts_Name
1 Иван
2 Петр
3 Сидор
то надо ли значения из колонки ID таблицы выше, заносить в колонку ID_FK в дочернюю таблицу, чтобы потом дочерняя таблица выглядела так:
ID ID_FK Last_Name
1 1 Иванов
2 2 Петров
3 3 Сидоров
То будет ли тогда при удалении записи из главной таблицы, удалена запись из дочерней таблицы, где ID_FK дочерней таблицы=ID главной таблице?
или достаточно просто оставить дочернюю таблицу такой:
ID ID_FK Last_Name
1 null Иванов
2 null Петров
3 null Сидоров
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.05.2012, 18:14   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Посмотрите для Firebird http://firebirdsql.su/doku.php?id=constraint
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание первичных индексов в db файле paradox7 Nikolay88_x C/C++ Базы данных 2 10.01.2012 20:59