powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как избежать дублирования?
15 сообщений из 15, страница 1 из 1
Как избежать дублирования?
    #39075671
Alexey Poryadin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Есть таблица Object(id int, name varchar(50))

Как избежать дублирования данных в поле name?

Если поставить уникальность на поле name, то все равно можно записать:

стол
Стол

и для файрберда это будут разные не уникальные значения.

Я добавляю в таблицу поле upp_name и в триггерах, на добавление и изменение заполняю это значение new.upp_name = upper(new.name).

Верно ли это или есть другой путь?

Спасибо.
...
Рейтинг: 0 / 0
Как избежать дублирования?
    #39075681
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Poryadin,

ставь нечувствительный коллейт, если возможно
...
Рейтинг: 0 / 0
Как избежать дублирования?
    #39075684
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey PoryadinВерно ли это или есть другой путь?
Case-insencitive collation спасёт ОРД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как избежать дублирования?
    #39075732
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Poryadin,

никак. контроль качества данных - это по большей части не вопрос СУБД.
Например, "стол" и "Стол" можно исключить и тиггером, и коллэйтом.
А вот "стoл" исключить получится разрешением вводить только русские буквы (тут буква "o" - латинская).
Еще вводят 0 вместо нуля, переставляют слова в наименовании ("стул деревянный" и "деревянный стул"), и так далее.
В учетных системах это известный геморрой, и решение этого вопроса прямого отношения к Firebird не имеет.
...
Рейтинг: 0 / 0
Как избежать дублирования?
    #39075865
Alexey Poryadin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
...
Рейтинг: 0 / 0
Как избежать дублирования?
    #39075917
shaposh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"Я добавляю в таблицу поле upp_name и в триггерах, на добавление и изменение заполняю это значение new.upp_name = upper(new.name)".........


Тогда проще создать уникальный индекс по выражению Upper(name)
...
Рейтинг: 0 / 0
Как избежать дублирования?
    #39076179
Alexey Poryadin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shaposh,

IBExpert говорит, что индекс
Код: sql
1.
2.
3.
ALTER TABLE TEST_OBJECTS
ADD CONSTRAINT UNQ1_TEST_OBJECTS
UNIQUE (Upper(NAME))



создать нельзя, т.к.
Код: sql
1.
2.
Token unknown - line 3, column 9.
Upper.
...
Рейтинг: 0 / 0
Как избежать дублирования?
    #39076504
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а гугл ничего не говорит ? ;-)
...
Рейтинг: 0 / 0
Как избежать дублирования?
    #39076520
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Poryadin,

индекс можно, констрейн нельзя
...
Рейтинг: 0 / 0
Как избежать дублирования?
    #39077183
Alexey Poryadin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
CREATE UNIQUE INDEX IX_UPPNAME ON TEST_OBJECTS COMPUTED BY (upper(name));


Так сработало, спасибо.
...
Рейтинг: 0 / 0
Как избежать дублирования?
    #39077190
Alexey Poryadin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему это не констрейнт? Если по факту - это он самый?
...
Рейтинг: 0 / 0
Как избежать дублирования?
    #39077207
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Poryadin,

про скорость это твои фантазии. А не работает потому что поля в таблице такого нету. Ограничение уникальности может использоваться как ключ родительской таблицы в ограничении Foreign Key. Для выражения такую связь сделать нельзя.
...
Рейтинг: 0 / 0
Как избежать дублирования?
    #39077237
Alexey Poryadin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Дениспро скорость это твои фантазии. А не работает потому что поля в таблице такого нету.
Это кому и про что? Я вроде про скорость не фантазировал и с именем поля не ошибся.

За уточнение, что ограничение на уникальность может участвовать в Foreign Key, спасибо.
...
Рейтинг: 0 / 0
Как избежать дублирования?
    #39077244
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Poryadin,

извини. По невнимательности прочитал "он самый быстрый". Сплю ещё видимо.

Уникальный индекс <> Ограничению уникальности. Хотя уникальный индекс используется для обеспечения ограничения уникальности.
...
Рейтинг: 0 / 0
Как избежать дублирования?
    #39077260
Alexey Poryadin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

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


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