Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Если способ в t1 вставить запись? / 25 сообщений из 26, страница 1 из 2
04.01.2011, 14:47
    #37045695
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
CREATE TABLE T1 (
ID INTEGER NOT NULL,
FK INTEGER NOT NULL
);
CREATE TABLE T2 (
ID INTEGER NOT NULL,
FK INTEGER NOT NULL
);
ALTER TABLE T1 ADD CONSTRAINT PK_T1 PRIMARY KEY (ID);
ALTER TABLE T2 ADD CONSTRAINT PK_T2 PRIMARY KEY (ID);
ALTER TABLE T1 ADD CONSTRAINT FK_T1 FOREIGN KEY (FK) REFERENCES T2 (ID);
ALTER TABLE T2 ADD CONSTRAINT FK_T2 FOREIGN KEY (FK) REFERENCES T1 (ID);
...
Рейтинг: 0 / 0
04.01.2011, 14:51
    #37045698
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE T1 (
  ID INTEGER NOT NULL,
  FK INTEGER NOT NULL
);
CREATE TABLE T2 (
  ID INTEGER NOT NULL,
  FK INTEGER NOT NULL
);
ALTER TABLE T1 ADD CONSTRAINT PK_T1 PRIMARY KEY (ID);
ALTER TABLE T2 ADD CONSTRAINT PK_T2 PRIMARY KEY (ID);
ALTER TABLE T1 ADD CONSTRAINT FK_T1 FOREIGN KEY (FK) REFERENCES T2 (ID);
ALTER TABLE T2 ADD CONSTRAINT FK_T2 FOREIGN KEY (FK) REFERENCES T1 (ID); 
?
...
Рейтинг: 0 / 0
04.01.2011, 15:02
    #37045709
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
нет. циклическая ссылка. что раньше - курица или яйцо?
...
Рейтинг: 0 / 0
04.01.2011, 15:03
    #37045711
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
Ну и тема называется "Есть ли способ в T1 вставить запись?"

p.s. После Нового Года только начал отходить...
...
Рейтинг: 0 / 0
04.01.2011, 15:05
    #37045714
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
kdvнет. циклическая ссылка. что раньше - курица или яйцо?

Для интересу: а в какой-нибудь СУБД такое возможно?
...
Рейтинг: 0 / 0
04.01.2011, 15:24
    #37045734
olegenty
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
Вроде Таблоид что-то такое запрашивал, типа, чтобы ссылочная целостность проверялась непосредственно перед коммитом, а до - можно было в "измененных" записях держать любой "мусор". Вроде в Oracle есть такая настройка.

С другой стороны, хоть это и изврат, ты можешь в обе таблицы добавить по одной записи ДО наложения ограничений. Потом делать вставку с этими значениями по умолчанию, после чего - update. Путь очень тернистый, чреватый ошибками.
...
Рейтинг: 0 / 0
04.01.2011, 15:40
    #37045744
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
__Avenger__Ну и тема называется "Есть ли способ в T1 вставить запись?"

Нету способа. Ибо нефиг. Убери у FK NOT NULL и способ появится.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
04.01.2011, 18:59
    #37045954
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
Dimitry Sibiryakov> Нету способа. Ибо нефиг. Убери у FK NOT NULL и способ появится.

Способ то есть - вставляешь в обе (или одну) таблицы запись с ID "-1"
и ссылаешься на нее, потом апдейтишь. То же самое раньше и вместо
Null-ов использовали. Но для сегодняшних версий "нефиг" поддерживаю.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
04.01.2011, 19:01
    #37045958
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
Гаджимурадов РустамСпособ то есть - вставляешь в обе (или одну) таблицы запись с ID "-1"

И получаешь в ответ ошибку нарушения FK. Ты в топике что, читаешь только мои сообщения?
olegenty может обидеться.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
04.01.2011, 20:00
    #37046016
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
Dimitry Sibiryakov> И получаешь в ответ ошибку нарушения FK.
Dimitry Sibiryakov> Ты в топике что, читаешь только мои сообщения?
Dimitry Sibiryakov> olegenty может обидеться.

C чего вдруг ошибку нарушения FK ? Я лишь дополнил
ответ olegenty подсказкой о "фиктивной" записи, чтобы
не приходилось делать ссылки на "чужие" записи.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
04.01.2011, 20:07
    #37046024
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
Гаджимурадов РустамC чего вдруг ошибку нарушения FK ? Я лишь дополнил ответ olegenty подсказкой о "фиктивной"
записи, чтобы не приходилось делать ссылки на "чужие" записи.

А какая разница между "чужими" записями и "фиктивными"? И что именно ты хотел дополнить в
этом ответе:
olegentyможешь в обе таблицы добавить по одной записи ДО наложения ограничений.
Потом делать вставку с этими значениями по умолчанию, после чего - update.
этим:
Гаджимуратов Рустамвставляешь в обе (или одну) таблицы запись с ID "-1"
и ссылаешься на нее, потом апдейтишь
Бог меня побей если я вообще вижу хоть какую-то разницу между этими двумя высказываниями.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
04.01.2011, 20:13
    #37046034
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
Не видишь - значит, и нет, пусть будет по-твоему.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
13.04.2011, 15:27
    #37214432
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
А в такую?
Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE TEST (
    F_FROM  INTEGER NOT NULL,
    F_TO    INTEGER NOT NULL
);
ALTER TABLE TEST ADD CONSTRAINT TEST$PK PRIMARY KEY (F_FROM, F_TO);
ALTER TABLE TEST ADD CONSTRAINT TEST_TEST FOREIGN KEY (F_TO, F_FROM) REFERENCES TEST (F_FROM, F_TO) ON DELETE CASCADE;
...
Рейтинг: 0 / 0
13.04.2011, 15:30
    #37214439
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
кто тут?!
...
Рейтинг: 0 / 0
13.04.2011, 15:30
    #37214441
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
что-то я не улавливаю смысл такого ФК. наверное, получится вставить 1-1, 2-2 и так далее.
...
Рейтинг: 0 / 0
13.04.2011, 15:31
    #37214445
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
kdv,

Надо вот это вставить:
Код: plaintext
1.
2.
3.
4.
execute block as
begin
  insert into test (f_from, f_to) values ( 1 ,  1 );
  insert into test (f_from, f_to) values ( 2 ,  1 );
end
...
Рейтинг: 0 / 0
13.04.2011, 15:32
    #37214450
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
Ой, ошибся:
Код: plaintext
1.
2.
3.
4.
execute block as
begin
  insert into test (f_from, f_to) values ( 1 ,  2 );
  insert into test (f_from, f_to) values ( 2 ,  1 );
end
...
Рейтинг: 0 / 0
13.04.2011, 15:35
    #37214462
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
ну не вставится же. при первой вставке 1-2 фк проверит наличие 2-1, а такого еще нет.
...
Рейтинг: 0 / 0
13.04.2011, 16:56
    #37214731
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
"Ага, *ля!" - злорадно сказали суровые сибирские мужики.
...
Рейтинг: 0 / 0
13.04.2011, 17:07
    #37214779
Esperito
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
__Avenger__Для интересу: а в какой-нибудь СУБД такое возможно? Тынц
...
Рейтинг: 0 / 0
13.04.2011, 18:05
    #37214987
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
возможно, с deferred fk, когда он проверяется по коммиту.
...
Рейтинг: 0 / 0
14.04.2011, 09:10
    #37215666
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
А планируются ли deffered fk в fb3?
...
Рейтинг: 0 / 0
14.04.2011, 09:54
    #37215754
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
а зачем? твои извраты реализовывать? :-)
...
Рейтинг: 0 / 0
14.04.2011, 09:57
    #37215759
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
kdv,

Да мне-то в принципе все равно, я могу и без этого fk жить. Просто с ним бы было логичнее.
...
Рейтинг: 0 / 0
14.04.2011, 10:40
    #37215832
olegenty
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если способ в t1 вставить запись?
При такой реализации значит, что в f_from и f_to - это один и тот же объект предметной области.
Следовательно, он должен быть вынесен в отдельную таблицу, и именно на неё должен ссылаться FK и из f_from, и из f_to.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Если способ в t1 вставить запись? / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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