![]() |
Re: automatisch ein Primärschlüsselfeld erzeugen?
Zitat:
ALTER TABLE test_table PRIMARY KEY(id); Zitat:
|
Re: automatisch ein Primärschlüsselfeld erzeugen?
Vielen Dank Lars, für Deine umassende Antwort!
Noch eine dummer Frage, wie legt man einen Zitat:
Heike. |
Re: automatisch ein Primärschlüsselfeld erzeugen?
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). |
Re: automatisch ein Primärschlüsselfeld erzeugen?
Zitat:
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. |
Re: automatisch ein Primärschlüsselfeld erzeugen?
Zitat:
ich sage nicht "Falsch" wenn Du es richtig meinst ;-) "Verknüpft" werden nicht die AutoInc-Felder sondern nur eines.
Code:
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.
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) .... Das ganze kann dann so aussehen:
Code:
Ich hoffe jetzt ist es klarer?
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 --------------------------------------- |
Re: automatisch ein Primärschlüsselfeld erzeugen?
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. |
Re: automatisch ein Primärschlüsselfeld erzeugen?
Zitat:
Zunächst vielen Dank für die sehr gute Antwort. Heike. |
Re: automatisch ein Primärschlüsselfeld erzeugen?
Zitat:
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. |
Re: automatisch ein Primärschlüsselfeld erzeugen?
Zitat:
Zitat:
Uff..., dass war jetzt aber eine schwere Geburt! Nochmal, herzlichen Dank für Deine nette Hilfe. Heike. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz