仅存在单个父实体时,关联数据表是否必须设置Foreign Key?
问题
假设存在一个机构,该机构拥有多条公告,我计划将这些公告存储在一张数据表中。表结构设计如下:
class Institution: - name - address, - .....etc class Announcements: - owner = models.ForeignKey(Institution, on_delete=models.CASCADE) - messages, - ...etc
由于后续不会新增新的机构,请问我是否必须在公告表中设置Foreign Key?还是可以创建不包含Foreign Key的表,直接调用公告数据?
解答
不是必须设置Foreign Key,用不用取决于你的实际使用场景:
- 单纯存储+直接调用公告数据:完全可以不用外键。可以在公告表里加个
institution_id或者institution_name字段来标识所属机构,因为机构不会新增,不会出现标识无效的情况,查询时直接通过这个字段筛选即可。 - 需要关联机构信息查询/展示:建议保留外键。外键能让ORM框架直接帮你做关联查询,比如查公告时可以直接带出机构的名称、地址等信息,代码更简洁,也不用手动维护关联关系,减少出错概率。
- 数据一致性兜底:外键自带的约束能确保公告关联的机构一定是真实存在的,哪怕后续不小心修改机构数据,也不会出现公告关联无效机构的脏数据,这对数据严谨性有帮助。
总结来说,业务逻辑极简的情况下,不用外键也能正常运行;但从代码维护和数据可靠性角度,保留外键更稳妥,而且机构不会新增,也不会带来额外的维护负担。
内容的提问来源于stack exchange,提问作者kristine198271
相关产品推荐
相关产品推荐

