Проврека записи на уникальность

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
Дима
Сообщения: 5
Зарегистрирован: 22 фев 2006, 21:15

Проврека записи на уникальность

Сообщение Дима » 22 фев 2006, 23:15

Здравствуйте.
Вопрос возник следующий: где лучше проводить проверку записи на уникальность при вставке/редактировании, с клиента запросом или в тригере?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 23 фев 2006, 00:33

Ни там, ни там. Читай про Constraints.

Дима
Сообщения: 5
Зарегистрирован: 22 фев 2006, 21:15

Сообщение Дима » 23 фев 2006, 11:40

to Merlin
Почитал. Поправьте, если не прав: необходимо создавать уникальный индекс и отлавливать ошибку, чтоб пользователь не пугался чего-то типа "violation of PRIMARY or UNIQUE KEY".
А с тригерами и запросами при многопользовательском режиме хлопот не оберешься :oops:
Поспешил.

Дима
Сообщения: 5
Зарегистрирован: 22 фев 2006, 21:15

Сообщение Дима » 23 фев 2006, 14:33

И опять я.
А как же быть со строковыми полями, ползователь может ввести поле в другом регистре и constraint unique уже не поможет, ведь нелтзя так:
ADD CONSTRAINT UNQ1_IZDELIJA UNIQUE (Upper(NAME), ED_IZM_REF).
Тогда check? Но Ковязин не рекомендует брать данные для check из записей этой же таблицы.
Как же быть? :?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 25 фев 2006, 14:14

это уже называется "контроль качества данных", и к СУБД как такового отношения не имеет. То есть, у пользователей изощренная фантазия, менять О на 0 и наоборот, вводить буквы в разном регистре, и т.п. Так что нужно самостоятельно придумать комплекс мер, которые защитят вводимые данные.

причем, я тебе посоветую почитать книжки по проектированию БД.
пока замечу

1. Есть первичный ключ, а есть альтернативный. ПК - это primary key, альтернативный ключ - это unique.
2. Первичный ключ обычно это искуственный ключ (абстрактное число).
3. данные можно приводить при вставке к Upper. Не хочешь в конкретном столбце, значит в добавленном для хранения upper.

и т.д.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 26 фев 2006, 09:22

А еще есть русская буква "Эс" и аглицкая "Си" и стоят оне гады на одной кнопке клавиатуры :) Вобщем я делал по онченж эдита чтоб программа "линейкой по пальцам" юзеру давала, когда он начинает извращаться и пихать всяческие недопустимые символы куда не поподя. А уж серверу скармливается уже "чистенькое значение".

Ответить