Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите создать индекс / 14 сообщений из 14, страница 1 из 1
11.03.2014, 16:25:31
    #38583115
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать индекс
Есть справочник значений. В нем для каждого параметра лишь одна запись должна иметь by_default= true остальные должны быть false

param_values
---------------
id int PK,
param_id int FK,
by_default boolean,
value decimal

Помогите составить индекс
...
Рейтинг: 0 / 0
11.03.2014, 17:01:44
    #38583169
Помогите создать индекс
sp,

Код: sql
1.
2.
3.
4.
5.
CREATE UNIQUE INDEX uidx_param_values_param_id_by_default
  ON param_values
  USING btree
  (param_id, by_default)
  WHERE by_default = TRUE;
...
Рейтинг: 0 / 0
11.03.2014, 17:10:41
    #38583188
/\/\/\/\/\/\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать индекс
spПомогите составить индекс

Вам точно нужен именно индекс? Может быть все же ограничение (constraint)?
...
Рейтинг: 0 / 0
11.03.2014, 17:27:42
    #38583212
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать индекс
/\/\/\/\/\/\,

можно и ограничение
...
Рейтинг: 0 / 0
11.03.2014, 17:28:32
    #38583213
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать индекс
Просто Нафаня,

этот индекс не ограничивает создание нескольких записей с by_default=true для одного param_id
...
Рейтинг: 0 / 0
11.03.2014, 17:34:11
    #38583222
/\/\/\/\/\/\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать индекс
sp,

Или даже два.

Проверяем, что только один параметр имеет значение by_default равное TRUE.
Код: sql
1.
2.
ALTER TABLE param_values ADD
  CONSTRAINT uk_param_values_param_id_by_default UNIQUE (param_id, CASE WHEN by_default THEN TRUE ELSE NULL END);



(Теперь еще нужно гарантировать, что для одного параметра только уникальные значения. Это другое органичение)
...
Рейтинг: 0 / 0
11.03.2014, 17:38:04
    #38583229
/\/\/\/\/\/\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать индекс
spэтот индекс не ограничивает создание нескольких записей с by_default=true для одного param_id

А что он тогда делает?

(Хотя да, можно и короче: ... ON param_values (param_id) WHERE by_default = TRUE... )
...
Рейтинг: 0 / 0
11.03.2014, 17:57:06
    #38583246
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать индекс
/\/\/\/\/\/\,

создает индекс по условию - т.е. этот индекс будет применяться когда в запросе будет фигурировать param_id И by_default=true
...
Рейтинг: 0 / 0
11.03.2014, 18:18:36
    #38583260
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать индекс
/\/\/\/\/\/\sp,

Или даже два.

Проверяем, что только один параметр имеет значение by_default равное TRUE.
Код: sql
1.
2.
ALTER TABLE param_values ADD
  CONSTRAINT uk_param_values_param_id_by_default UNIQUE (param_id, CASE WHEN by_default THEN TRUE ELSE NULL END);



(Теперь еще нужно гарантировать, что для одного параметра только уникальные значения. Это другое органичение)

выдает ошибку на CASE
...
Рейтинг: 0 / 0
11.03.2014, 18:51:45
    #38583291
/\/\/\/\/\/\/\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать индекс
sp/\/\/\/\/\/\,

создает индекс по условию - т.е. этот индекс будет применяться когда в запросе будет фигурировать param_id И by_default=true

Что не соответствует Вашему условию? Вам нужно что-то другое?

По второму пункту: продумайте, как написать CASE правильно (думаю, нужно указать WHEN by_default = TRUE) или воспользуйтесь другой функцией (например, NULLIF)
...
Рейтинг: 0 / 0
11.03.2014, 19:01:56
    #38583299
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать индекс
Просто Нафаня,

прошу прощения - был неправ)
...
Рейтинг: 0 / 0
11.03.2014, 19:02:18
    #38583300
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать индекс
/\/\/\/\/\/\/\,

вопрос решен, спасибо
...
Рейтинг: 0 / 0
11.03.2014, 23:54:08
    #38583446
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать индекс
...
Рейтинг: 0 / 0
12.03.2014, 04:38:44
    #38583486
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать индекс
LeXa NalBat,

спасибо, разобрался
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите создать индекс / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]