Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
TsHeloWorlder Member Откуда: Сообщений: 139 |
Есть такая таблица
Т.е. у FK=1 с 10.30 до 12.30 было имя Test1. Но с 15.30 это имя было отдано FK2. Нужно обеспечить, чтобы в одном периоде времени в одной группе не могло быть несколько сущностей (fk) с одинаковым именем.Как это обеспечить ? Вопрос посложнее. Можно ли это обеспечить через Entity Framework ? |
|||||||||||||||||||||
5 сен 17, 15:32 [20773187] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
TsHeloWorlder, написать дурацкую функцию для дурацкого констрйнта |
5 сен 17, 15:34 [20773204] Ответить | Цитировать Сообщить модератору |
waszkiewicz Member Откуда: Сообщений: 1089 |
TsHeloWorlder, "кто на ком стоял?" (c) |
5 сен 17, 15:38 [20773232] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8300 |
Entity Framework здесь каким боком? Это же клиент. |
5 сен 17, 15:40 [20773250] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20960 |
На показанных данных представим, что нужно добавить две записи, где FK=3 в 13:30 получает имя Test1, а в 14:30 меняет его на Test3. В указанном порядке добавить записи нельзя - описанный констрейнт не позволит иметь имя Test1 двум FK (2 и 3) после добавления первой записи, но до добавления второй, в то время как в обратном порядке записи добавятся без проблем. Вывод прост - ошибка проектирования. |
5 сен 17, 15:42 [20773265] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8300 |
TsHeloWorlder, создайте уникальный индекс по fk, name, groupid. |
5 сен 17, 15:43 [20773276] Ответить | Цитировать Сообщить модератору |
TsHeloWorlder Member Откуда: Сообщений: 139 |
но тогда это не позволит менять имя в течении дня же. |
||
5 сен 17, 15:53 [20773324] Ответить | Цитировать Сообщить модератору |
TsHeloWorlder Member Откуда: Сообщений: 139 |
Нет, все верно. При попытке добавить FK=3 с именем Test1 юзер увидит ошибку "такое имя уже есть". И поймет, что нужно сначала "освободить" имя Test1. Если же он не знает, что имя Test1 будет освобождено второй вставкой (например другим юзером) то у него самого должен возникнуть вопрос "как это у меня будет 2 предмета с одним именем ? Что-то не так, нужно разобратся", после чего узнает у коллег, что Test1 планируется освобождать и сделает это сам, либо подождет когда сделает коллега. В общем я не вижу проблемы. Юзеры не тупы, и сами поймут что к чему по этим ошибкам. Ибо им и самим очевидно, что не может быть 2 предмета с идентичным именем в одном отрезке времени. А программа же защитит их от глупых ошибок, которые сломают отчетную систему - им же от этого будет хуже, так, что такая защита для них и делается. |
||
5 сен 17, 16:00 [20773357] Ответить | Цитировать Сообщить модератору |
TsHeloWorlder Member Откуда: Сообщений: 139 |
Ну так, если Code First подход, то как-то же нужно это ограничение в базу пропихнуть - через EF. Чтобы все было сохранено в миграциях и воспроизводилось у других разработчиков (в их локальной БД). |
||
5 сен 17, 16:02 [20773368] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
Я такое делал в триггере. |
5 сен 17, 16:03 [20773371] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
поддержу, если нужна бизнес логика констрейна, то instead of trigger |
||
5 сен 17, 16:29 [20773451] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8300 |
Почему? Имя же входит. Уникальность не будет нарушена. |
||||
6 сен 17, 11:39 [20774977] Ответить | Цитировать Сообщить модератору |
dies irae Member Откуда: Сообщений: 78 |
только не instead of, а обычный триггер |
||
6 сен 17, 12:02 [20775102] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
сначало вставить, потом исправлять и откатывать? выйди из класса |
||||
6 сен 17, 12:03 [20775115] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20960 |
Весьма распространённое заблуждение. Не понимаю, почему используется именно хранение даты факта изменения, а не диапазона начало-конец для значения. Для открытой даты завершения при этом можно использовать дату в далёком будущем (скажем, максимально допустимое значение) либо специальное значение (например, Null). А клиентская часть при обнаружении интерференции может не только сообщить об этом, но и указать, с какой записью пересечение (это будет чуть проще, чем в текущей структуре), и даже выполнить по запросу оператора необходимую корректировку (скажем, закрытие интерферирующей записи с открытой датой) автоматически... |
||
6 сен 17, 12:33 [20775213] Ответить | Цитировать Сообщить модератору |
LSV Member [заблокирован] Откуда: Киев Сообщений: 30817 |
|
||
6 сен 17, 14:42 [20775756] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
|
||||
6 сен 17, 14:48 [20775792] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20960 |
Можно, я переформулирую? "Некоторые сущности требуют одной даты, некоторые - двух дат." А вот теперь скажи - почему структура данных не предусматривает нормального хранения ЛЮБОЙ из этих двух категорий. |
||
6 сен 17, 15:03 [20775847] Ответить | Цитировать Сообщить модератору |
LSV Member [заблокирован] Откуда: Киев Сообщений: 30817 |
У меня не было ситуации "неактуально". Поэтому обычно применяю одну дату. Но представляю ситуацию, когда нужны две, н-р срок действия договора. |
||
6 сен 17, 16:24 [20776103] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20960 |
|
||
6 сен 17, 20:40 [20776714] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
|
||||
6 сен 17, 22:35 [20776863] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
тотварища тошнит от идиотизма |
||||
7 сен 17, 09:21 [20777312] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3963 |
Entity Framework - зло, кроме того, оно не пишет запросы, оно не умное. |
|||||||||||||||||||||||
7 сен 17, 10:19 [20777523] Ответить | Цитировать Сообщить модератору |
dies irae Member Откуда: Сообщений: 78 |
сходи в школу для начала. откатов гораздо меньше, чем успешных вставок, а instead триггера кроме присущих им ограничений ещё и медленнее |
||||
7 сен 17, 10:30 [20777589] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
да откуда ж вы лезете то? |
||||
7 сен 17, 10:37 [20777630] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |