Табличные Отношения SQL - PullRequest
0 голосов
/ 06 февраля 2019

У нас есть много таблиц в MS SQL, которые созданы без табличных отношений много лет назад.Сейчас мы пытаемся создать связь между этими таблицами.Проблема заключается в том, что многие из этих разработчиков использовали поддельные идентификаторы в таблицах.

Например: TABLE A, ID (первичный ключ) -> TABLE B, AID должен быть реляционным.Но разработчики использовали некоторые поддельные идентификаторы, такие как -1, -2, чтобы решить некоторые проблемы на их стороне.И теперь, когда я пытаюсь создать связь между TABLE A, ID (первичный ключ) -> TABLE B, AID, я получаю ошибки.

ТАБЛИЦА A

ID | NAME
1  | name01
2  | name02

ТАБЛИЦА B

ID | NAME   | AID
1  | name01 | 1
2  | name02 | -1
3  | name03 | -2

Есть ли способ решить эту проблему и есть лито есть полностью то, что сделали разработчики, они не использовали никаких отношений в SQL, они контролируют все в коде позади.

Спасибо

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Общая идея ссылочной целостности заключается именно в том, что вы не можете иметь недопустимые ссылки.

Так что лучшим способом действий здесь было бы сосать этои вручную очистить его.Создайте отсутствующие записи в другой таблице или удалите записи.

0 голосов
/ 06 февраля 2019

Вы также можете игнорировать проверки существующих данных.Если вы используете sql server management studio для создания отношений, есть возможность сделать это, как на этом снимке экрана

enter image description here

Надеюсь, это поможет

0 голосов
/ 06 февраля 2019

Вам необходимо добавить их в справочную таблицу.Примерно так:

insert into a (id, name)
     select distinct aid, 'Automatically Generated'
     from b
     where not exists (select 1 from a where b.aid = a.id) and
           a.id is not null;

Затем вы можете добавить отношение внешнего ключа:

alter table b add constraint fk_b_aid foreign key (aid) references a(id);
...