请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,想问一下数据库设计时候的外键及索引

通过看PHP语言所编写的ECSHOP商城系统,发现他们的数据表基本没有使用外键,而是使用索引在应用层将各个表之间操作,请问外键的使用是否是非必须的?并且看了一些知乎回答,似乎对于商城系这类交易系统都不建议使用外键,而是使用中间层关联表。或许以上言论有部分表述不清及不对,还请各位指点我的想法。

正在回答

1回答

不使用外键也是可以的, 但是中间层关联表不一定非要使用, 一般都是通过id做关联 只是在数据库中不指名这是一个外键而已, 而且django的model中即使不适用外键 也能当外键使用 可以这样 goods = models.ForeignKey(Category, to_field="cat_id", related_name="cat") 一般用中间层表是manytomany这种才需要使用到中间层表, 否则一般使用外键关联字段就行了, 这里的不适用外键一般指的是不在表设计的时候指名该字段是外键, 而是直接一个id字段而已

0 回复 有任何疑惑可以回复我~
  • 提问者 隐逆 #1
    请问老师是否在互联网项目的实际生产中近乎放弃外键这一模式?而是在业务层实现软外键?并且如果不使用外键,django所自带的admin或者xadmin管理作用几乎没用了?
    回复 有任何疑惑可以回复我~ 2017-09-14 10:00:10
  • bobby 回复 提问者 隐逆 #2
    也不一定, 因为外键上可以加约束, 这里的外键模式只是说不在数据库里面设置外键, 但是外键的模式肯定不能放弃, 如果不在数据库设计外键的话 很多约束就要自己去在业务逻辑里面完成, 比如一个提交里面有一个外键没有数据, 如果有数据库外键约束的话 如果那个外键值不存在, 数据库会报错的, 但是如果没有设置的话, 就要在业务中去保障这些约束, 会造成代码多谢, 所以对于数据一致性要求高但是对并发性要求不高的话 外键还是主要的点, 因为数据的一致性在数据库里面就可以直接定义好而不用去写代码保障, 因为写代码始终容易有bug, django的admin和xadmin应该可以用的, 我在上面回答过了, model里面还是要用foreignkey来设置外键, 在model上外键模式是成立的 只是数据库中没有外键了而已
    回复 有任何疑惑可以回复我~ 2017-09-15 09:47:33
  • 提问者 隐逆 #3
    非常感谢老师的回答
    回复 有任何疑惑可以回复我~ 2017-09-15 09:55:34
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信