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或其他一些奇怪的潜在事件/冲突(。
如果是AUTO INCREMENT列,零是一个不应该使用的特殊值,但这是可以克服的。如果它是外键且不是AUTO INCREMENT,则任何值都可以。如果列定义正确(零值显示为null,与零不同(,则零将不会被解释为除零之外的任何其他值。
如果不是自动递增,应该没问题,但我不会使用它。0是MySQL在列不能为NULL时使用的默认值(它是INT列(。
我不认为有任何缺点,但如果您检查id,则需要确保0没有被解释为false。
它不会让事情变得更自然,因为它是任意的,您的代码不应该关心ID是什么(即您永远看不到它(。
假设有人正在搜索一个id,然后对该值执行intval($_GET['name'])
(以确保不会得到SQL注入(。
如果值为0是合法的,您将无法区分"丢失"的AKA空白字符串和实际的0。很明显,你可以解决这个问题:你可以检查一个空白字符串,也可以用-1表示缺失。
但是使用0更容易。
就我个人而言,我用-1表示缺失(并允许0(,但由于MySQL总是默认以1开头,我开始有点懒惰,只接受它