![]() |
Re: Zwei Tabellen mit einander Verknüpfen
Contraints sind Eigenschaften von Tabellenfeldern wie zum Beispiel das
NotNull - Constraint |
Re: Zwei Tabellen mit einander Verknüpfen
Zitat:
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 |
Re: Zwei Tabellen mit einander Verknüpfen
Ach so. Muss einem ja auch mal gesagt werden. :zwinker:
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? |
Re: Zwei Tabellen mit einander Verknüpfen
Zitat:
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. |
Re: Zwei Tabellen mit einander Verknüpfen
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 |
Re: Zwei Tabellen mit einander Verknüpfen
Ich markiere das hier mal als für mich erledigt.
|
Re: Zwei Tabellen mit einander Verknüpfen
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 |
Re: Zwei Tabellen mit einander Verknüpfen
Zitat:
SQL-Code:
Wie man sieht ist die Tabelle artikel über einen FOREIGN KEY mit einer Referenz auf die ID aus lieferanten versehen.
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; 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:
|
Re: Zwei Tabellen mit einander Verknüpfen
Ah ja. das war doch schon mal eine wertvolle Information. :thumb:
|
Re: Zwei Tabellen mit einander Verknüpfen
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?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 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