Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
В именно IB/FB не спец, потому обращаюсь к специалистам. Объект - таблица, хранящая некий справочник. В структуре есть поле (допустим, логическое), содержащее признак действительности. И некое поле (допустим, варчар), которое требует уникальности, но только для той части записей, которые действительны. Иными словами - в выборке Код: sql 1. 2. 3. значения должны быть уникальны, в то время как значение поля field вообще (безотносительно к valid) может быть неуникальным. Третьими словами - может существовать сколько угодно записей с одним и тем же field и valid = FALSE плюс одна или ни одной записи с тем же field и valid = TRUE. Допускает ли синтаксис IB/FB написание такого CONSTRAINT? Если да - как именно будет выглядеть соотв. CREATE? И уж совсем хорошо - какая минимальная версия сервера требуется для такого синтаксиса? PS. К сожалению, деление справочника на части и построение объединяющей вьюшки не проходит - над БД имеется приложение с закрытым кодом, а получающийся вьюв - необновляемый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 10:05 |
|
||
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
Akinaполучающийся вьюв - необновляемый.В файрберде вьюхи обновлямые (если написать соответствующие триггеры) см. доку http://www.firebirdsql.org/refdocs/langrefupd25-ddl-view.html Akinaзначения должны быть уникальны, в то время как значение поля field вообще (безотносительно к valid) может быть неуникальным.например делаешь char поле допускающее нуллы (назовем его constreint_field), где не нулл значение строго один символ заранее заданный - это условно true, нулл, соответственно, false. Далее строишь композитный уникальный индекс по выражению (пусть поле для которого требуется ограничение это need_uniq_field ): constreint_field || need_uniq_field ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 11:17 |
|
||
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
AkinaИ уж совсем хорошо - какая минимальная версия сервера требуется для такого синтаксиса?Лучше брать поддерживаемые. в старых куча ограничений на длину варчара по которому индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 11:19 |
|
||
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
Akinaделение справочника на части и построение объединяющей вьюшки не проходит - над БД имеется приложение с закрытым кодом, а получающийся вьюв - необновляемый. Как тебе уже сказали, это не так. Но если очень уж приспичило - создай уникальный вычисляемый индекс по выражению CASE WHEN valid = TRUE THEN field END. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 11:35 |
|
||
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
И ещё один вариант: valid: integer, где 0 - элемент действителен, а любое другое значение - недействителен. Уникальность по 2 полям field и valid. Для получения уникального недействительного значения использовать генератор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 12:31 |
|
||
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
Походу, меня не поняли до конца. Меня интересует не решение иными средствами, а именно существование синтаксической конструкции, позволяющеё задать именно такой констрейнт. Dimitry SibiryakovНо если очень уж приспичило - создай уникальный вычисляемый индекс по выражению CASE WHEN valid = TRUE THEN field END. Вот это уже похоже на правду. Допустим, мне нужно создать уникальный индекс по выражению CASE WHEN valid = TRUE THEN field ELSE CONCAT(ID+field) END (такое выражение обеспечит требуемый функционал - значение поля field гарантированно начинается буквой, а ID - первичный индекс). Если я верно понимаю то, что написано в доках, то это будет выглядеть как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Верна ли эта синтаксическая конструкция? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 13:33 |
|
||
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
1. Akina CAST(id AS CHAR) скорее всего быстро переполнение вызовет надо CAST(id AS CHAR(18)) ставить. 2. Тип BOOLEAN есть только начиная с Firebird 3 А так вроде похоже на правду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 13:38 |
|
||
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
AkinaPS. К сожалению, деление справочника на части и построение объединяющей вьюшки не проходит - над БД имеется приложение с закрытым кодом, а получающийся вьюв - необновляемый. С помощью триггеров вьюха легко может стать обновляемой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 13:41 |
|
||
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
Симонов Денисвьюха легко может стать обновляемой.Слишком много сопутствующих сложностей. Слишком массивное вмешательство в структуру. Хрен знает, упущу чего, потом будет щастье - оно мне надо? А вот замена уникального индекса на обычный плюс вот такой хитрозадый уник гораздо менее болезненна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 13:48 |
|
||
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
AkinaДопустим, мне нужно создать уникальный индекс по выражению CASE WHEN valid = TRUE THEN field ELSE CONCAT(ID+field) END (такое выражение обеспечит требуемый функционал - значение поля field гарантированно начинается буквой, а ID - первичный индекс). Нахрена там ELSE часть? Без неё требуемый функционал обеспечится ничуть не хуже. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 14:07 |
|
||
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНахрена там ELSE часть?Шоб "слоники бегали". Зачем вообще case если простая склейка пары полей смотиртся куда проще и читаемей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 14:33 |
|
||
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНахрена там ELSE часть? Без неё требуемый функционал обеспечится ничуть не хуже. Мне неизвестно, что вернёт этот CASE для valid=false (NULL?) и как отнесётся к повтору такого значения уникальный индекс. А рыть доки по вопросу, который в следующий раз мне понадобится хрен знает когда, немного лениво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 14:38 |
|
||
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
Akina, уникальный индекс допускает дубликаты NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 14:41 |
|
||
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
пачка нуллов под уникальным индексом живет запросто. т.к NULL != NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 14:48 |
|
||
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
Ivan_PisarevskyЗачем вообще case если простая склейка пары полей смотиртся куда проще и читаемей? Во-первых, она будет работать только если флаг валидности для невалидных записей NULL. В противном случае она не позволит множества одинаковых невалидных значений. Во-вторых, пойдёт преобразование к строке, что, в зависимости от типа поля данных, может ухудшить характеристики индекса. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 14:49 |
|
||
|
Допускает ли синтаксис языка такое ограничение?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВо-первых, она будет работать только если флаг валидности для невалидных записей NULL. В противном случае она не позволит множества одинаковых невалидных значений. Во-вторых, пойдёт преобразование к строке, что, в зависимости от типа поля данных, может ухудшить характеристики индекса.Не пойму о чем спор, обы условия выполнены: Akinaнекое поле (допустим, варчар), которое требует уникальности Ivan_Pisarevskyделаешь char поле допускающее нуллы (назовем его constreint_field), где не нулл значение строго один символ заранее заданный - это условно true, нулл, соответственно, false. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2015, 15:02 |
|
||
|
|

start [/forum/topic.php?fid=40&fpage=78&tid=1562902]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 162ms |

| 0 / 0 |
