Более эффективные отношения с внешним ключом или Большой стол (продумывая проблему)? - PullRequest
1 голос
/ 21 июля 2011

Этот вопрос может быть крайне наивным, и в этом случае я прошу прощения. Я пытаюсь узнать больше об администрировании базы данных, и я не уверен, какой выбор предпочтителен в этом случае. У меня есть модель, которая может быть легко разделена на две таблицы. Он содержит контактную информацию и информацию о профиле для компаний.

     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 ]

2 голосов
/ 21 июля 2011

Нет правильных или неправильных ответов в отношении нормализации и денормализации схем.

Вы должны спросить себя, является ли производительность важным критерием? Если это так, то понесите затраты на сложность программы и используйте денормализованную таблицу.

Если таблицы маленькие и производительность не является большой проблемой, не беспокойтесь о сложности программы. Если вы забудете обновить столбец в другой таблице, это вызовет массу проблем.

Также не забывайте, что индексы часто нельзя использовать с соединениями.

2 голосов
/ 21 июля 2011

Основное правило: «ХРАНИТЕ ЭТО ПРОСТО»!

Поскольку вы не определили вескую причину, чтобы сломать стол, не делайте этого.Подумайте о любой такой вещи с точки зрения следующего парня, который долгое время после вашего ухода сидит там и почесывает голову, размышляя, почему вы приняли такое-то решение.«Мой предшественник был умен, поэтому должна быть веская причина ... ага!?»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...