Hallo Liebe Mitwissende,
ich blick’s nicht.
Wenn ich irgendeine Relation habe, dann definiere ich entsprechend zwei, oder bei einer n:m-Relation drei Tabellen, die jeweils einen Primärschlüssel und einen Sekundärschlüssel (bei n:m zwei Sekundärschlüssel) tragen. ok.
Mit einem db Werkzeug z.B. phppgadmin lege ich nun diese Tabellen nun physisch in der Datenbank an. ok.
Angenommen alle Tabellen sind wie auch immer gefüllt worden (auch die Fremdschlüssel ordentlich eingetragen). Möchte man nun Daten aus herauslesen, so fügt man die einzelnen Tabellen mit JOIN in der SELECT-Anweisung etc… zusammen. ok.
ABER: da fängt es schon an! Das bedeutet doch, dass das Client-Programm das Datenmodell kennen muss. Es muss wissen, das ein bestimmter Primärschlüssel als Sekundärschlüssel in einer entsprechenden Tabelle abgelegt ist.Also gibt es hier keine Trennung mehr, zwischen Anwendungsprogramm und Datenmodell. (??)
Oder programmiert man das Anwendungsprogramm so, dass es zwar ein select absetzt, aber aus einer in der Datenbank definierten View? Denn dieses kennt ja das Datenmodell - ist es ja auch nur eine select Abfrage. Aber diese wird von der Datenbank an sich selbst abgesetzt. Aber das Anwendungsprogramm muss wissen, dass es gerade genau diesen View abfragen darf. Es fehlt irgendwie so eine Trennschicht, die weiß wie sie was aus einer Datenbank rauskitzelt.
Das andere ist folgendes:
Wie geht ihr vor, wenn ihr nun einen neuen Eintrag anlegen wollt, dessen Bestandteile innerhalb der Datenbank aufgeteilt ist, und eben anhand den Primär- und Fremdschlüssel abgelegt werden muss.
Bisher habe ich in meiner Client-Anwendung selbst(!) entsprechende sql Kommandos abgesetzt, die z.B. in die erste Tabelle einen neuen Eintrag anlegen, danach die dadurch erzeugte primärID auslese, und mit dieser in die zweite Tabelle schreibe, um die Verknüpfung abzubilden. Gibt es einen JOIN in einer insert Anweisung? Und außerdem ist beim dem insert das Datenmodell wieder(!) in meiner Client-Anwendung. Wie macht ihr das?
Das letzte ist folgendes:
Wenn ich mittels dem db-Admin tool, oder im CREATE table Anweisung mit references tabelle(primkey) arbeite, dann muss ich trotzdem mit den JOINS arbeiten, nicht? Diese references haben nur Einfluss wenn ich was weglöschen möchte und nicht an die zweite Tabelle denke. Dann würde die DB einen Fehler senden und das Kommando nicht ausführen. Das Ding hilft mir weder beim Auslesen, noch beim Eintragen einer Relation. Ich muss immer selbst in die entsprechenden Tabellen schreiben. Ist das richtig?
Das ganz letzte:
Diese Interface Schicht die mir fehlt; ist das z.B. die Persistence Schicht Hibernate bei J2EE ? Muss ich also, wenn ich nicht mit J2EE arbeiten möchte, eine komplette solche Schicht entwickeln, um meine Anwendung vom Datenmodell zu entkoppeln? Die Usecases, die ich in meinem SW Entwicklungsprozess herausgearbeitet habe, die würde ich hier implementieren. Stimmt das?
oje;
Würde mich freuen was zu lesen.Danke schonmal.
Denis