Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / проверка по двум и более столбцам при вводе данных в таблицу / 8 сообщений из 8, страница 1 из 1
16.01.2018, 18:58
    #39585371
Андрей2707
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка по двум и более столбцам при вводе данных в таблицу
Товарищи, подскажите возможна ли в sql server проверка по двум и более столбцам, при добавлении данных в таблицу!?...

допустим, есть 2 таблицы:

(табл 1)
id|| country|| city
1 || Россия || Москва
2 || Россия || Самара
3 || Италия || Рим

(табл 2)
name ||city||id (fk_1)
Иван || Москва || NULL /* 1 - верно, 2/3 -нет*/
Сергей || Рим || NULL /*3 - верно, 1/2 - нет*/
Ольга || Сочи || NULL /*1,2,3 - не верно*/

в (табл 1) столбец "ID" это PRIMARY KEY, а в (табл 2) столбец "ID(fk_1)" это FOREIGN KEY. Соответственно, из этого примера, в "id (fk_1)" можно будет только добавить цифры 1,2 или 3 (из столбца ID, таблица 1 ). Но ведь ошибочно можно подставить 3 в первую стоку столбца "id (fk_1)" (табл 2), хотя 3 - это Рим в (табл 1)

Поэтому подскажите можно ли что бы при вводе данных в (табл 2) FOREIGN KEY проверял не только данные из столбца "ID", но и названия городов. Если в (табл 2) city = 'Москва', то в столбец "id (fk_1)" можно ввести только 1, если city = 'Рим', то только 3!?
...
Рейтинг: 0 / 0
16.01.2018, 19:04
    #39585377
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка по двум и более столбцам при вводе данных в таблицу
Андрей2707Поэтому подскажите можно ли что бы при вводе данных в (табл 2) FOREIGN KEY проверял не только данные из столбца "ID", но и названия городовДа, возможно. Просто делаете FK по 2 столбцам.

Хотя так не делают, это нарушение какой-то-там нормальной формы.
Если у вас в одной таблице названия городов и их ID, то в других таблицах указывают только ID, без названий.
...
Рейтинг: 0 / 0
16.01.2018, 19:05
    #39585378
Remind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка по двум и более столбцам при вводе данных в таблицу
Андрей2707,
Код: sql
1.
2.
3.
4.
ALTER TABLE dbo.Table2
ADD CONSTRAINT FK_id (fk_1)_City
FOREIGN KEY(id (fk_1), City)
REFERENCES dbo.Table1(id, City)
...
Рейтинг: 0 / 0
16.01.2018, 19:06
    #39585379
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка по двум и более столбцам при вводе данных в таблицу
Через foreign key -- нет. Ну и зачем нужно перманентное поле id во второй таблице, тоже не ясно.
...
Рейтинг: 0 / 0
16.01.2018, 19:07
    #39585380
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка по двум и более столбцам при вводе данных в таблицу
alexeyvgДа, возможно. Просто делаете FK по 2 столбцам.FK по двум полям не позволит держать запись Москва + NULL во второй таблице.
...
Рейтинг: 0 / 0
16.01.2018, 19:14
    #39585386
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка по двум и более столбцам при вводе данных в таблицу
Гавриленко Сергей АлексеевичalexeyvgДа, возможно. Просто делаете FK по 2 столбцам.FK по двум полям не позволит держать запись Москва + NULL во второй таблице.
наоборот позволит, проверка не срабатывает
...
Рейтинг: 0 / 0
16.01.2018, 19:28
    #39585393
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка по двум и более столбцам при вводе данных в таблицу
TaPaKГавриленко Сергей Алексеевичпропущено...
FK по двум полям не позволит держать запись Москва + NULL во второй таблице.
наоборот позволит, проверка не срабатываетКак выяснилось, да, позволит. В случае, если хотя бы одно из полей составного FK равно null, ничего не проверяется, т.е. можно в другие поля писать вообще все, что угодно. (Хотя есть маразматичный вариант делать дополнительно fk на каждое поле).
...
Рейтинг: 0 / 0
16.01.2018, 19:34
    #39585398
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка по двум и более столбцам при вводе данных в таблицу
Гавриленко Сергей АлексеевичTaPaKпропущено...

наоборот позволит, проверка не срабатываетКак выяснилось, да. В случае, если хотя бы одно из полей составного FK равно null, ничего не проверяется, т.е. можно в другие поля писать вообще все, что угодно. Хотя есть маразматичный вариант делать дополнительно fk на каждое поле.

Возвращаясь к недавней теме троичной логики 21107702 , FK при проверке ведут себя так же, как и check constrint, трактуя unknown как допустимый результат.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / проверка по двум и более столбцам при вводе данных в таблицу / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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