AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Zwei Tabellen mit einander Verknüpfen
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei Tabellen mit einander Verknüpfen

Ein Thema von Luckie · begonnen am 3. Feb 2005 · letzter Beitrag vom 5. Feb 2005
Antwort Antwort
Seite 3 von 4     123 4      
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#21

Re: Zwei Tabellen mit einander Verknüpfen

  Alt 3. Feb 2005, 14:50
Contraints sind Eigenschaften von Tabellenfeldern wie zum Beispiel das

NotNull - Constraint
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#22

Re: Zwei Tabellen mit einander Verknüpfen

  Alt 3. Feb 2005, 14:51
Zitat von alcaeus:
Nur weil es mich interessiert: ist die Abfrage ohne INNER JOIN langsamer oder so, oder warum ist sie schlechter? Ich verwende nämlich fast nie INNER JOINs, sondern immer die "schlechtere" Variante.
Beide Syntax Varianten werden Datenbank intern auf den gleichen Ausführungsplan zurückgeführt.
Vom Ergebnis und der Geschwindigkeit sind sie also gleich.

Der Vorteil der INNER JOIN Syntax liegt darin
* man erkennt sofort, dass ein JOIN zwischen 2 (oder mehr) Tabellen vorliegt
* die WHERE Bedingung bleibt sauber; man kann also leichter im Program zur Laufzeit Where-Bedingungen anfügen
* bei JOINs über 3 (oder noch mehr) Tabellen fällt es wesentlich leichter alle Keyfelder anzugeben
Nachteil der "alten" Syntax
* bei JOINs über 3 (oder noch mehr) Tabellen vergisst man bestimmt irgendeine WHERE Bedingung.
man merkt den Fehler oft erst im Echtbetrieb, wenn plötzlich 8 Datensätze da sind, wo man nur 1 erwartet hat
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#23

Re: Zwei Tabellen mit einander Verknüpfen

  Alt 3. Feb 2005, 14:52
Ach so. Muss einem ja auch mal gesagt werden.

Ich glaube, dann hätte ich erstmal alles, was ich brauche. Die eiegntliche Verknüpfung der Datensätze in den Tabellen erfolgt dann über die Abfrage mittels eines INNER JOINs, sehe ich das richtig?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Zottel
(Gast)

n/a Beiträge
 
#24

Re: Zwei Tabellen mit einander Verknüpfen

  Alt 3. Feb 2005, 14:55
Zitat von Tyrael Y.:
PS: mehr Infos darüber überall im I-Net unter dem Stichwort
"Normalisierung" erhältlich
jep. das weiss ich. aber ich gehe davon aus, das laut aufgabenstellung luckie sich noch nicht mit den normalformen beschäftigen will.
also reicht eine 1:n beziehung für lernzwecke vollständig aus. Wenn er dann hinterher eine normalisierung vornehmen will und doppelnennungen entfernen will, kann er das ja immer noch mit einer n:n machen. aber ich glaube, ihr habt ein wenig weiter gedacht, als die aufgabe von lukie gedacht war. vielleicht bin ich aber auch auf dem holzweg. kann ja auch sein....

aber recht gebe ich euch, das wenn man keine doppelnennungen haben will, man um eine n:n nicht rumkommt. aber das hieße 3 tabellen zum verknüpfen. was für rookies zum lernen schon wieder ein schritt weiter ist.
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#25

Re: Zwei Tabellen mit einander Verknüpfen

  Alt 3. Feb 2005, 15:00
eine n:n - Beziehung in zwei 1:n -Beziehungen aufzulösen und eine Zwischentabelle zu nutzen macht man nicht zum Spaß, sondern um

1. die Datenbank konsistent zu halten

2. weniger Arbeit bei der Implementierung zu haben


mfg
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#26

Re: Zwei Tabellen mit einander Verknüpfen

  Alt 3. Feb 2005, 15:02
Ich markiere das hier mal als für mich erledigt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Strophi

Registriert seit: 15. Okt 2004
Ort: Recklinghausen
33 Beiträge
 
#27

Re: Zwei Tabellen mit einander Verknüpfen

  Alt 4. Feb 2005, 12:03
Hi,

die 'schlechte' Variante ist ein Cross-Join, also jeder mit jedem, und dann werden die DS aus dem Result-Set gestrichen, die dem Where-Ausdruck nicht entsprechen.
Der Inner-Join macht keinen Cross-Join, ist deswegen performanter.

mfg

Strophi
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

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

Re: Zwei Tabellen mit einander Verknüpfen

  Alt 4. Feb 2005, 15:06
Zitat von Luckie:
Was sind den jetzt Contrains?
Auch wenn "das Thema für dich erledigt ist" noch etwas zu den Fremdschlüsseln. Diese werden von mySQL seit Version 3.23.44 unterstützt (aber nur bei InnoDB-Tabellen) und müssen dann natürlich auch als solche angegeben werden. Hier mal zwei Tabellen:

SQL-Code:
CREATE TABLE lieferanten
                    (id INT auto_increment,
                    name VarChar(100),
                    PRIMARY KEY (id)
) TYPE=INNODB;

CREATE TABLE artikel
                   (id INT auto_increment, li_id INT,bezeichnung VarChar(100),
                   PRIMARY KEY (id),
                   INDEX li_ind (li_id),
                   FOREIGN KEY (li_id) REFERENCES lieferanten(id)
                     ON DELETE CASCADE
) TYPE=INNODB;
Wie man sieht ist die Tabelle artikel über einen FOREIGN KEY mit einer Referenz auf die ID aus lieferanten versehen.
Als bedingung ist eingetragen "ON DELETE CASCADE". Was hat dies zu bedeuten fragt sich nun das Luckie *g*
Ganz einfach. Wenn aus der Tabelle lieferanten ein Datensatz gelöscht wird, werden automatisch alle Arikteldatensätze gelöscht bei denen das Feld li_id den gleichen Wert hat wie die ID des gelöschten Lieferanten-DS.

Ausser "Cascade" gibt es noch andere Dinge wie man machen kann:
  • RESTRICT -> Ein "Master" Datensatz kann nicht gelöscht werden wenn es noch abhängige DS gibt
  • CASCADE -> Siehe oben
  • SET NULL -> Das Feld des FOREIGN Keys (li_id) wird auf NULL gesetzt
  • NO ACTION -> nix
  • SET DEFAULT -> Das Feld wird auf den angegebenen Defaultwert gesetzt.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#29

Re: Zwei Tabellen mit einander Verknüpfen

  Alt 4. Feb 2005, 15:09
Ah ja. das war doch schon mal eine wertvolle Information.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#30

Re: Zwei Tabellen mit einander Verknüpfen

  Alt 4. Feb 2005, 16:45
Doch noch mal eine Frage. das mit den Fremdschlüssel spielt aber nur beim Löschen eine Rolle oder? Bei Abfragen spielt es keine Rolle oder?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 02:57 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