【发布时间】:2012-02-03 13:10:43
【问题描述】:
我正在为 cmets 创建一个表,其中一个字段是 user_id。好吧,普通用户和管理员都可以发表评论,所以我不知道该怎么做。
Users 表的主键为user_id
Admins 表的主键为admin_id
那我该怎么做呢?
【问题讨论】:
标签: mysql sql database-design primary-key
我正在为 cmets 创建一个表,其中一个字段是 user_id。好吧,普通用户和管理员都可以发表评论,所以我不知道该怎么做。
Users 表的主键为user_id
Admins 表的主键为admin_id
那我该怎么做呢?
【问题讨论】:
标签: mysql sql database-design primary-key
如果您可以重新设计一个带有 isAdmin 标志的表 (login?),我会这样做。
如果你不能,那么有一个过程会导致 admin 表中的每个条目在 user 表中创建一个相关条目。然后,admin 表可以有一个 user_id 字段来将两者关联起来。
这样每个管理员都有一个用户,所有的cmets都可以使用这个user_id。
我会强烈避免让 cmets 对 both user_id 和 admin_id 进行键控,其中一个保持为 NULL。如果您在其他任何地方遇到类似的需求,它会使查询变得凌乱,阻碍您执行约束,并将您与凌乱的两键方法联系起来。
【讨论】:
为什么不在一个表中包含所有用户和管理员并有一列“isAdmin” - 如果用户是管理员设置为 1,则默认为 0
或
您的 cmets 表应该有两列,并且更新了 user_id 或 admin_id,默认为 0 - 但这不是一个好方法...
【讨论】:
您可以通过几种不同的方式完成此操作。要么有一个 commenter_id 链接到 user_id 或带有关联 user_type 标志的 admin_id 要么有两个 commenter_id 字段,一个用于用户,一个用于管理员,并且关闭哪个字段的值来确定要为任何相关的表转到哪个表查询。我敢肯定还有其他更优雅的选择,但这两个是快速和肮脏的选择。
【讨论】:
那么就可以将table -cmets设为
comment_id-int
user_id-fk from users table or admin table
user_type- enum('admin','user')
comment
//及其他必填字段
【讨论】: