【问题标题】:More Efficient Foreign Key Relationship or Large Table (thinking through the problem)?更高效的外键关系还是大表(思考问题)?
【发布时间】:2011-10-09 21:24:27
【问题描述】:

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

     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)

虽然有相当多的列,但我看不出有任何明确的理由将其分解为相关表。个人资料相关信息(邮政编码下方)可能会经常更改,但地址相关信息可能会保持不变。我假设连接的成本将超过更新/插入包含许多行的表的成本。

这里有基本规则还是我必须对其进行概要分析?

【问题讨论】:

    标签: mysql django foreign-keys models


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢约翰,我将使用 bash 只是因为他早些时候提出了答案。好咒语,不过,我喜欢它。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 很棒的答案 bash。非常感谢。
    猜你喜欢
    • 2015-12-02
    • 2010-11-10
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 2014-09-02
    • 1970-01-01
    相关资源
    最近更新 更多