powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / объясните про связь первичного и внешнего ключа
4 сообщений из 4, страница 1 из 1
объясните про связь первичного и внешнего ключа
    #34369262
дракон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
здравствуйте!

пару недель усиленно учу теорию по базам данным и язык sql. вроде все понятно, но вот есть такая непонятка:

пусть есть две таблицы: т1 и т2.
в таблице т1 есть первичный ключ а,
в таблице т2 есть внешний ключ b, который ссылается на а.

я так понимаю, что теперь т2 это слабая сущность, т.к. пока мы не внесем данные в т1, в т2 ничего записать не получится. и вот вопрос:

а как мы будем записывать в т2, если не знаем значение первиченого ключа из т1? например он суррогатный(число)? поясните этот момент пожалуйста, с примерами если не сложно :)
...
Рейтинг: 0 / 0
объясните про связь первичного и внешнего ключа
    #34369309
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для того чтобы внести строчку в т2, надо знать значение а,
для которого вносится строчка. Если первичный ключ из т1 - неизвестен,
то незачем вносить строчку в т2.
...
Рейтинг: 0 / 0
объясните про связь первичного и внешнего ключа
    #34369400
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
драконя так понимаю, что теперь т2 это слабая сущность
Хм. В теории есть такой термин?

дракон, т.к. пока мы не внесем данные в т1, в т2 ничего записать не получится.
Это не есть истина. Существуют минимум два способа "получится".

дракона как мы будем записывать в т2, если не знаем значение первиченого ключа из т1?
Хм. А кто ударил нам по голове так удачно, что мы его забыли?

драконнапример он суррогатный(число)?
И? Какой бы суррогатный он ни был, откуда-то он взялся и попал в одно место (в первичный ключ). Значит, может попасть и в два места (в первичный и во внешний ключ).

драконпоясните этот момент пожалуйста, с примерами если не сложно :)
Хм. Например, в Oracle это будет выглядеть так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create table master ( master_id integer not null primary key, dummy varchar2( 1000 )) ;

create table detail ( detail_id integer not null primary key, master_id integer not null, dummy varchar2( 1000 )) ;

alter table detail add foreign key ( master_id ) references master ( master_id ) ;

create sequence master_seq ;

create sequence detail_seq ;

create function insert_master_detail ( master_dummy varchar, detail_dummy varchar2 ) return integer is
  new_master_id integer ;
begin
  insert into master ( master_id, dummy )
    values ( master_seq.nextval, master_dummy )
    returning master_id into new_master_id ;
  insert into detail ( detail_id, master_id, dummy )
    values ( detail_seq.nextval, new_master_id, detail_dummy ) ;
  return new_master_id ;
end ;
/
...
Рейтинг: 0 / 0
объясните про связь первичного и внешнего ключа
    #34372502
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дракон
а как мы будем записывать в т2, если не знаем значение первиченого ключа из т1? например он суррогатный(число)? это обходится так: надо *сначала* получить значение первичного ключа, и потом записывать ключ вместе с данными в т1 и т2.
В firebird для этого используются генераторы. Генератор, это число, хранящееся в БД, которое мы в один прием: (1. увеличиваем на единицу 2.берем получившееся значение.) таким образом, у нас оказывается уникальное (единственное) число, годное для первичного ключа.
В многопользовательской среде, если несколько пользователей "одновременно" хотят получить ключ, то .. они не получают его одновременно, а сервер ставит их в очередь. таким образом каждый получает свой уникальный ключ, и уже неважно, кто и когда успеет вставить свои записи.
Для этого генератор стоит "вне контекста транзакции", ... а что это такое я уже не буду писать, так как утомился от умственного напряжения :)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / объясните про связь первичного и внешнего ключа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]