title: Difference between findOrCreate() and upsert() in sequelize
body: <p>I was reading <a href="http://sequelize.readthedocs.org/en/latest/api/model/index.html" rel="noreferrer">over the doc</a> and it mentioned two ways of doing an upsert: <code>findOrCreate()</code> or <code>upsert()</code>. I read the descriptions, but I'm still not clear what the difference is. </p>
  
  <p>The <code>upsert()</code> goes on to say:</p>
  
  <pre><code>Note that the unique index must be defined in your sequelize model and not just in the table. Otherwise you may experience a unique constraint violation, because sequelize fails to identify the row that should be updated.
  </code></pre>
  
  <p>Does this mean <code>upsert()</code> explicitly requires I define an <code>id</code> UNIQUE primary field in my model? ie:</p>
  
  <pre><code>var Something = sequelize.define("Something", { id: { 
                      type: DataTypes.INTEGER, 
                      primaryKey: true, 
                      unique: true, 
                      allowNull: false}});
  </code></pre>
  
  <p>If so, why does <code>findOrCreate()</code> not have that restriction?</p>
  
  <p>Can someone explain the use cases for when <code>findOrCreate()</code> and <code>upsert()</code> should be used, and why <code>upsert()</code> has the unique constraint requirement when <code>findOrCreate()</code> doesn't seem to need it?</p>