更有效的外键关系或大表(思考问题)?

时间:2011-07-21 02:52:30

标签: mysql django foreign-keys models

这个问题可能非常天真,在这种情况下,我道歉。我正在尝试更多地了解数据库管理,我不确定在这种情况下哪种选择更可取。我有一个模型,可以很容易地分成两个表。它包含公司的联系信息和个人资料信息。

     class Company(models.Model):
         name=models.CharField(max_length=100)
         street_address=models.CharField(max_length=100, blank=True)
         city=models.CharField(max_length=100, blank=True)
         state=models.CharField(max_length=100, blank=True)
         zipcode=models.IntegerField(max_length=5, blank=True)
         input_level=models.CharField(choices=((0,'Less',),(1,'More'))
         expense_min=models.IntegerField(blank=True)
         expense_max=models.IntegerField(blank=True)
        health_value=models.IntegerField(choices=[(i+1,i+1) for i in range(5)], blank=True)
        group_size=models.IntegerField(blank=True)
         comment=models.TextField(max_length=500, blank=True)
        created=models.DateField(auto_now_add=True)
        registered=models.BooleanField(default=False)

虽然有相当数量的列,但我没有看到任何明确的理由将其分解为相关表。配置文件相关信息(下面的邮政编码)可能经常更改,但地址相关信息可能会保持不变。我假设连接的成本将超过更新/插入具有许多行的表的成本。

这里有基本规则还是只需要对其进行分析?

2 个答案:

答案 0 :(得分:2)

基本规则是“保持简单”!

既然你没有找到打破桌子的绝佳理由,那就不要了。从下一个人的角度考虑任何这样的事情,在你离开很久之后,坐在那里挠挠脑袋想知道你为什么做出这样的决定。 “我的前任很聪明,所以必须有一个很好的理由......对了!?”

答案 1 :(得分:2)

关于模式的规范化和非规范化,没有正确或错误的答案。

你应该问自己,性能是一个重要的标准吗?如果是这样,那么会产生程序复杂性的成本,并使用非规范化表格。

如果表很小并且性能不是一个大问题,那么不要为程序复杂性而烦恼。忘记更新另一个表中的列会导致很多问题。

另外请不要忘记索引通常不能与连接一起使用。