powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Перекрестное связывание двух таблиц
2 сообщений из 2, страница 1 из 1
Перекрестное связывание двух таблиц
    #39403142
Привет всем.

Гугл спрашивал, не нашел ответа. В FAQ смотрел, тоже не нашел ответа.

Я мигрирую с SQLite, может быть он позволяет себе лишнего.
Версия Firebird 2.5.

Хочу: Связать две таблицы по внешним ключам.
"AA" ссылается на "BB" , "BB" ссылается на "AA"

делаю:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE AA (
  aa_id integer NOT NULL PRIMARY KEY
  ,bb_id integer NOT NULL  
  ,CONSTRAINT c_bb_id FOREIGN KEY(bb_id)
    REFERENCES bb(id) ON DELETE NO ACTION
  )  ;


CREATE TABLE BB (
  bb_id integer NOT NULL PRIMARY KEY
  ,aa_id integer NOT NULL  
  ,CONSTRAINT c_aa_id FOREIGN KEY(aa_id)
    REFERENCES aa(id) ON DELETE NO ACTION
  )  ;



Проблема: в первом операторе ругается что таблицы BB не существует. Sqlite это нормально обрабатывал.

Вопрос 1: Поддерживает ли Firebird такие связи?

Вопрос 2: Можно ли как-то сделать это внутри оператора CREATE TABLE и не городить ALTER TABLE на добавление ограничения внешнего ключа?

Вопрос 3: Каким способом это принято делать в Firebird ?
...
Рейтинг: 0 / 0
Перекрестное связывание двух таблиц
    #39403151
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей ВасильевПривет всем.

Гугл спрашивал, не нашел ответа. В FAQ смотрел, тоже не нашел ответа.

Я мигрирую с SQLite, может быть он позволяет себе лишнего.
Версия Firebird 2.5.

Хочу: Связать две таблицы по внешним ключам.
"AA" ссылается на "BB" , "BB" ссылается на "AA"

делаю:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE AA (
  aa_id integer NOT NULL PRIMARY KEY
  ,bb_id integer NOT NULL  
  ,CONSTRAINT c_bb_id FOREIGN KEY(bb_id)
    REFERENCES bb(id) ON DELETE NO ACTION
  )  ;


CREATE TABLE BB (
  bb_id integer NOT NULL PRIMARY KEY
  ,aa_id integer NOT NULL  
  ,CONSTRAINT c_aa_id FOREIGN KEY(aa_id)
    REFERENCES aa(id) ON DELETE NO ACTION
  )  ;



Проблема: в первом операторе ругается что таблицы BB не существует. Sqlite это нормально обрабатывал.

Вопрос 1: Поддерживает ли Firebird такие связи?

Вопрос 2: Можно ли как-то сделать это внутри оператора CREATE TABLE и не городить ALTER TABLE на добавление ограничения внешнего ключа?

Вопрос 3: Каким способом это принято делать в Firebird ?
У тебяУ тебя в примере поля id, указанные в констреинт, не принадлежат таблице.

1. Поддерживает.
2. Нельзя. Ссылка должна быть на существующий объект.
3.Поэтапно:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE AA (
    AA_ID  INTEGER NOT NULL,
    BB_ID  INTEGER NOT NULL
);

CREATE TABLE BB (
    BB_ID  INTEGER NOT NULL,
    AA_ID  INTEGER NOT NULL
);

ALTER TABLE AA ADD PRIMARY KEY (AA_ID);
ALTER TABLE BB ADD PRIMARY KEY (BB_ID);

ALTER TABLE AA ADD CONSTRAINT C_BB_ID FOREIGN KEY (BB_ID) REFERENCES BB (BB_ID);
ALTER TABLE BB ADD CONSTRAINT C_AA_ID FOREIGN KEY (AA_ID) REFERENCES AA (AA_ID);
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Перекрестное связывание двух таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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