Из здесь и здесь : (после того, как я погуглил ваш заголовок)
- Альтернативный ключ - альтернативным ключом является любой ключ-кандидат, который не выбран в качестве первичного ключа
- Ключ-кандидат - Ключ-кандидат - это поле или комбинация полей, которые могут выступать в качестве поля первичного ключа для этой таблицы, чтобы однозначно идентифицировать каждую запись в этой таблице.
- Составной ключ - составной ключ (также называемый составным ключом или составным ключом) - это ключ, который состоит из 2 или более атрибутов.
- Первичный ключ - первичный ключ - это значение, которое можно использовать для идентификации уникальной строки в таблице. Атрибуты связаны с ним. Примерами первичных ключей являются номера социального страхования (связанные с конкретным человеком) или номера ISBN (связанные с конкретной книгой). В реляционной модели данных первичный ключ - это ключ-кандидат, выбранный в качестве основного метода уникальной идентификации кортежа в отношении.
- Суперключ - Суперключ определяется в реляционной модели как набор атрибутов переменной отношения (relvar), для которого он считает, что во всех отношениях, присвоенных этой переменной, нет двух разных кортежей (строк), имеющих одинаковые значения для атрибутов в этом наборе. Эквивалентно, суперключ также может быть определен как набор атрибутов relvar, от которого функционально зависят все атрибуты relvar.
- Внешний ключ - внешний ключ (FK) - это поле или группа полей в записи базы данных, которая указывает на ключевое поле или группу полей, образующих ключ другой записи базы данных в некоторой (обычно другой) таблице. Обычно внешний ключ в одной таблице относится к первичному ключу (PK) другой таблицы. Таким образом, ссылки могут быть сделаны, чтобы связать информацию вместе, и это является важной частью нормализации базы данных
Вы можете использовать with-local-quit
для определения if Cg
был нажат:
Отредактированное решение для проглатывания выхода, предложенное efunneko .
(defun my-c-g-test ()
"test catching control-g"
(interactive)
(let ((inhibit-quit t))
(unless (with-local-quit
(y-or-n-p "arg you gonna type C-g?")
t)
(progn
(message "you hit C-g")
(setq quit-flag nil)))))
Примечание: with-local-quit возвращает значение последнего выражения , или nil
, если нажата Cg
, поэтому обязательно возвращайте что-то отличное от nil, когда не нажата Cg
. Я нашел документацию elisp по выходу из полезной. Связанная с этим область - это нелокальные выходы и, в частности, размотка-защита
, которая применяется не только к выходу.
case-case
и unwind-protect
здесь полезны. condition-case
позволяет вам «перехватывать» «исключения», одна из которых - quit:
(condition-case
(while t) ; never terminates
(quit (message "C-g was pressed")))
Вы также можете перехватывать другие ошибки, такие как «error». Ну наконец то; он выполнит «формы тела», а затем «формы разматывания». Однако «формы размотки» выполняются независимо от того, успешно ли были выполнены «формы тела»:
(unwind-protect
(while t)
(message "Done with infinite loop"))
В вашем случае требуется размотка-защита
.