Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Наследине 1,5 FK тип не совпадает с PK / 9 сообщений из 9, страница 1 из 1
28.06.2015, 13:21
    #38994482
Dmitriy_3206
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наследине 1,5 FK тип не совпадает с PK
Доброе время суток.
Вот есть такое наследие: 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
28.06.2015, 13:44
    #38994486
Polesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наследине 1,5 FK тип не совпадает с PK
Привет, Dmitriy_3206.

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

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

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

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

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

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


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