title: Database Design avoid redundancy
body: <p>Database design is new to me, sorry for potential basic question.</p>
  <p>The database I am designing is supposed to represent the following :</p>
  <ul>
  <li>My users can be either contractors or administrators</li>
  <li>contractors can issue withdrawals</li>
  <li>administrators can issue refunds (to refund withdrawals)</li>
  <li>a refund is linked to 1 or many (non cancelled) withdrawals</li>
  <li>a withdrawal is linked to 0 or 1 refund</li>
  <li>contractors can cancel withdrawals before they are linked to a refund</li>
  </ul>
  <p>I therefore created 3 tables, <em><strong>USER</strong></em> ,<em><strong>WITHDRAWAL</strong></em> and <em><strong>REFUND</strong></em>.</p>
  <p>As property of <em>WITHDRAWAL</em> records I created <em>status</em> , which represents if the concerned withdrawal is ( <em>pendingrefund</em> or <em>cancelled</em> or <em>refunded</em>).</p>
  <p>Aiming to make a good database design, I would like to avoid redundancy and potential data missmatches.
  Is creating that status property a good idea and why?</p>
  <p>Indeed, one could deduce that withdrawal is refunded if it is linked to a refund (null or not).
  On the other side, I should as well create a &quot;isCancelled&quot; field for withdrawal to know if it is cancelled. But that could lead to withdrawals being linked to refund while being cancelled (which is not possible)</p>
  <p>Would you have any advice to help me making good design choices for this situation?</p>