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

标签 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)

在此架构中,我有四种用户组: super 管理员、公司用户、代理用户和最终用户。

推荐每个实体(公司、代理商)的用户的最佳方式是什么?

我有两个选择

A.用户表中的外键为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,我必须运行第二个查询来删除公司/代理的关联用户。那么你有什么建议???

更新: 忘记提及 child 用户。公司/代理商的用户可以有子用户,由用户表中的parent_id引用。

最佳答案

选项 A 听起来不错。

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

关于mysql - 在数据库中引用外键的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19584376/

相关文章:

在 AWS RDS 上托管的数据库上导入 SQL 脚本时出现 MySql 错误 'max_allowed_packet' 字节

sql - Postgres 9.x - 有没有办法避免将数据库连接信息硬编码到 View 中?

database - vertica 安装失败并出现 ssh 错误

PHP-MySql : fetch item from three tables and order by timestamp

mysql - 如何在 MySQL 中使用 passport-facebook?

php - 即使有持久连接,lastInsertID也会返回0

java - 对象数据库查询执行

mysql - 如何正确为mysql中的表添加相关属性

mysql - 不同的方法来选择有有效期的产品

mysql - 从多个表中选择计数