在数据库中引用外键的更好方法

时间:2013-10-25 08:04:45

标签: mysql database database-design database-optimization

您能建议数据库优化的最佳实践吗? 这是我的数据库架构

group(id, name, status)
users(id, group_id, parent_id, username, password)

company(id, name, address, phone)
agent(id, agent_code, name, address, phone)

在这个模式中,我有四种用户组作为超级管理员,公司用户,代理用户和最终用户。

引用每个实体(公司,代理)的用户的最佳方式是什么?

我有两个选择

一个。用户表中的外键为company_id和agent_id

users(id, group_id, parent_id, company_id, agent_id, username, password)

B中。外键作为公司和代理表中的user_id

company(id, user_id, name, address, phone)
agent(id, user_id, agent_code, name, address, phone)

我使用mysql作为数据库并使用级联引用。 当我删除公司/代理时,将根据选项A自动删除关联的用户。但是如果是选项B,我必须运行第二个查询以删除公司/代理的关联用户。那么你有什么建议???

更新: 忘了提到儿童用户。公司/代理的用户可以拥有子用户,由users表中的parent_id引用。

1 个答案:

答案 0 :(得分:1)

选项A听起来不错。

示例: - 因为他们可以假设100个用户只与5家公司相关联,因此可以在单个查询中删除单个用户...