Вы также можете использовать уникальный индекс:
CREATE UNIQUE INDEX Manager_IDX ON Manager (person);
Это также будет работать, если вы попытаетесь обновить имя человека на имя, которое уже существует.Также было бы полезно, если бы вы могли быстро запрашивать у таблицы имя человека.
Вы сказали, что хотите узнать о триггерах, один из способов начать это иметь триггер (фактически 3,вставьте, обновите и удалите триггер) в диспетчере, который автоматически ведет историю изменений (например, контрольный журнал) в другой таблице (например, manager_audit).Таблица аудита будет иметь то же определение, что и таблица Manager, но по крайней мере с одним дополнительным столбцом (например, кодом операции), который отслеживает, какая была операция.например, я для вставки, D для удаления, U для обновления.Вы также можете иметь временную метку для записи, когда произошла операция, и другие поля (например, идентификатор пользователя, который внес изменения и т. Д.).
Сказав все это и во что бы то ни стало, обеспечив уникальность таких вещей, какимя не может быть лучшей идеей.Вполне возможно, что «мистер Смит» может быть именем двух разных людей, которые работают в большой компании.
Еще один фактор, который вы можете рассмотреть, - это производительность.Если вы используете метод выбора на основе, чтобы обеспечить уникальность столбцов / столбцов, не относящихся к индексу, вам потребуется «сканирование всех строк» таблицы для выполнения этого теста.Это будет верно независимо от того, как вы его реализуете (например, триггер, функция, процедура или что-то еще).
Другими словами, допустим, у вас есть 100 менеджеров, и вы хотите вставить нового.Проверка на основе выбора потребует, чтобы вы просмотрели всю таблицу (т.е. 100 строк), чтобы увидеть, существует ли имя уже.По мере роста таблицы сканирование также будет расти.Со временем вы столкнетесь с явлениями «ухудшенной производительности».Когда таблица достигает миллионов или миллиардов строк, ваша «вставка одной записи» фактически потребует миллиардов операций ввода-вывода.
Индексы не работают таким образом.Индексы - это, по сути, инвертированные вложенные таблицы, в которых назначенные вами столбцы (например, manager.person) являются «ключом».Таким образом, для выполнения необходимых проверок потребуется только один ввод / вывод - независимо от того, сколько записей в нем может быть.
отказ от ответственности для пуристов, я определяюВвод-вывод как логический ввод-вывод «на уровне записи», а не физический дисковый ввод-вывод или ввод-вывод любого другого типа.Таким образом, одна запись считывается = 1 ввод / вывод, одна запись записывается = 1 ввод / вывод.