Was ist der beste Weg, um ein-zu-eins-Beziehungen in SQL?

Sagen wir, ich habe Alpha Dinge, die möglicherweise oder möglicherweise nicht werden oder Bezug auf Bravo oder Charlie Dinge.

Diese eins-zu-eins-Beziehungen: Kein Alpha beziehen sich auf mehr als eine Bravo. Und keine Bravo beziehen sich auf mehr als eine Alpha.

Habe ich ein paar Ziele:

  • ein system, das leicht zu lernen und
    pflegen.
  • Datenintegrität erzwungen, die in meiner
    Datenbank.
  • ein schema, das entspricht der
    Reale, logische Organisation
    meine Daten.
  • Klassen/Objekte, die in meiner
    Programmierung, die Karte gut zu
    Datenbank-Tabellen (à la Linq to SQL)
  • schnelle lese-und Schreibvorgänge
  • effektive Nutzung des Weltraums (wenige null-Felder)

Ich habe drei Ideen...

PK = primary key  
FK = foreign key  
NU = nullable

Einer Tabelle mit vielen nullalbe Felder (flat file)...

      Alphas
      --------
   PK AlphaId
      AlphaOne
      AlphaTwo
      AlphaThree
   NU BravoOne
   NU BravoTwo
   NU BravoThree
   NU CharlieOne
   NU CharlieTwo
   NU CharlieThree

Viele Tabellen mit null nullalbe Felder...

      Alphas
      --------
   PK AlphaId
      AlphaOne
      AlphaTwo
      AlphaThree

      Bravos
      --------
FK PK AlphaId
      BravoOne
      BravoTwo
      BravoThree

      Charlies
      --------
FK PK AlphaId
      CharlieOne
      CharlieTwo
      CharlieThree

Beste (oder schlechteste) der beiden: Viel nullalbe Fremdschlüssel zu viele Tabellen...

      Alphas
      --------
   PK AlphaId
      AlphaOne
      AlphaTwo
      AlphaThree
NU FK BravoId
NU FK CharlieId

      Bravos
      --------
   PK BravoId
      BravoOne
      BravoTwo
      BravoThree

      Charlies
      --------
   PK CharlieId
      CharlieOne
      CharlieTwo
      CharlieThree

Was ist wenn ein Alpha sein muss, entweder Bravo oder Charlie, aber nicht beide?

Was ist, wenn statt nur Bravos und Charlies, Alphas könnte auch alle Deltas, Echos, Foxtrots, oder Golfs, etc...?


EDIT: Dies ist ein Teil der Frage: Welche ist die beste Datenbank-schema für die navigation?

Schreibe einen Kommentar