title: Is it possible to implement a TRUE one-to-one relation?
body: <p>Consider the following model where a <code>Customer</code> should have one and only one <code>Address</code> and an <code>Address</code> should belong to one and only one <code>Customer</code>:</p>
  
  <p><a href="https://i.stack.imgur.com/NySRb.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/NySRb.png" alt="enter image description here"></a></p>
  
  <p>To implement it, as almost everybody in DB field says, <code>Shared PK</code> is the solution:</p>
  
  <p><a href="https://i.stack.imgur.com/EqTD1.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/EqTD1.png" alt="enter image description here"></a></p>
  
  <p><strong>But</strong> I think it is a <strong>fake</strong> one-to-one relationship. <strong>Because nothing in terms of database relationship actually prevents deleting any row in table <code>Address</code></strong>. So truely, it is 1..[0..1] not 1..1</p>
  
  <p>Am I right? Is there any other way to implement a true 1..1 relation?</p>
  
  <h1>Update:</h1>
  
  <p><strong>Why cascade delete is not a solution:</strong></p>
  
  <p>If we consider cascade delete as a solution we should put this on either of the tables. Let's say if a row is deleted from table <code>Address</code>, it causes corresponding row in table <code>Customer</code> to be deleted. it's okay but half of the solution. If a row in <code>Customer</code> is deleted, the corresponding row in <code>Address</code> should be deleted as well. This is the second half of the solution, and it obviously makes a cycle. </p>