我有一个用于存储优惠券/折扣的表,我想使用优惠券代码列作为主键,这是一个VARCHAR
.
我的理由是,每个优惠券将有一个唯一的代码,我将运行的唯一命令是SELECT ... FROM ... WHERE coupon_code='..'
我不会做任何连接或索引,我也不认为这个表中有超过几百个条目.
在我看来,这一切都会好起来,但我不知道我是否遗漏了什么/没有考虑什么.
我有一个用于存储优惠券/折扣的表,我想使用优惠券代码列作为主键,这是一个VARCHAR
.
我的理由是,每个优惠券将有一个唯一的代码,我将运行的唯一命令是SELECT ... FROM ... WHERE coupon_code='..'
我不会做任何连接或索引,我也不认为这个表中有超过几百个条目.
在我看来,这一切都会好起来,但我不知道我是否遗漏了什么/没有考虑什么.
当然可以,因为您的RDBMS将允许您这样做.不过,对于是否执行这一操作的问题,答案是不同的:在大多数情况下,应该 Select 在数据库系统之外有意义的值作为主键.
如果知道该值在正在建模的系统中是唯一的,则可以向表中添加唯一索引或唯一约束.但是,主键通常应该是一些"无意义"的值,例如自动递增的数字或GUID.
这样做的理由很简单:数据输入错误和看似不可更改的事情的不频繁更改确实会发生.它们的主键变得更难修复.