Есть ли недостатки в начале столбца ID таблицы с 0? - PullRequest
1 голос
/ 06 октября 2011

user_drug.user_id ограничен внешним ключом drug.id (который является первичным ключом).

Структура таблицы следующая:

user
id    name  income
1     Foo   10000
2     Bar   20000
3     Baz   30000

drug
id    name
0     Marijuana
1     Cocaine
2     Heroin

user_drug
user_id drug_id
1       1
1       2
2       1       
2       3
3       3

Есть ли недостатки при запуске drug.id с 0? У меня есть ощущение, что это сделает вещи более естественными с PHP, так как массивы также начинаются с 0, но я хочу убедиться, что нет никаких недостатков с использованием «0» для идентификатора (например, это может быть интерпретировано как ноль или некоторые другое странное потенциальное возникновение / конфликт).

Ответы [ 4 ]

4 голосов
/ 06 октября 2011

Если это столбец AUTO INCREMENT, ноль - это специальное значение , которое не должно использоваться, но это может быть преодолен . Если это внешний ключ и не AUTO INCREMENT, любое значение в порядке. Ноль не будет интерпретироваться как что-либо отличное от нуля, если определение столбца является правильным (нулевые значения отображаются как NULL, что отличается от нуля)

2 голосов
/ 06 октября 2011

Все должно быть в порядке, если это не автоматическое увеличение, но я бы не стал его использовать. 0 - это значение по умолчанию, используемое MySQL, когда столбец не может быть NULL (а это столбец INT).

0 голосов
/ 06 октября 2011

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

Предположим, что кто-то ищет идентификатор, тогда вы делаете intval($_GET['name']) на значение (чтобы убедиться, что вы не получили SQL-инъекцию).

Если допустимо, чтобы значение было 0, вы не сможете различить «пропущенную» пустую строку AKA ифактическое 0. Очевидно, что вы можете обойти это: вы можете проверить пустую строку или использовать -1, чтобы указать отсутствие.

Но использовать 0 проще.

Лично яЯ использовал -1, чтобы указать на отсутствие (и разрешить 0), но так как MySQL всегда по умолчанию начинается с 1, я начал немного лениться и просто принять это.

0 голосов
/ 06 октября 2011

Я не думаю, что есть какие-либо недостатки, но вам нужно убедиться, что при проверке идентификатора 0 не интерпретируется как ложное.

...