Mysql автоматический инкрементный идентификатор первичного ключа

Это должно быть самым быстрым для положительного целого показателя и десятичной основы:

// From http://www.daimi.au.dk/~ivan/FastExpproject.pdf
// Left to Right Binary Exponentiation
public static decimal Pow(decimal x, uint y){
    decimal A = 1m;
    BitArray e = new BitArray(BitConverter.GetBytes(y));
    int t = e.Count;

    for (int i = t-1; i >= 0; --i) {
        A *= A;
        if (e[i] == true) {
            A *= x;
        }
    }
    return A;
}
6
задан APC 13 August 2010 в 09:45
поделиться

4 ответа

Unless you are running into space problems I wouldn't remove them.

They are a life saver in case you by mistake (or oversight) populate the database with repeated/wrong data.

They also help to have related tables, where you reference the content on one table through the autogenerated id.

This is assuming you have indexes for the other columns you use to actually query the data (if you don't, then more reason to keep the autoincrement ids and use them!).

9
ответ дан 8 December 2019 в 14:44
поделиться

Нет.

Вы должны хранить их; базе данных всегда требуется что-то, что отличает строку от другой (какой-то «ключ»).

Если у вас есть что-то, что гарантированно уникально для каждой строки, вы можете использовать это как ключ; в противном случае сохраните первичный ключ и автоматически сгенерированный идентификатор.

3
ответ дан 8 December 2019 в 14:44
поделиться

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

2
ответ дан 8 December 2019 в 14:44
поделиться

Интересно! ...

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

В их защиту, мой собственный исходный ответ не содержал каких-либо веских аргументов относительно того, почему в некоторых случаях можно отказаться от атрибута id (который, кажется, применим к OP). Может быть, такой беспричинный ответ сам по себе делает его отрицательным.

Пожалуйста, просветите меня и ОП, оставив комментарии за или против _systematic_ (и я подчеркиваю «систематический» ) необходимо включить автоматически увеличивающиеся несемантические первичные ключи во все таблицы. Я вернулся и добавил к своему ответу список причин, по которым [опять же, систематически] введение автоматически увеличивающегося PK может быть вредным.

Мой исходный ответ: Вы делаете ставку! их можно удалить!

Прежде чем что-либо делать с базой данных, убедитесь, что у вас есть резервная копия, в частности, если размер базы данных значительный.

Используйте оператор ALTER TABLE , чтобы удалить идентификатор в таблицах, где вы хотите удалить его. В частности
ИЗМЕНИТЬ ТАБЛИЦУ myTable DROP COLUMN id (вам также необходимо удалить ограничение PK перед удалением идентификатора, если таблица имеет такое ограничение)

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

  • либо сами данные предоставляют первичный ключ,
  • , либо приложение управляет генерацией ключа

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

Вот некоторые из недостатков использования автоматически увеличивающегося первичного ключа вместо собственного ключа или ключа, предоставляемого приложением:

  • Эффективная целостность данных может не проверяться
    то есть сервер может разрешить вставку записей обновлений, которые создают дублированный [собственный] ключ (хотя искусственный, автоинкрементный первичный ключ скрывает эту реальность)
  • Если полагаться на автоматически увеличивающийся PK для поддержки объединений между таблицами, когда часть из [собственных] ключевых значений необходимо обновить ...
    ... мы либо создаем необходимость полного удаления записи, либо повторно вставляем ее со значениями новостей,
    ... или риск сохранения устаревших / неправильных ссылок.
  • Обычным "последующим действием" с автоматически увеличивающимися ключами является создание кластеризованного индекса в таблице для этого ключа. Это имеет смысл для таблиц без собственного первичного ключа или первичного ключа, предоставляемого приложением, особенно для наборов данных с такими ключами. По сути, это предотвращает выбор ключа для кластеризованного индекса, который может быть более полезным для наиболее распространенных шаблонов запросов.
  • Перенос таблиц с автоматически увеличивающимся ключом может быть затруднен в зависимости от СУБД (необходимо объявить базовый столбец как простой целое число, перед копированием, затем необходимо снова запустить автоинкремент ...)
  • Для узких таблиц, то есть таблиц только с несколькими столбцами, относительная стоимость автоматически увеличивающегося PK может быть значительной и влиять на производительность при отсутствии незначительный способ.
  • При вставке новых записей вместе со связанными записями в связанных таблицах, автоматически увеличивающийся ключ должен быть получен после вставки основной записи, прежде чем могут быть вставлены связанные записи; логика проще, когда значения столбцов, поддерживающих ссылку, известны заранее.

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

И последнее соображение состоит в том, что точно так же, как такие ключи довольно легко удалить, когда они нам не нужны, их также можно легко добавить постфактум, когда / если станет очевидно, что они полезны в конкретной ситуации. Ни одна из форм рефакторинга (добавление или удаление автоматически увеличивающихся столбцов) не является безрисковой, но ни одна из них не является основной продукцией .

И последнее соображение заключается в том, что подобно тому, как довольно легко удалить такие ключи, когда они нам не нужны, их также можно легко добавить постфактум, когда / если станет очевидно, что они полезны в конкретном ситуация. Ни одна из форм рефакторинга (добавление или удаление автоматически увеличивающихся столбцов) не является безрисковой, но ни одна из них не является основной продукцией .

Последнее соображение заключается в том, что, подобно тому, как довольно легко удалить такие ключи, когда они нам не нужны, они также могут быть легко добавлены постфактум, когда / если станет очевидно, что они полезны в конкретном ситуация. Ни одна из форм рефакторинга (добавление или удаление автоматически увеличивающихся столбцов) не является безрисковой, но ни одна из них не является основной продукцией .

2
ответ дан 8 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

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