title: Is it reasonable to separate relation atributes with frequently duplicate string values?
body: <p>Consider relation <code>SPACESHIP_FLAT</code>:</p>
  
  <pre><code>╔═════╤════════════════╤════════════════╤═══════════╗
  ║ ID  │ NAME           │ TYPE           │ LV        ║
  ╟─────┼────────────────┼────────────────┼───────────╢
  ║ 1   │ Soyuz TMA-14   │ Soyuz          │ Soyuz-FG  ║
  ║ 2   │ Endeavour      │ Space Shuttle  │ Shuttle   ║
  ║ 3   │ Soyuz TMA-15M  │ Soyuz          │ Soyuz-FG  ║
  ║ 4   │ Atlantis       │ Space Shuttle  │ Shuttle   ║
  ║ 5   │ Soyuz TM-31    │ Soyuz          │ Soyuz-U   ║
  ║ 6   │ EFT-1          │ Orion          │ Delta-IV  ║
  ║ 7   │ XXX            │ CST-100        │ Delta-IV  ║
  ║ 8   │ YYY            │ CST-100        │ Falcon-9  ║
  ║ 9   │ ZZZ            │ Dragon V2      │ Falcon-9  ║
  ║ ... │ ...            │ ...            │ ...       ║
  ╚═════╧════════════════╧════════════════╧═══════════╝
  </code></pre>
  
  <p>Here attributes <code>TYPE</code> and <code>LV</code> have duplicate string values. So my question is: is it reasonable to project these attributes to new relations? Result will be as shown below.</p>
  
  <p><code>SPACESHIP</code></p>
  
  <pre><code>╔═════╤════════════════╤═══════╤══════╗
  ║ ID  │ NAME           │ TYPE  │ LV   ║
  ╟─────┼────────────────┼───────┼──────╢
  ║ 1   │ Soyuz TMA-14   │ 1     │ 1    ║
  ║ 2   │ Endeavour      │ 2     │ 2    ║
  ║ 3   │ Soyuz TMA-15M  │ 1     │ 1    ║
  ║ 4   │ Atlantis       │ 2     │ 2    ║
  ║ 5   │ Soyuz TM-31    │ 1     │ 3    ║
  ║ 6   │ EFT-1          │ 3     │ 4    ║
  ║ 7   │ XXX            │ 4     │ 4    ║
  ║ 8   │ YYY            │ 4     │ 5    ║
  ║ 9   │ ZZZ            │ 5     │ 5    ║
  ║ ... │ ...            │ ...   │ ...  ║
  ╚═════╧════════════════╧═══════╧══════╝
  </code></pre>
  
  <p><code>SSTYPES</code></p>
  
  <pre><code>╔═════╤════════════════╗
  ║ ID  │ TYPE           ║
  ╟─────┼────────────────╢
  ║ 1   │ Soyuz          ║
  ║ 2   │ Space Shuttle  ║
  ║ 3   │ Orion          ║
  ║ 4   │ CST-100        ║
  ║ 5   │ Dragon V2      ║
  ║ ... │ ...            ║
  ╚═════╧════════════════╝
  </code></pre>
  
  <p><code>LVEHICLES</code></p>
  
  <pre><code>╔═════╤═══════════╗
  ║ ID  │ LV        ║
  ╟─────┼───────────╢
  ║ 1   │ Soyuz-FG  ║
  ║ 2   │ Shuttle   ║
  ║ 3   │ Soyuz-U   ║
  ║ 4   │ Delta-IV  ║
  ║ 5   │ Falcon-9  ║
  ║ ... │ ...       ║
  ╚═════╧═══════════╝
  </code></pre>
  
  <p>I've normalized my relational model to <code>5NF</code> and found no reason to separate <code>TYPE</code> and <code>LV</code> from the relation (these does not cause update anomalies). But in case of huge numbers of tuples in <code>SPACESHIP_FLAT</code> relation it will consume a lot of resources (as I suppose) - so separating them will be a bit more efficient. But I did not found it in theory of database design.</p>
  
  <p><H3>Update</H3></p>
  
  <p>Ok, let's clear some points.  </p>
  
  <blockquote>
    <p>Attribute <code>TYPE</code> entirely depends on attribute <code>NAME</code>. <code>NAME</code> indicates an instance of class <code>TYPE</code> - one and more instances belong to one class. <em>Soyuz TMA-14</em> is an instance of <em>Soyuz</em> ship series. So it can have one and only one value of <code>TYPE</code>. Relationship between two sets of values <code>NAME</code> and <code>TYPE</code> is many-to-one (no multivalued dependency).<br>
    Attribute <code>LV</code> depends on attribute <code>NAME</code>in the same manner.<br>
    But if I eventually decide to clarify the <em>Soyuz</em> <code>TYPE</code> and set all the <em>Soyuz TMA-XX</em> spacecrafts as <em>Soyuz TMA</em> <code>TYPE</code>, <em>Soyuz TM-XX</em> as <em>Soyuz TM</em> and so on then I need to update each <em>Soyuz*</em> record no matter if I use the first variant with flat relation or variant with three different relations. The second one will ease editing value <em>Soyuz</em> (so it looks better in terms of data integrity).<br>
    As for surrogate keys - I use 'em because I need them to be represented in cross-reference relations (many-to-many, even <code>SPACESHIP_FLAT</code> or <code>SPACESHIP</code>- there are no top-level relations in my data model).</p>
  </blockquote>