日期:2014-05-19  浏览次数:20513 次

|M| 数据库设置 主键 和 外键 的问题 看看怎么解决
如我有订单数据库
order表
id   userid   adminid   product

user表
id     user
1       Kim
admin表
id   admin
1     Tom

下订单的有两种情况
一种是用户下订那么如Kim下单   结果为
id   userid   adminid   productid
1     1             0               123
一种是管理下订那么如Tom下单   结果为
id   userid   adminid   productid
1     0             1               123

然后我想给订单表中的   userid   和   adminid   定义主键和外键
但当下单的时候肯定会有userid   或   adminid   =0的情况
这时候就提示没有主键

问:如果定义主键外键的时候   对数值   0   不进行绑定

或我上面有没有更好的办法

------解决方案--------------------
如果一定要建外键的话. 在user表和admin表中手工建一条记录 0
------解决方案--------------------
admin也是user啊,为什么不放在user表呢?

关于什么是外键、什么时候用外键,可看看这个:
http://topic.csdn.net/t/20040711/16/3164514.html
------解决方案--------------------
重构数据库设计
把user表和admin表合并成一张user表,在user表中通过添加字段isAdmin来区别用户的身份是普通用户还是管理员
------解决方案--------------------
order 表
user 表
role 表
userRole 表


id userid productid
1 1 123

这样查询也能得到你需要的结果吧~



------解决方案--------------------
两张表合并以后,不仅可以避免你所说的问题,而且使得业务逻辑和数据库变得简单
------解决方案--------------------
单独建立user表比较合适
------解决方案--------------------
user表里加个字段表示类型,把admin表删了
------解决方案--------------------

------解决方案--------------------
为什么admin还可以下订单呢?

让管理员注册一个User的帐号就可以了,或者和表,不过和表并不是很好处理。
------解决方案--------------------
(1)两个表应合并为一个。
(2)如果不合并,可以让两个外键允许为空。