Autor Beitrag
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mo 23.06.03 20:59 
Hi,

Primary Keys, Foreign Keys und Indices versteh ich nicht so ganz. Wann sollte/muß man das ganze einsetzen? Insbesondere der Unterschied zwischen Keys und Indices ist mir noch nicht ganz klar. Ich benutze im Moment nur die ID als PK, da die DB noch klein ist. Kann mir mal jemand insbesondere den Unterschied zwischen Keys und Indices erklären ?

_________________
Gruß
Hansa
BeniSchindler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 82

Win 2k / suse9.1
D7 Prof / Kylix 3
BeitragVerfasst: Mo 23.06.03 21:14 
PK sind dafür da einen Datensatz eindeutig zu identifizieren.

Die Indicies sind dafür da, schneller Suchen zu können. Das hat also nichts mit der Erkennung des Datensatzes zu tun. Man kann sich Inidicies so vorstellen: Die Datenbank legt für jeden Indicie eine Eigene Tabelle an. In dieser Tabelle speichert die Datenbank die Tabelle in einer neuen Reihenfolge ab. Angenommen du legst einen Indicie auf die Spalte Telefonnummer, so wird eine Tablle angelegt wo der Inhalt der Tabelle nach Telefonnummern sotiert drinsteht. Dadurch kann der Computer viel schneller den richtigen eintrag finden wenn du ihn nach einer Nummerfragst. Und eine Telefonnummer kann auch mehr mals einmal vorkommen. Es gibt ja genug Familien ;) .

Ein PK legt auch eine solche Tabelle für sich an. Aber der PK hat auserdem noch die Auflage das jeder seiner Einträge nur ein einziges mal vorkommt.

mfg Beni.

P.S.: Bei den Indicies wird natürlich auch nicht die ganze Tabelle nochmal gespeichert, sondern nur in der richtigen Reihenfolge die Internen-IDs abgelegt für das entsprechende Feld.

_________________
Result := 42; Application.ProcessMessages;


Zuletzt bearbeitet von BeniSchindler am Mo 23.06.03 21:25, insgesamt 1-mal bearbeitet
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 23.06.03 21:21 
Und der Foreign Key ist die Referenz auf den Primary Key einer anderen Tabelle, so kannst Du z.B. jedem Auto eine bestimmte Person zuordnen. Der Foreign Key muss nicht eindeutig sein, d.h. eine Person kann auch mehrere Fahrzeuge haben.

Es gibt außerdem noch die Möglichkeit Primary Keys auf mehr als ein Feld zu legen, z.B. als Kombination aus Vorname und Nachname. Ist aber seltener, weil nicht besonders habhaft.
hansa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Di 24.06.03 00:36 
Hi,

Danke für die Antworten.

@Beni: Was ein Index ist weiß ich schon, trotzdem gut erklärt, das Problem ist nur, daß ich noch nicht solange mit Interbase beschäftigt bin. Deshalb bin ich etwas unsicher, ob das ganze noch die gleiche Bedeutung hat wie früher die Index - Dateien. Ich hab so was immer folgendermaßen erklärt: Angenommen, ein Buch hat 1000 Seiten, was ist dann schneller, einen Begriff zu finden, die 1000 Seiten durchzublättern oder in den 10 Seiten Index nachzuschauen ? :lol: Aber jetzt verstehe ich wozu die vielen RDB$.... auch gut sind.

@Ugrohne: Du schreibst, es gäbe die Möglichkeit, PK auf mehr als ein Feld zu legen. Geht das bei FK nicht? Du meinst sowas wie zusammengesetzte Indices, oder ?

Nur, was jetzt ? Kann mir jemand vielleicht mal ein Beispiel nennen, wo man einen Index bzw. PK anlegen sollte?

Der Grund für den Thread ist der folgende: Habe hier eine DB mit so ca. 2.000.000 Records (30 MB) alles geschätzt. das ist zwar nicht so wild, aber auch ohne Indexe oder FK läuft das sehr flott und das kommt mir unheimlich vor. Im Netztwerk ist es allerdings noch nicht getestet und ich will vorgewarnt sein.

_________________
Gruß
Hansa
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Di 24.06.03 06:04 
Also Indizes legt man normalerweise über Felder, nach denen oft sortiert oder in denen oft gesucht wird,z.B. bei Kundentabellen über die Kundennummer und den Nachnamen.

Und den PK sollte man wirklich am besten über eine eigene AutoInc-ID legen, damit wirklich Redundanz vermieden wird.

Soweit ich weiß kannst Du das schon, aber es wird dann wirklich absolut nicht mehr sinnvoll, wie es auch schon beim PK über mehrere Felder ist.