title: How to deal with lots of duplicated data in DB?
body: <p>I'm currently building a database for a photography project and I'm having troube to decide this:</p>
  <p>There are about 3 million photographs and I'd like this to keep working even with 15 million. They are stored on disk and with paths in the DB. All of those need a caption, but captions are highly duplicated. On Average about 10 photos have exactly the same caption (same creator, same title, same date).</p>
  <p>Is it better to create one model?</p>
  <pre><code>class Photo(models.Model):
    file = models.FileField()
    headline = models.CharField()
    caption = models.TextField()
    date = models.DateField()
    created_by = models.CharField()
  </code></pre>
  <p>Or should I make 2 models even if it means having to create copies manually when one photo out of a group gets a different caption afterwards?</p>
  <pre><code>class Photo(models.Model):
    file = models.FileField()
    metadata = models.ForeignKey('Metadata')
  
    def set_metadata(self, metadata):
      self.metadata = Metadata.models.get_or_create(metadata) 
  
  class Metadata(models.Model):
    headline = models.CharField()
    caption = models.TextField()
    date = models.DateField()
    created_by = models.CharField()
  </code></pre>
  <p>The most common task will be to search for pictures based on their metadata. Is creating an extra model and reducing the db table by factor 10 worth it? Or does it just introduce unnessesary complications with no benefits in performance?</p>
  <p>Thank you for your help!</p>