可选参数的数据库设计

时间:2015-11-11 10:03:07

标签: django database-design django-models

我有这个型号:

class Floor(models.Model):
        label = models.CharField(null=False, blank=False, max_length=100)

class Area(models.Model):
    label = models.CharField(null=False, blank=True, max_length=100)
    floor = models.ForeignKey(Floor)

class Room(models.Model):
    label = models.CharField(null=False, blank=True, max_length=100)
    area = models.ForeignKey(Area)

有时,如果房间没有设置在地板的特定区域,则可以。

然后,我考虑了两种选择。

选项1:我保留了这个数据结构,并创建了一个" label = default"未指定区域时的区域。

选项2:我改为这个模型:

class Floor(models.Model):
    label = models.CharField(null=False, blank=False, max_length=100)

class Area(models.Model):
    label = models.CharField(null=False, blank=True, max_length=100)
    floor = models.ForeignKey(Floor)

class Room(models.Model):
    label = models.CharField(null=False, blank=True, max_length=100)
    area = models.ForeignKey(Area, null=True)
    floor = models.ForeignKey(Floor)

这两个选项看起来都不错,但你的pro / con建议是什么?

1 个答案:

答案 0 :(得分:0)

建筑物怎么没有地板?我会给每栋建筑至少一层并使用第一个选项。

因为在选项2中,您将有多余的FK建筑物(包括房间和地板)