Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
guest_guest
Guest |
Добрый день! Можно ли стандартными средствами органиовать хранение в одном поле значение ключа нескольких таблиц с ограничением целостности или это только все триггерами организовывать? |
5 окт 10, 11:00 [9553009] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
можно сделать, чтобы так выглядело. несколько полей + CHECK + VIEW но работать ИМХО будет не самым эффективным способом |
5 окт 10, 11:08 [9553059] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
![]() Может, пример нарисуете? |
||
5 окт 10, 12:13 [9553746] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
в таблице несколько NULL полей с форинами на свои таблицы CHECK, который обеспечивает заполнение только одного из них представление, которое показывает одно не нуловое поле ну и, скорее всего, триггер, который решает, куда писать значения при вставке / изменении технически будет почти то, что просили, но может только триггер и проще |
5 окт 10, 12:17 [9553805] Ответить | Цитировать Сообщить модератору |
WarAnt Member Откуда: Питер Сообщений: 2423 |
guest_guest, Если я правильно понял то в поле находится id ссылающееся в разных строках на разные таблицы, тогда должно быть еще одно поле в котором указано какого типа этот id, если всё так то триггер делайте и в нем описывайте все проверки в зависимости от типа связи |
5 окт 10, 12:26 [9553911] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
Получится так: одна таблица-множество справочников с дополнительным полем "Тип справочника". Ссылка на неё получится из двух ключевых полей - (Тип)+(ID этого типа) Понятно, что в такой таблице-множестве справочников надо предусмотреть кучу полей для хранения разнородной информации, характерной для разных справочников. У нас много-много лет работает нечто подобное, хоть и ненормально это с точки зрения реляционной БД (получается, что несколько сущностей находятся в одной таблице) |
||
5 окт 10, 12:36 [9553994] Ответить | Цитировать Сообщить модератору |
guest_guest
Guest |
Да совершенно верно, однно поле ссылается на разные таблицы. Тоже сразу мысль про триггеры, но думал может что стандарное есть |
||
5 окт 10, 14:07 [9555059] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
В тех таблицах ПК (или АК) тоже из 2-х полей и чек-констрейн с дефаулт-констрейном на тип. |
||
5 окт 10, 16:02 [9556342] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
Lithium Member Откуда: Волгодонск Сообщений: 28 |
А если таких полей в таблице требуется несколько или даже много? Тогда количество полей нужно удвоить. Есть ещё вариант, чтобы в одно текстовое поле записывать тип и значение ссылки, а потом его парсить. Триггеры - тоже плохо, т.к. делать их придётся на каждую таблицу, на которую может быть такая ссылка. Есть вариант - удаление записей производить не стандартным delete from, а специальной процедурой, которая будет написана однажды. И требование, чтобы ключи записей были недоступными для update. Подобная схема у меня реализована и давно уже работает. Но мне не нравится. Надеюсь, MS SQL Server когда-нибудь добавит родную поддержку такой возможности. |
17 сен 13, 12:05 [14848471] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |