SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 22.05.2013, 23:55:16
matze90 matze90 ist offline
Anfänger
 
Registriert seit: May 2013
Alter: 34
Beiträge: 5
Workbench - 3 Tabellen miteinander verbinden

Hey Leute,

am besten erkläre ich euch mein Problem einmal mit anhand eines Beispiels:
Es gibt eine Tabelle "Fahrzeuge" mit diversen Attributen, die jedes Fahrzeug besitzt. Der PK sei "Fahrzeug_id". Außerdem besteht eine Tabelle "Motorräder" und eine Tabelle "PKW". Die PK dieser Tabellen sind ebenfalls "Fahrzeug_id". Ein Fahrzeug kann also entweder ein Motorrad oder ein PKW sein (mit den zugehörigen Attributen). Erstelle ich zwei 1:n Beziehungen (zwischen Fahrzeug<->PKW und Fahrzeug<->Motorräder), zeigt die MySQL Workbench folgende Fehlermeldung an:
"ERROR 1451: Cannot delete or update a parent row: a foreign key constraint fails"
Beseitigen kann ich diese Fehlermeldung nur, wenn in beiden Tabellen (PKW und Motorräder) jeweils alle Fahrzeuge aufgeführt werden (alle IDs). Wie formuliere ich am effizientesten eine "Entweder-oder-Beziehung"? Vielen Dank schonmal im Voraus!

Matze
Mit Zitat antworten
  #2  
Alt 23.05.2013, 10:09:04
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
AW: Workbench - 3 Tabellen miteinander verbinden

Hallo und willkommen hier im Forum.


Wie wäre es mal mit der (kompletten) Struktur der drei Tabellen?
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #3  
Alt 23.05.2013, 12:17:19
matze90 matze90 ist offline
Anfänger
 
Registriert seit: May 2013
Alter: 34
Beiträge: 5
AW: Workbench - 3 Tabellen miteinander verbinden

Inwiefern "komplett"?

Fahrzeuge
PK Fahrzeug_id
Sitzpläte
Gewicht
Baujahr

PKW
PK Fahrzeug_id
Kofferraumgröße
(...)

Motorräder
PK Fahrzeug_id
(...)

Die Datenbank dreht sich nicht wirklich um Fahrzeuge, die Problematik bleibt aber die gleiche. ;)
Mit Zitat antworten
  #4  
Alt 23.05.2013, 12:35:13
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
AW: Workbench - 3 Tabellen miteinander verbinden

Zitat:
Zitat von matze90 Beitrag anzeigen
Inwiefern "komplett"?
Da man damit besser Dein Problem veranschaulicht bekommt. Mit den (wenigen) Informationen kommt man nicht weiter.
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #5  
Alt 23.05.2013, 13:13:52
sysop sysop ist offline
Member
 
Registriert seit: Mar 2004
Ort: wien
Beiträge: 512
AW: Workbench - 3 Tabellen miteinander verbinden

Zitat:
Inwiefern "komplett"?

Motorräder
PK Fahrzeug_id
(...)
Hällst du das für eine komplette Angabe? (...) heist also, wir dürfen raten?

Da ist schon in der Grundstruktur der Datenbank der Wurm (eher eine Boa) drinnen (es sei denn, ich verstehe da was falsch).
Eigenschaften werden da auf alle 3 Tabellen verteilt, gehören aber entweder nur in Fahrzeuge (sofern sie die Eigenschaften verwalten soll) oder in PKW und Motorrad.
Die ID=1 aus PKW und die ID=1 aus Motorrad können in Fahrzeuge nie gemeinsam abgebildet werden, weil da die Fahrzeug_id (also hier die 1) ein primary Key ist und nur einmal vorkommen darf.

Also Grundstruktur überdenken und die Daten normalisieren.
Wenn du uns sagst, was du erreichen möchtest, können wir dir sicher auch bei der Planung der Datenbank helfen.

Ratzfatz könnte man dein Problem wohl dadurch lösen, indem du den primary Key aus Fahrzeuge entfernst, weil das keine 1:n sondern eine n:m Beziehung ist.


PS
Füge den Tabellen Motorrad und PKW die Spalte Eigenschaft_id hinzu (kein PK) und verknüpfe sie mit Fahrzeuge.Fahrzeug_id. Dann kannst du gemeinsame Eigenschaften auf beide Tabellen verteilen.
__________________
Gruss sys ;-)
Ich möchte wie mein Grossvater sterben, lächelnd und schlafend, nicht schreiend und weinend, wie sein Beifahrer.

Geändert von sysop (23.05.2013 um 13:37:38 Uhr)
Mit Zitat antworten
  #6  
Alt 23.05.2013, 13:29:24
matze90 matze90 ist offline
Anfänger
 
Registriert seit: May 2013
Alter: 34
Beiträge: 5
Danke schonmal! Ich würde halt gerne die Tabelle Fahrzeuge mit 2 Tabellen verbinden. Je nachdem ob man dann ein Motorrad einträgt oder ein PKW soll die jeweilige Tabelle damit verknüft werden. In einem Buch habe ich folgendes Beispiel gefunden, welches die Thematik gut beschreibt:

Flugapparate
FNr | Klasse |Fluggerät | Alter | Plätze
1| S |Segelflieger | 5 | 1
2 | M | Sportflugzeug | 3 | 4
4 | S | Segelflieger | 2 | 2
5 | M | Sportflugzeug | 7 | 2

Segelflugzeuge
FNr | Spannweite
1 | 8
4 | 10

Motorflugzeuge
FNr | Antriebsart
2 | Propeller
5 | Düse


Kurzschreibweise:
Flugapparate (FNr, Fluggerät, Alter, Plätze)
Segelflugzeuge (FNr, Spannweite)
Motorflugzeuge (FNr, Antriebsart)

Hier gibt anscheinend das "diskreminierende" Attribut "Klasse" an, in welcher spezialisierten Tabelle das Tupel zu finden ist.
Mit Zitat antworten
  #7  
Alt 27.05.2013, 17:47:28
matze90 matze90 ist offline
Anfänger
 
Registriert seit: May 2013
Alter: 34
Beiträge: 5
AW: Workbench - 3 Tabellen miteinander verbinden

das mit der "Eigenschaft_id" in den Tabellen PKW und Motorräder funktioniert leider nicht. Ich kein keine Verknüpfung zur Fahrzeuge Tabelle erzeugen.
Mit Zitat antworten
  #8  
Alt 28.05.2013, 10:34:21
sysop sysop ist offline
Member
 
Registriert seit: Mar 2004
Ort: wien
Beiträge: 512
AW: Workbench - 3 Tabellen miteinander verbinden

Sind die Feldeigenschaften in Eigenschaft_id und Fahrzeug_id ident (Länge etc)?

Zitat:
Danke schonmal! Ich würde halt gerne die Tabelle Fahrzeuge mit 2 Tabellen verbinden
Um was zu erreichen? Das ist mir schlicht noch nicht klar um einen vernünftigen Rat geben zu können.
Verknüpfungen machen nicht in jedem fall Sinn und können manchmal sogar eher hinderlich sein.

In deinem Beispiel (Fluggeräte) wird die FNr sicherlich manuell vergeben (also kein Auto-increment). könnte das der Fehler in deinem Versuch sein?
Sinn der Verknüpfung bei den Flugapparaten ist es, dass man kein Flugzeug angeben kann, das nicht vorher eindeutig als Segelflugzeug oder Motorflugzeug definiert wurde. Es muss also zuerst ein einer der beiden Tabellen definiert werden und kann dann erst in die Tabelle Flugapparate eingetragen werden und Eiegenschaften zugewiesen bekommen.

Die Fehlermeldung aus deinem ersten Post weist darauf hin, dass du genau den Fehler bei deinen Fahrzeugen gemacht hast. Es scheint eine Fahrzeug_id in Fahrzeuge eingetragen zu sein, die nicht in einer der Tabellen PKW oder Motorrad definiert wurde oder doppelt vorhanden ist.

Faustregel:
Solche Beziehungen macht man vor der Datenanlage. Sind schon Daten vorhanden, kommt es u.U. zu genau deinem Problem, weil die Datenbank die Einträge auf Richtigkeit prüft.
__________________
Gruss sys ;-)
Ich möchte wie mein Grossvater sterben, lächelnd und schlafend, nicht schreiend und weinend, wie sein Beifahrer.
Mit Zitat antworten
  #9  
Alt 01.06.2013, 16:28:10
matze90 matze90 ist offline
Anfänger
 
Registriert seit: May 2013
Alter: 34
Beiträge: 5
AW: Workbench - 3 Tabellen miteinander verbinden

Es scheint eine Fahrzeug_id in Fahrzeuge eingetragen zu sein, die nicht in einer der Tabellen PKW oder Motorrad definiert wurde oder doppelt vorhanden ist.

Das Problem ist eher, dass die Beziehung nur funktioniert, wenn in beiden Klassen (PKW und Motorräder) die Fahrzeug_id vorhanden ist. Somit hätte ja ein Fahrzeug die Eigenschaften eines Motorrads und eines PKWs. Habt ihr eine Idee, wie man eine "Entweder PKW oder Motorrad"-Beziehung umsetzt?
Mit Zitat antworten
  #10  
Alt 03.06.2013, 12:01:23
sysop sysop ist offline
Member
 
Registriert seit: Mar 2004
Ort: wien
Beiträge: 512
AW: Workbench - 3 Tabellen miteinander verbinden

Ich finde das Datenbankdesign etwas verunglückt, mein Vorschlag sähe ca so aus:

Tabelle Fahrzeugart:
FART_AUTO_ID | Bezeichnung | F_Eigenschaft1 | F_Eigenschaft2.....
1 | PKW 4 Räder | ...
2 | Motorrad 2 Räder | ...
3 | LKW 2 Achsen | 4 Räder
4 | LKW 4 Achsen | 8 Räder
5 | PKW 3 Räder | ...
6 | Flugzeug gross | 300 Passagiere
7 | Flugzeug klein | 4 Passagiere

Tablle Fahrzeuge
FAHRZEUGE_AUTO_ID | FART_AUTO_ID | Spritart | Eigenschaft1 | Eigenschaft2 | Eigenschaft3 ....
1 | 1 | BENZIN | Suzuki | 100PS | .....
2 | 4 | DIESEL | MAN | 580 PS....
3 | 6 | KEROSIN | Boing |

Spritart z.B. noch in eigene eigene Tabelle, ist aber kein wirkliches muss denke ich.
Damit deckst du deine Anforderungen aus dem Beispiel oben ab und sparst dir eine Tabelle, bist Flexibel und kannst nach belieben Felder hinzufügen ohne die beziehungen kaputt zu machen etc..
__________________
Gruss sys ;-)
Ich möchte wie mein Grossvater sterben, lächelnd und schlafend, nicht schreiend und weinend, wie sein Beifahrer.
Mit Zitat antworten
Antwort

Stichworte
beziehung, entweder, tabelle


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mySQL Tabellen richtig miteinander verknüpfen (LEFT JOIN) ilpepe82 MySQLi/PDO/(MySQL) 1 27.01.2009 10:53:59
Join Tabellen Verbinden wuptal MySQLi/PDO/(MySQL) 2 30.07.2008 11:42:33
2 Tabellen miteinander verbinden CPU8080 MySQLi/PDO/(MySQL) 5 11.02.2006 14:53:45
Wie viele Tabellen kann man miteinander verknüpfen Sertl MySQLi/PDO/(MySQL) 11 16.01.2004 16:33:39
2 Funktionen miteinander verbinden Grata PHP Grundlagen 2 30.12.2003 19:19:45


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:20:16 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt