Действительно ли внешний ключ может сослаться на групповой индекс?

Слова «криптография» и «навсегда» не сочетаются друг с другом. Шифрование, используемое в современных подписях GPG, в конечном итоге не будет достаточно сильным, чтобы что-либо проверить. (Будет использован недостаток алгоритма, или технология изменится так, что обратный процесс просто больше не является вычислительно запретительным, иначе произойдет что-то еще.)

Но в рамках вашего вопроса потеря вашего личного ключа не будет причиной, по которой существующие подписи станут не поддающимися проверке. «потерять», вы имеете в виду «оставить там, где он больше не является секретным».) Проверка подписи не требует использования закрытого ключа - если это произойдет, никто не сможет этого сделать, поскольку закрытый ключ является закрытым. Или, иначе говоря, если я использую ваш открытый ключ для проверки вашей подписи на каком-либо произведении, у меня нет никакого способа или причины узнать или поинтересоваться, где (или если) у вас есть копия закрытого ключа.

Это будет означать, что вы больше не можете подписывать что-то новое с этим ключом, и ваше решение «я просто создам новую пару ключей» будет чем-то неприятным для любого, кто хочет подтвердить ваше авторство ( с тех пор они должны иметь два открытых ключа и иметь возможность применять правильный к нужной работе.) Поэтому, возможно, пока вы выполняете резервное копирование, резервное копирование секретного ключа также выполняется безопасным способом.

39
задан Bill Karwin 28 June 2011 в 17:52
поделиться

6 ответов

Если вы делаете это для обучения, то определенно Scheme с SICP . Это будет тяжело и обидно и взорвет ваш разум, если у вас нет опыта с этим, но вы научитесь многому.

Если вы хотите использовать функциональное программирование на практике, то стоит посмотреть на F #, Scala и Clojure.

-121--2180553-

Обычно Эрланг примерно в 4-5 раз медленнее, чем делает то же самое в C, хотя то, что он теряет в скорости, повышает эффективность, простоту и стабильность. Делая вещи, которые Эрланг превосходит в, я думаю, что это лежит около 2-3 раз C. Это также может быть скомпилировано в собственные двоичные файлы, чтобы ускорить его примерно на 20% больше.

Просто знайте, что есть куча обычных вещей, в которых Эрланг не хорош, таких как манипулирование последовательностями и хруст чисел. Эрланг был сделан для распространения (в большинстве чувств слова), так что это то, в чем он потрясающе.

О, и о великолепной производительности на одной машине: не более половины того, что было бы у приложения C. Но опять же, это все-таки, вероятно, в 30-40 раз быстрее, чем эквивалент в рубине, фп или питоне.

-121--3181275-

Из документации MySQL :

InnoDB позволяет использовать ограничение внешнего ключа для ссылки на неуникальный ключ. Это расширение InnoDB для стандартного SQL.

Однако существует практическая причина избегать внешних ключей в неуникальных столбцах ссылочной таблицы. То есть какой должна быть семантика «ON DELETE CASCADE» в этом случае?

В документации далее советуется :

Обработка внешних ссылок на неуникальные ключи или ключи, которые содержат значения NULL, не определена (...) Рекомендуется использовать внешние ключи, ссылающиеся только на ключи UNIQUE (включая PRIMARY) и NOT NULL.

44
ответ дан 27 November 2019 в 02:44
поделиться

Ваш анализ корректен; ключи не должны быть уникальными, и ограничения будут действовать на съемочной площадке соответствия строкам. Не обычно полезное поведение, но ситуации может подойти, где это - то, что Вы хотите.

7
ответ дан chaos 27 November 2019 в 02:44
поделиться

Да, можно создать внешние ключи к в основном любому столбцу (столбцам) в любой таблице. Большинство раз Вы создадите их к первичному ключу, все же.

при использовании внешних ключей, которые не указывают на первичный ключ, Вы могли бы также хотеть создать (групповой) индекс к столбцу (столбцам), ссылаемому ради производительности.

Зависит от RDBMS, который Вы используете. Я думаю, что некоторые делают это для Вас неявно или используют некоторые другие приемы. RTM.

3
ответ дан Evan 27 November 2019 в 02:44
поделиться

Когда это происходит, это обычно означает, что два внешних ключа связываются друг с другом. Часто таблица, которая содержала бы ключ как первичный ключ, не находится даже в схеме.

Пример: Две таблицы, КОЛЛЕДЖИ и СТУДЕНТЫ, оба содержат столбец под названием ИНДЕКС.

, Если мы делаем быструю проверку по телефону

SELECT * FROM COLLEGES JOIN STUDENTS ON COLLEGES.ZIPCODE = STUDENTS.ZIPCODE

, Мы могли бы обнаружить, что отношения - многие многим. Если бы наша схема имела таблицу под названием ИНДЕКСЫ с ИНДЕКСОМ первичного ключа, то было бы очевидно, что действительно продолжается.

, Но наша схема не имеет такой таблицы. Просто, потому что наша схема не имеет такой таблицы, не означает, что такие данные не существуют, как бы то ни было. где-нибудь, на земле USPO, существует только такая таблица. И и COLLEGES.ZIPCODE и STUDENTS.ZIPCODE являются ссылками на ту таблицу, даже если мы не подтверждаем это.

Это больше имеет отношение к философии данных, чем практика создания баз данных, но это аккуратно иллюстрирует что-то фундаментальное: данные имеют характеристики, которые мы обнаруживаем, и не только характеристики, которые мы изобретаем. Конечно, то, что мы обнаруживаем, могло быть тем, что кто-то еще изобрел. Это, конечно, имеет место с ИНДЕКСОМ.

3
ответ дан Fahim Parkar 27 November 2019 в 02:44
поделиться

PostgreSQL также отказывается от этого (так или иначе, даже если это возможно , это не означает, что это - хорошая идея):

essais=> CREATE TABLE Cities (name TEXT, country TEXT);
CREATE TABLE
essais=> INSERT INTO Cities VALUES ('Syracuse', 'USA');
INSERT 0 1
essais=> INSERT INTO Cities VALUES ('Syracuse', 'Greece');
INSERT 0 1
essais=> INSERT INTO Cities VALUES ('Paris', 'France');
INSERT 0 1
essais=> INSERT INTO Cities VALUES ('Aramits', 'France');
INSERT 0 1
essais=> INSERT INTO Cities VALUES ('Paris', 'USA');
INSERT 0 1

essais=> CREATE TABLE People (name TEXT, city TEXT REFERENCES Cities(name));
ERROR:  there is no unique constraint matching given keys for referenced table "cities"
1
ответ дан bortzmeyer 27 November 2019 в 02:44
поделиться

О какой базе данных мы говорим? В SQL 2005 я не могу создать ограничение внешнего ключа, которое ссылается на столбец, который не имеет ограничения на уникальность данных (первичный ключ или иначе).

create table t1
(
  id int identity,
  fk int
);

create table t2
(
  id int identity,
);

CREATE NONCLUSTERED INDEX [IX_t2] ON [t2] 
(
    [id] ASC
);
ALTER TABLE t1 with NOCHECK
ADD CONSTRAINT FK_t2 FOREIGN KEY (fk)
    REFERENCES t2 (id) ;


Msg 1776, Level 16, State 0, Line 1
There are no primary or candidate keys in the referenced table 't2' 
that match the referencing column list in the foreign key 'FK_t2'.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.

, Если бы Вы могли бы на самом деле сделать это, у Вас эффективно были бы many-many отношения, которые не возможны без промежуточной таблицы. Я действительно интересовался бы слушанием больше об этом...

См. этот связанный вопрос и ответы также.

0
ответ дан Community 27 November 2019 в 02:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: