2010-06-28 5 views
9

Я видел пару тем о том, что каждый делал сейчас, днями в отношении подписанных значений vs unsigned key. Казалось бы, unsigned является оптимальным, так как он позволяет в два раза больше строк для одной и той же стоимости. Есть ли преимущества с подписанными ключами?Консенсус? MySQL, Signed VS Unsigned Primary/Foreign Keys

Есть ли какой-либо стандартный консенсус? Кажется, что это подписанный ответ, так как «это всегда было так»

ответ

8

Я предпочитаю устанавливать свои столбцы как unsigned, если они не могут быть отрицательными. Помимо упомянутого множителя, он также делает его более понятным при чтении определения таблицы.

-2

Подписанный 32-битный int может представлять более 2 миллиардов номеров, поэтому я подозреваю, что проблема важна для большинства людей. Тем не менее, я часто использую отрицательные числа, когда хочу указать, что запись целенаправленно осиротела.

+2

GAHH! Извините, я работаю с приложением, где кто-то (уже не с компанией) думал, что это будет хорошей идеей. Буквально, по крайней мере раз в неделю, мы находим какую-то проблему (либо вызов с новым кодом, либо ошибка в существующем коде), вызванный этим безумным дизайнерским решением. ** Вы не должны указывать первичные ключи, отличные от значения ключа, и никогда не следует изменять значения первичного ключа **. Если вы хотите указать soft-delete, введите столбец статуса или столбец softDeleted. Поскольку это было в фундаментальной части программного обеспечения, мы только сейчас фиксируем его, как часть основного переписывания. – gregmac

+0

@gregmac s'OK, я знал, что это будет спорным. Совершенно иронично, лучшее слово, что «сирота» было бы «экзистенциальным». Это был иронический выбор терминов, так как я придумал схему, чтобы представлять людей, которых я знал только, должен существовать. Мое приложение позволяет пользователю сказать, что Боб и Чарли являются братьями, но внутри них хранятся записи, чьи родительские (-ы) столбцы ссылаются на записи с отрицательными ключами. Если бы кто-то добавил Джейн как матушку Боба, я мог бы также обновить Чарли. Обычно я использую шаблон, когда хочу сказать, что существует нечто, что должно быть рядом. –

+2

Кроме того, я очень хорошо знаком с доктриной, что первичные ключи не должны иметь значения. Лучше понять, что смысл должен быть инкапсулирован. PK не должны означать ничего для прикладного уровня, но они действительно означают вещи в самой базе данных (системе управления). В описанной выше схеме я просто использую ПК как метаданные. Кстати, я обсуждал это здесь раньше: http://stackoverflow.com/questions/2023988/modeling-existential-facts-in-a-relational-database –