powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Наследине 1,5 FK тип не совпадает с PK
9 сообщений из 9, страница 1 из 1
Наследине 1,5 FK тип не совпадает с PK
    #38994482
Dmitriy_3206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток.
Вот есть такое наследие: fb1.5 позволил создать
у дочерней таблицы поле имеет тип integer
у родительско primary key varchar(10)

потом
ALTER TABLE children ADD CONSTRAINT FK_children FOREIGN KEY (parentid) REFERENCES parent (id) ON UPDATE CASCADE;

Создалось.
Потом был перенос базы на 2,5

Такой FK создать с "нуля" в 2,5 уже не получится. Но он уже существует.

Причем есть как varchar на integer так и integer на varchar

В принципе эти таблицы в модуле программы что у меня работает не используется. Модули в которых используются эти таблицы вряд ли когда попадут мне в работу.....

А как будет выглядит такая проблема при работе, какая ошибка отобразится, или.....

Я конечно чуть позже попробую выловить все такие не правильные зависимости - ведь раз я увидел дважды, то не исключено что и той части базы что используется есть такая "чехорда"
...
Рейтинг: 0 / 0
Наследине 1,5 FK тип не совпадает с PK
    #38994486
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, Dmitriy_3206.

Насколько принципиально, что поле родительского PK имеет тип varchar(10)?
Насколько принципиально, что поле дочернего FK имеет тип integer?

При создании наследуемой структуры в FB2.5 привести типы полей к одинаковому типу, а при переносе данных преобразовать значения к соответствующему типу через CAST.

С уважением, Polesov.
...
Рейтинг: 0 / 0
Наследине 1,5 FK тип не совпадает с PK
    #38994488
Dmitriy_3206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы не поняли вопрос:
Если я не выявлю эту проблему как она отобразится - Fb2.5 будет сыпать в лог ошибки, возвращать не то что ожидается или другие варианты.

Я случайно увидел данную проблему при обновлении версий. Посмотреть в живую как выглядит проблема мне не начем. Разве что только провести "сознательный" эксперимент на "рабочих" таблицах.
...
Рейтинг: 0 / 0
Наследине 1,5 FK тип не совпадает с PK
    #38994489
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy_3206как она отобразится
Будешь получать FK violation там где не ожидаешь. Больше ничего особенного не будет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Наследине 1,5 FK тип не совпадает с PK
    #38994492
Dmitriy_3206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
Спасибо
...
Рейтинг: 0 / 0
Наследине 1,5 FK тип не совпадает с PK
    #38994545
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy_3206, нивапроц.

Вот запрос по всем FK, у которых не совпадает тип полей:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SELECT SC.RDB$CONSTRAINT_NAME,
       TC.RDB$RELATION_NAME,
       TI.RDB$FIELD_NAME,
       SC.RDB$RELATION_NAME,
       SI.RDB$FIELD_NAME

  FROM RDB$RELATION_CONSTRAINTS SC
  JOIN RDB$INDEX_SEGMENTS       SI ON ( SI.RDB$INDEX_NAME      = SC.RDB$INDEX_NAME      )
  JOIN RDB$REF_CONSTRAINTS      RC ON ( RC.RDB$CONSTRAINT_NAME = SC.RDB$CONSTRAINT_NAME )
  JOIN RDB$RELATION_CONSTRAINTS TC ON ( TC.RDB$CONSTRAINT_NAME = RC.RDB$CONST_NAME_UQ   )
  JOIN RDB$INDEX_SEGMENTS       TI ON ( TI.RDB$INDEX_NAME      = TC.RDB$INDEX_NAME AND
                                        TI.RDB$FIELD_POSITION  = SI.RDB$FIELD_POSITION  )
 WHERE SC.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY'
   AND ( SELECT D.RDB$FIELD_TYPE
           FROM RDB$RELATION_FIELDS F
           JOIN RDB$FIELDS D ON ( D.RDB$FIELD_NAME = F.RDB$FIELD_SOURCE )
          WHERE F.RDB$RELATION_NAME = TC.RDB$RELATION_NAME
            AND F.RDB$FIELD_NAME = TI.RDB$FIELD_NAME )
    <> ( SELECT D.RDB$FIELD_TYPE
           FROM RDB$RELATION_FIELDS F
           JOIN RDB$FIELDS D ON ( D.RDB$FIELD_NAME = F.RDB$FIELD_SOURCE )
          WHERE F.RDB$RELATION_NAME = SC.RDB$RELATION_NAME
            AND F.RDB$FIELD_NAME = SI.RDB$FIELD_NAME )



С уважением, Polesov.
...
Рейтинг: 0 / 0
Наследине 1,5 FK тип не совпадает с PK
    #38994560
Dmitriy_3206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Polesov,

только начал писать свой запрос а у Вас уже решение... Которое показало, но только далеко не все. Пока не разбирался почему.
...
Рейтинг: 0 / 0
Наследине 1,5 FK тип не совпадает с PK
    #38994561
Dmitriy_3206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitriy_3206,

Ой. Все правильно ;) СПасибо
...
Рейтинг: 0 / 0
Наследине 1,5 FK тип не совпадает с PK
    #38994586
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovБудешь получать FK violation там где не ожидаешь. Больше ничего особенного не будет.
если не считать, что джойны внезапно начнут тормозить, ибо пойдут натуралом или вывернутся наизнанку...
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Наследине 1,5 FK тип не совпадает с PK
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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