Seite 1 von 1

Überraschung - Verknüpfte Primärschlüssel

BeitragVerfasst: Mo 13. Apr 2009, 22:23
von havanna
Hallo,
da es in dieser Rubrik noch keinen Eintrag gibt :o und ich selbst gerade die Tage eine Überraschung erlebte, nützte ich die Gelegenheit einen ersten Beitrag zu erfassen.
Meine Überraschung bezieht sich darauf das ich feststellen musste, dass cakePHP keine verknüpften Tabellenschlüssel unterstützt (composite primary).
In meinem Beispiel habe ich eine Tabelle immobilien. Der Primärschlüssel ist die Objektnummer. Dann gibt es eine Tabelle texte. Eine 1:n Beziehung. Der Primärschlüsssel der Tabelle texte war bisher "objektnummer" "textart".
Als ich dann einen update versuchte, war ich zuerst etwas überrascht, dass alle Texte auf einmal den gleichen Inhalt hatten. Die Ursache liegt eben darin, dass cakePHP keine verknüpften Primärschlüssel unterstützt.
Etwas dreist, finde ich z.T. die Reaktion des Cake-Teams auf entsprechende Kritik: https://trac.cakephp.org/ticket/2811
Sorry, aber ich mache jetzt seit 15 Jahren Datenbankanwendungen. Und die Verwendung verknüpfter Tabellenschlüssel ist in der Datenbank-Normalisierung gang und gebe.
Auch SAP - sicher kein low-budget-Programm - verwendet durch die Bank verknüpfte Primärschlüssel. Insbesondere was die "Nachteile" betrifft, die das Cake-Team darzustellen versucht (Geschwindigkeit) sind gerade in allen Lehrbüchern, die ich zum Thema Datenbank-Design habe, gerade anders dargestellt. Deshalb spreche ich dem Cake-Team hier auch die Kompetenz ab. Damit müssten alle Lehrbücher der letzten 15 Jahre neu aufgelegt werden. Ebenso die Dokumentation zu allen Datenbanken (Oracle, MS SQL, Interbase, MySQL, etc.).
Auch interessant in dem oben verlinkten Ticket, finde ich die Berufung auf Ruby. Meiner Meinung nach ein Armutszeugnis. Diese Reaktion sagt auch "cakePHP ist nur eine andere Implementierung des Ruby-Konzepts".

Ciao Thomas

P.S. Hoffe ja, dass das mal einer der "cake-Gurus" liest. Leider fehlt um Cake eine Art Diskussionsplattform.

Re: Überraschung - Verknüpfte Primärschlüssel

BeitragVerfasst: Sa 18. Jul 2009, 10:56
von aioon
MyISAM oder InnoDB?

außerdem hast du es inzwischen rausgefunden woran es lag?

Re: Überraschung - Verknüpfte Primärschlüssel

BeitragVerfasst: Sa 18. Jul 2009, 21:39
von havanna
aioon hat geschrieben:MyISAM oder InnoDB?

außerdem hast du es inzwischen rausgefunden woran es lag?

Hallo Alex,
Was heißt: ...woran es lag? Es ist einfach so. MyISAM übrigens - aber das wir wohl keinen Unterschied machen da das Cake-Team selbst sagt, dass es keine verknüpften Primärschlüssel unterstützt. Dazu müsste man die Modell-Klasse umstricken.
Es bleibt also nichts anderes übrig, als eine Spalte id einzufügen und diese als Primärschlüssel zu definieren.

Ciao Thomas

Re: Überraschung - Verknüpfte Primärschlüssel

BeitragVerfasst: Sa 18. Jul 2009, 21:48
von aioon
Vielen Dank für die Antwort!

Gruß
Alex

Re: Überraschung - Verknüpfte Primärschlüssel

BeitragVerfasst: Fr 6. Aug 2010, 21:08
von Chapi
Hallo

Bin neu im Forum und hoffe dass ich hier am richtigen Ort reinschreibe.
Ich habe folgendes Problem und zwar bei diesem Query:
Code: Alles auswählen
SELECT `Room`.`id`, `Room`.`hotel_id`, `Room`.`price`, `Room`.`number`, `Room`.`size`, `Hotel`.`id`, `Hotel`.`name`, `Hotel`.`number_of_room` FROM `rooms` AS `Room` LEFT JOIN `hotels` AS `Hotel` ON (`Room`.`hotel_id` = `Hotel`.`id`)  WHERE 1 = 1   ORDER BY `id` ASC

Dieser aufruf sollte mir alle Daten die in der Tabelle rooms ist ausgeben.
der Fehler der kommt ist folgender:
SQL Error: 1052: Column 'id' in order clause is ambiguous

Ich versuche kurz mal zu beschreiben um was es geht. Es soll eine HomePage (Hotel) werden, durch welche man online buchen kann.
Die Datenbankrelation ist 1:n und zwar ein Hotel hat mehrere Zimmer.
Da ich mit CakePHP erst begonnen habe gehe ich eigentlich nach Buch und schreibe den Code dann für meine Bedürfnisse um.

Die Relationen habe ich in den entsprechenden models eingetragen.

Hoffe jemand kann mir helfen, für die Hilfe oder sogar Lösung bedanke ich mich schon einmal.
Wenn jemand noch mehr Code braucht nur sagen.

Danke

Re: Überraschung - Verknüpfte Primärschlüssel

BeitragVerfasst: Sa 7. Aug 2010, 08:51
von Flo
eigentlich hättest du dafür ein neues Thema aufmachen sollen ;)

aber ich denke du hast options gesetzt bei deiner Abfrage, und ambiguous bedeutet einfach das der schlüssel 'id' auf mehrere Felder deiner Abfrage zutreffen kann. auf Room.id und Hotel.id, du musst dir halt eins von beidem aussuchen nachdem sortiert wird.

Re: Überraschung - Verknüpfte Primärschlüssel

BeitragVerfasst: Sa 7. Aug 2010, 09:22
von Chapi
danke flo es funktioniert
ok werde das nächste mal ein neues Thema anfangen
nochmals danke