AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi automatisch ein Primärschlüsselfeld erzeugen?
Thema durchsuchen
Ansicht
Themen-Optionen

automatisch ein Primärschlüsselfeld erzeugen?

Ein Thema von smart · begonnen am 25. Jun 2005 · letzter Beitrag vom 25. Jun 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von ltiefland
ltiefland

Registriert seit: 2. Mai 2005
Ort: Marl
63 Beiträge
 
Delphi 2005 Professional
 
#11

Re: automatisch ein Primärschlüsselfeld erzeugen?

  Alt 25. Jun 2005, 16:36
Zitat von smart:
Ich habe schon alles mögliche programmiert, aber mit so einer dummen Datenbankprogrammierung tue ich mich sehr schwer
Zitat von ltiefland:
Hallo Heike,
Felder können auch naträglich noch als PRIMARY KEY definiert werden. Wichtig ist nur, daß die Werte in dieser Spalte auch eindeutig sind.
Ja, aber wie?
Beispiel:

ALTER TABLE test_table PRIMARY KEY(id);

Zitat von smart:
Zitat von ltiefland:
Daher ist AUTO INCREMENT für solche Felder immer die beste Wahl, wenn der Primärschlüssel "künstlich" sein soll, wie z. B. in einer User-Tabelle. Wenn Du ein Beispiel benötigst, so sage es mir einfach und ich stelle Dir hier etwas zur Verfügung.
Eigentlich möchte ich nur 2 Tabellen verlinken. Dummerweise habe die keine Primary Keys. In den Tabellen sind aber schon ca. 400 Einträge.
Das ist dann blöd, weil die Werte eventuell nicht eindeutig sind. Da müßtest Du dann einen sogenannten "Reload" durchführen. Also: Datenbankinhalt sichern (als SQL-Datei), Inhalt der Tabellen löschen, Primary Key anlegen und Daten neu einspielen. Vorher mußt Du aber im SQL-Dump die Werte für den Schlüssel eindeutig machen. Die Werte in der zweiten Tabelle müssen dann natürlich auch angepaßt werden, amit da nichts ins Datennirwana zeigt.
Lars Tiefland
Live Long And Prosper,
Lars Tiefland
admin at GBS, a Mod for STEF2, New mod versions and support!
Download Opera 8
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#12

Re: automatisch ein Primärschlüsselfeld erzeugen?

  Alt 25. Jun 2005, 16:43
Vielen Dank Lars, für Deine umassende Antwort!

Noch eine dummer Frage, wie legt man einen
Zitat von ltiefland:
wenn der Primärschlüssel "künstlich" sein soll, wie z. B. in einer User-Tabelle.
an?

Heike.
Heike Kretschmann
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#13

Re: automatisch ein Primärschlüsselfeld erzeugen?

  Alt 25. Jun 2005, 17:44
Hai Heike,

ersteinmal zum Verständniss:

Ein Primaky Key ist ersteinmal "nur" ein Feld innerhalb einer Tabelle welches einen einmaligen Wert besitzt. Wie dieser erzeugt wird ist ersteinmal egal. Du kannst eine GUID verwenden oder irgendetwas von dem Du sicherstellst das es einmalig ist in der Tabelle. Vorzugsweise verwendet man dafür natürlich ein AutoInc-Feld.

Es muss auch kein Index auf diesem Feld liegen. mySQL z.B. verlangt das auf dem AutoInc-Feld einer Tabelle (es darf nur eines geben) immer ein Index gelegt wird. ABS-Database ist das völlig egal.

Wenn Du nun eine ABS-Tabelle hast in der schon Daten vorhanden sind solltest Du einfach ein ID-Feld (Typ AutoInc) hinzufügen können. Dieses wird dann automatisch gefüllt (in deinem Beispiel 1 bis 400).

Wenn Du zwei Tabellen verknüpfen möchtest muss immer nur die Master Tabelle einen PK haben. Die Detail-Tabelle braucht nur ein Feld zur Verknüpfung mit dem PK aus der Mastertabelle (FOREIGN Key).
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#14

Re: automatisch ein Primärschlüsselfeld erzeugen?

  Alt 25. Jun 2005, 19:13
Zitat von Sharky:
Hai Heike,

ersteinmal zum Verständniss:

Ein Primaky Key ist ersteinmal "nur" ein Feld innerhalb einer Tabelle welches einen einmaligen Wert besitzt. Wie dieser erzeugt wird ist ersteinmal egal. Du kannst eine GUID verwenden oder irgendetwas von dem Du sicherstellst das es einmalig ist in der Tabelle. Vorzugsweise verwendet man dafür natürlich ein AutoInc-Feld.

Es muss auch kein Index auf diesem Feld liegen. mySQL z.B. verlangt das auf dem AutoInc-Feld einer Tabelle (es darf nur eines geben) immer ein Index gelegt wird. ABS-Database ist das völlig egal.

Wenn Du nun eine ABS-Tabelle hast in der schon Daten vorhanden sind solltest Du einfach ein ID-Feld (Typ AutoInc) hinzufügen können. Dieses wird dann automatisch gefüllt (in deinem Beispiel 1 bis 400).

Wenn Du zwei Tabellen verknüpfen möchtest muss immer nur die Master Tabelle einen PK haben. Die Detail-Tabelle braucht nur ein Feld zur Verknüpfung mit dem PK aus der Mastertabelle (FOREIGN Key).
Hallo Stephan!

Ich glaube, jetzt habe ich es geschnallt. Ich könnte dann die erstellten ID-Feld (Typ AutoInc) miteinander verknüpfen, oder? Jetzt sag bitte nicht 'Falsch'.

Heike.
Heike Kretschmann
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#15

Re: automatisch ein Primärschlüsselfeld erzeugen?

  Alt 25. Jun 2005, 19:25
Zitat von smart:
... Ich glaube, jetzt habe ich es geschnallt. Ich könnte dann die erstellten ID-Feld (Typ AutoInc) miteinander verknüpfen, oder? Jetzt sag bitte nicht 'Falsch' ....
Hai Heike,

ich sage nicht "Falsch" wenn Du es richtig meinst
"Verknüpft" werden nicht die AutoInc-Felder sondern nur eines.

Code:
Tabelle : anreden
---------------------------
anrede_ID : AutoInc    <- Das ist ein PK in dieser Tabelle
anrede_text : String(20)


Tabelle : namen
---------------------------
namen_id    : AutoInc     <- PK für diese Tabelle. Ist aber für diesen Fall nicht notwendig
fk_anrede_id : INTEGER <- In diesem Feld wird der PK aus der Tabelle anreden gespeichert
vorname     : String(50)
....
Wenn Du jetzt einen neuen Eintrag in der Tabelle namen machst wird in dem Feld "fk_anrede_id" (vom Typ Integer weil der PK auch in Integerfeld ist) der AutoInc-Wert aus der Tabelle anreden eingetragen.

Das ganze kann dann so aussehen:
Code:
Tabelle : anreden
---------------------------
anrede_id     anrede_text
---------------------------
1              Herr
2              Frau
3              Fisch
---------------------------

Tabelle : namen
---------------------------------------
namen_id      fk_anrede_id   vorname
---------------------------------------
1              2               Heike
2              1               Stephan
3              2               Sharkyline
4              3               Sharky
---------------------------------------
Ich hoffe jetzt ist es klarer?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#16

Re: automatisch ein Primärschlüsselfeld erzeugen?

  Alt 25. Jun 2005, 19:29
Ich hatte früher mal etwas mit Clipper Programmiert, dass war so eine Art DBase. Wenn man da zwei Felder aus zwei Tabellen verlinken wollte, musst man immer das entsprechende Feld ‚indizieren’ und dann konnte man die ‚indizierten’ Felder verknüpfen.

Heike.
Heike Kretschmann
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#17

Re: automatisch ein Primärschlüsselfeld erzeugen?

  Alt 25. Jun 2005, 19:36
Zitat von Sharky:
ich sage nicht "Falsch" wenn Du es richtig meinst
"Verknüpft" werden nicht die AutoInc-Felder sondern nur eines.
Waaas...., so einfach ist das. Tut mir leid, dass ich so dumm gefragt habe. Ich hatte zuvor immer in die falsche Richtung gedacht.
Zunächst vielen Dank für die sehr gute Antwort.

Heike.
Heike Kretschmann
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#18

Re: automatisch ein Primärschlüsselfeld erzeugen?

  Alt 25. Jun 2005, 19:47
Zitat von smart:
... Zunächst vielen Dank für die sehr gute Antwort...
Immer wieder gerne

Kleiner Nachtrag (bevor Du fragen solltest).
Um das eintragen des PKs im Feld fk_anrede_id musst Du dich natürlich selber kümmern. Das kann Dir keine Datenbank abnehmen.

Zum Thema Indexe: Es ist natürlich immer sinnvoll auf den PK einen Index zu legen.
Bei "richtigen" DBMS würde man auch noch auf das Feld fk_anrede_id einen FOREIGN KEY setzen.
Je nach einstellung in der DB kann man so z.B. verhindern das ein Datensatz aus der Tabelle andrede gelöscht wird wenn es in der Tabelle namen noch abhängige Datensätze gibt.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#19

Re: automatisch ein Primärschlüsselfeld erzeugen?

  Alt 25. Jun 2005, 19:59
Zitat von Sharky:
Kleiner Nachtrag (bevor Du fragen solltest).
Um das eintragen des PKs im Feld fk_anrede_id musst Du dich natürlich selber kümmern. Das kann Dir keine Datenbank abnehmen.
Ist klar, woher soll die Datenbank das auch wissen.

Zitat von Sharky:
Zum Thema Indexe: Es ist natürlich immer sinnvoll auf den PK einen Index zu legen.
Bei "richtigen" DBMS würde man auch noch auf das Feld fk_anrede_id einen FOREIGN KEY setzen.
Je nach einstellung in der DB kann man so z.B. verhindern das ein Datensatz aus der Tabelle andrede gelöscht wird wenn es in der Tabelle namen noch abhängige Datensätze gibt.
Also ist es ratsam dies gleich immer bei der Erstellung der/die Tabelle/n zumachen.

Uff..., dass war jetzt aber eine schwere Geburt!

Nochmal, herzlichen Dank für Deine nette Hilfe.

Heike.
Heike Kretschmann
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz