Это должно быть самым быстрым для положительного целого показателя и десятичной основы:
// 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;
}
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!).
Нет.
Вы должны хранить их; базе данных всегда требуется что-то, что отличает строку от другой (какой-то «ключ»).
Если у вас есть что-то, что гарантированно уникально для каждой строки, вы можете использовать это как ключ; в противном случае сохраните первичный ключ и автоматически сгенерированный идентификатор.
Я лично оставлю их себе. Они будут особенно полезны позже, если вы расширите структуру базы данных и вам понадобится ссылка на эту таблицу.
Я, кажется, придерживаюсь мнения меньшинства здесь, получив как проголосовали , так и проголосовали против , и сейчас они равны 0 никто, по мнению большинства (см. ответы выше), похоже, не делает большим доводом в пользу сохранения поля id , а отрицательные голоса даже не удосужились оставить комментарии, намекающие, почему отказ от идентификатора таков плохая идея.
В их защиту, мой собственный исходный ответ не содержал каких-либо веских аргументов относительно того, почему в некоторых случаях можно отказаться от атрибута id (который, кажется, применим к OP). Может быть, такой беспричинный ответ сам по себе делает его отрицательным.
Пожалуйста, просветите меня и ОП, оставив комментарии за или против _systematic_ (и я подчеркиваю «систематический» ) необходимо включить автоматически увеличивающиеся несемантические первичные ключи во все таблицы. Я вернулся и добавил к своему ответу список причин, по которым [опять же, систематически] введение автоматически увеличивающегося PK может быть вредным.
Мой исходный ответ: Вы делаете ставку! их можно удалить!
Прежде чем что-либо делать с базой данных, убедитесь, что у вас есть резервная копия, в частности, если размер базы данных значительный.
Используйте оператор ALTER TABLE , чтобы удалить идентификатор в таблицах, где вы хотите удалить его. В частности
ИЗМЕНИТЬ ТАБЛИЦУ myTable DROP COLUMN id
(вам также необходимо удалить ограничение PK перед удалением идентификатора, если таблица имеет такое ограничение)
EDIT (Добавлено позже)
Во многих случаях просто не имеет смысла переносить вместе с автоматически увеличивающимся ID-ключом , независимо от относительно небольших требований к дополнительному хранилищу, которые добавляют эти ключи.
Во всех этих случаях основной вывод состоит в том, что
Ключ, поставляемый «изначально» в данных, не обязательно требует чтобы быть ключом одного столбца, он может быть составным ключом, хотя в этих случаях может возникнуть желание изучить ситуацию более внимательно, в частности, общий ключ немного длинен.
Вот некоторые из недостатков использования автоматически увеличивающегося первичного ключа вместо собственного ключа или ключа, предоставляемого приложением:
Подводя итог, Идея о том, что до тех пор, пока хранилище может нести [относительно минимальный] дополнительный «вес» искусственного первичного ключа, мы должны включать и использовать такой ключ, не лишена недостатков сама по себе.
И последнее соображение состоит в том, что точно так же, как такие ключи довольно легко удалить, когда они нам не нужны, их также можно легко добавить постфактум, когда / если станет очевидно, что они полезны в конкретной ситуации. Ни одна из форм рефакторинга (добавление или удаление автоматически увеличивающихся столбцов) не является безрисковой, но ни одна из них не является основной продукцией .
И последнее соображение заключается в том, что подобно тому, как довольно легко удалить такие ключи, когда они нам не нужны, их также можно легко добавить постфактум, когда / если станет очевидно, что они полезны в конкретном ситуация. Ни одна из форм рефакторинга (добавление или удаление автоматически увеличивающихся столбцов) не является безрисковой, но ни одна из них не является основной продукцией .
Последнее соображение заключается в том, что, подобно тому, как довольно легко удалить такие ключи, когда они нам не нужны, они также могут быть легко добавлены постфактум, когда / если станет очевидно, что они полезны в конкретном ситуация. Ни одна из форм рефакторинга (добавление или удаление автоматически увеличивающихся столбцов) не является безрисковой, но ни одна из них не является основной продукцией .