Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как сделать строгое отношение 1 к 1. Но как тогда вставлять данные если они строго зависим  [new]
Awaiter
Member

Откуда:
Сообщений: 114
Подкажите пожалуйста.

Я примерно могу представить, что СТРОГУ связь 1к1 нужно реализовать так: в каждой таблице ID является сразу и первичным ключом и внешним на соседнюю таблицу. В главной таблице пусть он будет SCOPE IDENTITY, либо можно генерить ID из SEQENCE.

Вопрос ! Как, в таком случае, вставлять данные в таблицу ? Ведь при вставке в любую их них, сломается ограничение внешнего ключа, который требует наличие ID уже.
31 дек 14, 13:26    [17076470]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать строгое отношение 1 к 1. Но как тогда вставлять данные если они строго зависим  [new]
Павел-П
Member

Откуда:
Сообщений: 234
Awaiter,

1. Отношение 1-1 все равно подразувает, что у вас есть главная и зависамая таблица (на ней висит FK).
Нельзя вставить данные в 2 таблицы одновременно.
2. "в каждой таблице ID является сразу и первичным ключом и внешним на соседнюю таблицу"
В теории достаточно наличия unique key constraint на 2-ух таблицах.
31 дек 14, 13:37    [17076501]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать строгое отношение 1 к 1. Но как тогда вставлять данные если они строго зависим  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Awaiter,

вставляйте данные в одной транзакции, чтобы не было нарушения целостности. Создайте в одной таблице первичный ключ, во второй - внешний. Соответственным должен быть порядок вставки.
31 дек 14, 13:56    [17076569]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать строгое отношение 1 к 1. Но как тогда вставлять данные если они строго зависим  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
В обеих таблицах должны быть соответствующие записи?
Или их может и не быть в какой-то из таблиц?
31 дек 14, 14:28    [17076722]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать строгое отношение 1 к 1. Но как тогда вставлять данные если они строго зависим  [new]
Awaiter
Member

Откуда:
Сообщений: 114
iap
В обеих таблицах должны быть соответствующие записи?
Или их может и не быть в какой-то из таблиц?


Строго по одной записи в каждой из таблиц. Нелья позволять удалить в одной - ограничение в другой должно заругатся (это и будет защитой).
Я подумываю о том, чтобы оперировать в таблицах процедурами (ими добавлять-удалять). Кажется можно отключать временно ограничение, и это как раз предназначенно для таких случаев.
31 дек 14, 17:46    [17077435]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать строгое отношение 1 к 1. Но как тогда вставлять данные если они строго зависим  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Awaiter
iap
В обеих таблицах должны быть соответствующие записи?
Или их может и не быть в какой-то из таблиц?


Строго по одной записи в каждой из таблиц. Нелья позволять удалить в одной - ограничение в другой должно заругатся (это и будет защитой).
Я подумываю о том, чтобы оперировать в таблицах процедурами (ими добавлять-удалять). Кажется можно отключать временно ограничение, и это как раз предназначенно для таких случаев.
Чем не подходит одна таблица?
Сколько в сумме полей?
31 дек 14, 18:50    [17077604]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать строгое отношение 1 к 1. Но как тогда вставлять данные если они строго зависим  [new]
Awaiter
Member

Откуда:
Сообщений: 114
iap,

Таблицы, как таковой еще нету. Я интересуюсь на будущее. Пока все еще на уровне планирования.
Порылся в интернете, и пришел к выводу, что в большинстве случаев там где пишут про "1 к 1" на самом деле подразумевают "1 главная таблица, и МОЖЕТ быть в другой таблице будут зависимые строки для части главных строчек". Подумал, и правда, как можно в принципе обеспечить 1 к 1, если это потребует настройки Ограничений, которые не позволят вообще начать вставку в любую их таблиц.
Потом вспомнил про то, что можно отключать ограничения. Но насколько я знаю, это используется лишь во время каких-то мааааассовых загрузок в таблице, а не в нормальном режиме.

Вот и задал вопрос....
1 янв 15, 03:19    [17078471]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать строгое отношение 1 к 1. Но как тогда вставлять данные если они строго зависим  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20600
Я не понимаю, зачем задан вопрос.

Если речь о том, существует ли механизм реализации именно такого типа контроля целостности - ответ отрицательный.
Если речь о том, существует ли механизм искусственной реализации такого типа контроля целостности - возможно, что ответ будет положительным. Правда, возможная реализация накладывает определённые ограничения на методы работы с данными - и уж во всяком случае полное блокирование прямого к ним доступа.
1 янв 15, 20:19    [17079669]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать строгое отношение 1 к 1. Но как тогда вставлять данные если они строго зависим  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Awaiter
Кажется можно отключать временно ограничение, и это как раз предназначенно для таких случаев
Интересно, зачем нужны ограничения, которые нужно отключать при изменении данных? :-)
2 янв 15, 00:44    [17080158]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать строгое отношение 1 к 1. Но как тогда вставлять данные если они строго зависим  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
IDENTITY и ссылка на себя
2 янв 15, 16:17    [17080958]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать строгое отношение 1 к 1. Но как тогда вставлять данные если они строго зависим  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34621
Awaiter,

1:1 в чистом виде в Рсубд не бывает.
эта связь реализуется в виде 1:0...1 и можно еще опционально добавить триггер на таблицу, где 0..1, чтобы он запрещал удалять запись.
2 янв 15, 19:44    [17081264]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать строгое отношение 1 к 1. Но как тогда вставлять данные если они строго зависим  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34621
MasterZiv
Awaiter,

1:1 в чистом виде в Рсубд не бывает.
эта связь реализуется в виде 1:0...1 и можно еще опционально добавить триггер на таблицу, где 0..1, чтобы он запрещал удалять запись.


остальные части правил естественно реализуются в виде констрейнтов: два уникальных и один внешний ключ.
2 янв 15, 19:48    [17081271]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать строгое отношение 1 к 1. Но как тогда вставлять данные если они строго зависим  [new]
wamaco
Member [заблокирован]

Откуда:
Сообщений: 678
Awaiter,

да не надо Вам две таблицы 1:1
обычно такое нужно, если Вы достигли ограничения по количеству полей в одной таблице.
либо под очень специфические задачи, и то, вопрос!
3 янв 15, 04:03    [17081964]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить