Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Primary Keys
chanderegg
myCSharp.de - Member



Dabei seit:
Beiträge: 101
Herkunft: Solothurn CH

Themenstarter:

Primary Keys

beantworten | zitieren | melden

verwendetes Datenbanksystem: SQLServer2008

Hallo zusammen

Ich möchte eine bestehende Datenbank optimieren. Dazu erstelle ich als erstes Primary Keys.
Nun habe ich eine Tabelle mit 3 Spalten, welche alle Unique sind. Ist es nun besser den Primary Key auf eine Spalte zu definieren und über die beiden anderen einen Index zu legen oder soll ich den Primary Key über alle 3 Spalten definieren?

Vielen Dank für Eure Hilfe
chanderegg
private Nachricht | Beiträge des Benutzers
xxMUROxx
myCSharp.de - Member

Avatar #avatar-3236.jpg


Dabei seit:
Beiträge: 1.552
Herkunft: Südtirol/Italien

beantworten | zitieren | melden

Hallo chanderegg,

ich erstelle in diesen Fällen immer einen Primary Key auf einer Spalte und dann auf den einen Unique Key über die drei Spalten. Andernfalls müsstest du in Tabellen welche auf diese Tabelle referenzieren, ebenfalls drei Spalten einfügen um den Datensatz identifizieren zu können. Diesen Speicherplatz welcher der Unique Index benötigt wird dadurch kompensiert, dass du dann bei referenzierenden Tabellen anstelle von drei Spalten nur eine Spalte benötigst.

Gruß,
Michael
Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp
private Nachricht | Beiträge des Benutzers
Rabban
myCSharp.de - Member

Avatar #avatar-3383.jpg


Dabei seit:
Beiträge: 106
Herkunft: Berlin

beantworten | zitieren | melden

Hallo chanderegg,

aus deiner Beschreibung ist leider nicht viel raus zu lesen. Welchen Sinn würdest du denn darin sehen einen PK aus 3 verschiedenen Schlüsseln zusammen zu bauen?
Grundsätzlich ist ein PrimaryKey ein durchlaufender Zähler, ganz unabhängig für welche inhaltlichen Daten er benutzt wird.

MfG
Rabban
private Nachricht | Beiträge des Benutzers
f_igy
myCSharp.de - Member



Dabei seit:
Beiträge: 115

beantworten | zitieren | melden

Hi,

als erstes ist die Frage wichtig, ob alle drei Spalten für sich unique sind, oder erst die Kombination der drei. Dann stellt sich die Frage, was Du eingentlich ereichen möchtest. Sicherstellen, dass die Kombination der Werte einzigartig ist (dann einen Unique Constraint / Index auf die drei Felder), oder tatsächlich einen Primärschlüssel für die Referenzierung aus einer anderen Tabelle erzeugen (dann ist eine forlaufende ID ganz gut).

Ach ja: das ist m.E. der Sinn eines PrimaryKey: er dient als ForeignKey in einer anderen Tabelle. Das sieht Wikipedia auch so:

Schlüssel (Datenbank)

Wenn man sich dafür entscheidet kann man auch weitere Constraints auf die referentielle Integrität auf der DB erzeugen, was Vor- und Nachteile hat. Dafür ist natürlich interessant, was Du als Optimierung ansiehst (Datenqualität, Lese- oder Schreibgeschwindigkeit, ect.)

Gruß
f_igy
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von f_igy am .
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Zitat von xxMUROxx
ich erstelle in diesen Fällen immer einen Primary Key auf einer Spalte und dann auf den einen Unique Key über die drei Spalten. Andernfalls müsstest du in Tabellen welche auf diese Tabelle referenzieren, ebenfalls drei Spalten einfügen um den Datensatz identifizieren zu können. Diesen Speicherplatz welcher der Unique Index benötigt wird dadurch kompensiert, dass du dann bei referenzierenden Tabellen anstelle von drei Spalten nur eine Spalte benötigst.

Dies mag in vielen Fällen eine gute Lösung sein. Aber diese Lösung hat auch Nachteile:

- Beim speichern auf der 1-Tabelle müssen zwei Indizes angepasst werden (dauert allenfalls länger).
- wenn Du von der n-Tabelle lesen willst und als Input nur die Felder hast welche auf der 1-Tabelle den Unique Key builden, dann musst Du über die Parent-Table joinen.

Dies sollte beim Design berücksichtigt werden (Anzahl Schreibvorgänge / welche Daten liegen wann und wie vor). usw.



Gruss
Programmierhans
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers