霞之彼端

🚀 善国峻的个人站点 🌏

0%

数据库设计缺陷导致的循环导入错误

最近写代码的时候遇到一个问题,因为之前的数据库设计缺陷导致了后期改需求时难以解决的循环导入错误:

项目是要实现一个活动报名平台。因为目标用户是在校学生,同时也有记录用户所在学校班级的需求,所以这样设计了数据库的用户表:

ID(主键) 用户名 班级(外键)

代码都快写完了,说是需要在班级表中新加一个班长字段,该字段为一个外键指向一个用户:

ID(主键) 班号 班长(外键)

由于使用了 ORM 来实现与数据库的交互,所以在写数据库表的时候需要将外键所对应的 Model 对象 import 进来,于是这两个 Model 都需要将对方 import 进来,出现了死锁难题,报 ImportError 错误。

下面介绍解决方法。

经验教训

在设计数据库的时候有一个原则,就是在实现类似的数据关系的时候,应该尽可能将数据关系分离成多个表。

例如要实现用户报名活动这个数据关系的时候,用户一个表,活动一个表,报名这个连接两个表的操作单独为一个表,这样就能很好的做到用户和活动两个表之间没有冲突。

同理,不应该在用户表中直接设置一个外键字段(班级)来表示学生属于某个班级这个数据关系,而是为其单独设计一个数据表:

ID(主键) 班级(外键) 学生(外键)

这样设计就能避免循环导入错误。

总结

事实证明,如果在实现一个系统之前没有对该系统进行细致的设计,则许许多多意想不到的问题都会在系统实现的过程中暴露出来,有的错误甚至会导致整个项目前功尽弃。**仔细讨论需求细节和 API 细节是重要且必要的。**这样可以大大减少改需求的情况。

同时也要尽可能考虑架构的灵活性,要尽可能考虑后期改需求的可能性,对待要写死的东西必须慎之又慎。

其实当初在学习数据库的时候很多类似的理论都学习过,但是并没有在实际应用中练习这些理论,导致的结果就是这样的低级错误。如果在上这门枯燥的理论课之前能先让学生接触熟悉数据库的简单使用和设计,可能这门课会给我们带来更多的收获。

  • 本文作者: 善国峻
  • 联系邮箱: me@ohmysites.com
  • 本文链接: https://www.ohmysites.com/archives/3/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-ND 许可协议。转载请注明出处!