使用0启动表的ID列有什么缺点吗?

时间:2011-10-06 09:56:59

标签: php mysql database database-design foreign-keys

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

从0开始drug.id是否有任何缺点?我有一种感觉,这将使PHP更自然,因为数组也从0开始,但我想确保使用'0'作为id没有任何缺点(例如,它可能被解释为null或某些其他奇怪的潜在事件/冲突)。

4 个答案:

答案 0 :(得分:4)

如果它是一个AUTO INCREMENT col,则零是special value,不应该使用,但这可以是overcome。如果是外键和非AUTO INCREMENT,任何值都可以。如果列定义正确,则零不会被解释为零以外的任何值(空值显示为NULL,与零不同)

答案 1 :(得分:2)

如果那不是自动增量应该没问题,但我不会使用它。 0是当列不能为NULL(并且它是INT列)时MySQL使用的defaut值。

答案 2 :(得分:0)

我认为没有任何缺点,但您需要确保检查0未被解释为false的ID。

答案 3 :(得分:-1)

它不会让事情更自然,因为它是任意的,你的代码不应该关心ID是什么(即你从来没有看到它)。

假设某人正在搜索id,然后对该值执行intval($_GET['name'])(以确保您没有获得SQL注入)。

如果值为0是合法的,您将无法区分“缺失”的AKA空白字符串和实际的0.显然您可以解决这个问题:您可以检查空白字符串,或者您可以使用-1表示缺失。

但使用0更容易。

就个人而言,我用-1表示缺失(并允许0),但由于MySQL总是默认以1开头,所以我开始有点懒,只是接受它。