![]() |
|
Модераторы: Akina |
![]()
|
|
| Irdis |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 21.5.2008 Репутация: нет Всего: 1 |
Как реализовать отношение 1..0 к 1..0.
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
Это ты сейчас с кем разговаривал?
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Irdis |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 21.5.2008 Репутация: нет Всего: 1 |
Видимо плохой вопрос? Есть таблицы A и B. Хочется следующее, допустим в B есть FK a_id (который может быть и NULL). Надо сделать так, что бы любые две записи в таблице B имели различные a_id(ну или NULL). Т.е. по записи в A я мог достать не более одной записи в B. И по записи в B я мог достать не более одной записи в А. |
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: нет Всего: 54 |
Три таблицы: А (id_a), AB (id_a, id_b), B(id_b).
Два ограничения на внешние ключи: foreign key AB.id_a reference A.id_a, foreign key AB.id_b reference B.id_b. Два триггера срабатывающих при вставке или обновлении, которые проверяют наличие существующих значений/ Тогда запросы на выборку записей из таблицы B, которые соответстуют записи в таблице А, которе равно Х будут выглядеть так:
Аналогичный запрос для таблицы А будет выглядеть с точностью наоборот. -------------------- Слава Україні! |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 10 Всего: 161 |
накинуть ограничение уникальности на b.a_id
ЧЕРЕЗ ТРИГГЕРЫ КОНТРОЛИРОВАТЬ ОГРАНИЧЕНИЕ ЦЕЛОСТНОСТИ - МОЖНО ТОЛЬКО В ОДНОПОЛЬЗОВАТЕЛЬСКОЙ СРЕДЕ! Особенно на версионнике. ты представь как это дожно работать, при конкурентых инсертах/делетах в режиме изоляции read commited. За блокировочники не поручусь, там - свои ньюансы. Я их на вскидку не могу смоделировать, очень уж давно имел с ними дела. Добавлено через 11 минут и 39 секунд блин, проверил на MS SQL 2000, он nullы счиатает как заначения и проверяет по ним уникальность господа, прошу помочь мне сделать правильное заключение, какое из утверждений истинно: 1) Особенностью оракла является то, что ограничение уникальности по null не проверяется 1) Особенностью MS является то, что ограничение уникальности по null проверяется -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 10 Всего: 161 |
блин, почему я не посмотрел название форума? от чегото был уверен, что мы в форуме "составление запросов", и платформа не указана. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Gluttton |
|
||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: нет Всего: 54 |
Никогда не вникал (не было практической задачи) в блокировки и транзакции, но поскольку у меня сейчас стоит похожая задача в Firebird (а он версионник), то судя по всему пришло время. А как тогда быть?
Не совсем понял. -------------------- Слава Україні! |
||||
|
|||||
| Zloxa |
|
||||||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 10 Всего: 161 |
MS:
оракля:
PG:
А как оно на FB, My? Кто является исключением? -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||||
|
|||||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
Это описано в документации на MS SQL. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: нет Всего: 54 |
Firebird:
-------------------- Слава Україні! |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 10 Всего: 161 |
Искуственно раскидывать блокировки,избавляясь от конкурентности сериализуя транзакции, пытаясь избегать дедлоков. В общем весьма не тривиальная и не всегда в полной мере реализуемая задача. я в том нисколько не сомневаюсь. мне было интересно насколько такая практика общепринята и чья реализации скорее исключение из правила - ораклиная или ж MSSql'ная. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Gluttton |
|
||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: нет Всего: 54 |
Zloxa, т.е. я так понимаю, что разработчики разных СУБД писали проверку по разному, одни так:
А другие вот так:
Это сообщение отредактировал(а) Gluttton - 27.9.2010, 12:14 -------------------- Слава Україні! |
||||
|
|||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
По классике сравнение с null ВСЕГДА даёт false... Добавлено через 4 минуты и 46 секунд
Видимо, надо выяснять, как к этому делу относится SQL92 =) -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 10 Всего: 161 |
если быть чуть точнее - то unknown, либо же компромиссное "не истина". потому как если мы сделаем чек констрейнт, который, как известно, срабатывает по false, он тоже не сработает на сравнении с null и, мне кажется, Gluttton, понимая это, очень даже изящно пошутил Я думаю тут ноги растут от того, что в ранних версиях sql сервера, Null трактовался совсем не по ансишному и троичная логика не была в нем реализована. Некросы это вроде как объясняли тем, что они прорелизились раньше стандарта. Рудименты этого решения, для обратной совместимости, тянутся и ныне. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: нет Всего: 54 |
Вот это да
Угу -------------------- Слава Україні! |
|||
|
||||
![]()
|
| Правила форума "MS SQL" | |
|
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS SQL Server | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |