title: Email list database design
body: <p>What is an efficient way to store sent emails for a email list database? I'm having some trouble figuring it out.</p>
  
  <p>Right now, to simplify I have something like this:</p>
  
  <pre><code>Lists:
  ID,
  Name
  
  Subscribers:
  ID
  Email
  Name
  
  ListSubscribers:
  ID
  SubscriberID
  ListID
  
  Messages:
  ID
  Title
  Content
  ListID
  </code></pre>
  
  <p>So far so good... The problem is figuring out what is an efficient way to store sent and to be sent emails as well as email sending status.</p>
  
  <p>For instance, I might have hundreds of lists with each one having tens of thousands of subscribers. To know the status of each mail, I would have to store the details about each message:</p>
  
  <pre><code>MessageStatus:
  ID
  MessageID
  SubscriberID
  Status (processing, sent, soft bounce, hard bounce)
  </code></pre>
  
  <p>With a handful of lists and hundreds of thousands of subscribers this can balloon to millions of messages in just a few days.</p>
  
  <p>Is there a more efficient way to do this?</p>