mysql - 通过一对一关系,多个表与一个表相关。最佳实践
问题描述
假设我们有 3 个表:student、professor 和 contact_info。学生和教授都与contact_info 具有一对一的关系。我可以把桌子安排得像
学生
ID | contact_info_id |
---|---|
1 | 1 |
教授
ID | contact_info_id |
---|---|
1 | 2 |
联系方式
ID | 电话 | ... |
---|---|---|
1 | 123 | ... |
2 | 321 | ... |
或者
学生
ID |
---|
1 |
教授
ID |
---|
1 |
联系方式
ID | 学生卡 | 教授编号 | 电话 | ... |
---|---|---|---|---|
1 | 1 | 无效的 | 123 | ... |
2 | 无效的 | 1 | 321 | ... |
我对两者都不完全相信,因为我可以看到两者的优点和缺点。我试图为我的问题找到重复项,但没有成功。也许有人可以用这种情况下的最佳实践启发我。可能它会以depends结束,但我想听听。
解决方案
如果您使用 Person 实体来表示所有具有联系信息的人,则这种形式化设计会更容易。学生和教授都是人。碰巧这些人有不同的角色。事实上,在现实世界的大学里,有些人同时担任这两个角色(想想研究生领导本科班)。
所以也许你有一个角色表。爱丽丝是一名终身教授。Burt 是四年级本科生,也是一名助教。卡拉是一年级研究生。埃利安既是三年级博士生,也是兼职教授。你明白了。
推荐阅读
- c++ - HTTP 响应格式不正确?
- javascript - 如何在画布中绘制单个设备像素
- javascript - 尝试将 div 捕获为图像时旋转导致问题
- python - 如何通过另一个python文件运行一个python文件然后关闭第一个
- python - 字典值到数组,按键排序
- nginx - 在 Nginx 上通过 https 配置 tusd 的问题
- r - 根据列条件插入和填充两列
- spring - 在端点无效的情况下,Spring boot rest api 不会失败
- spring-security - 如何在 Spring WebFlux Security 中实现多种身份验证方法?
- jwt - 在数据库中存储刷新令牌是否安全?(为登录目的发布新的访问令牌)。或者有没有更简单的方法?