Hallo!
Ich habe mit Datenbanken bisher nur in PHP (hauptsächlich im Rahmen der Entwicklung der EE-Software) gearbeitet. Das war recht einfach, weil alles ziemlich linear ablief. Nun wollte ich mich mal mit Datenbanken bei "normalen" Anwendungen beschäftigen. Als Lernanwendung habe ich mal ganz einfallslos eine Filmdatenbank gewählt.
Mein Problem ist prinzipieller Natur und ich muss dafür auch ein bisschen ausholen
Ich habe nun drei Tabellen:
- Movies
- Id
- Title
- Genres
- Id
- Title
- Movies_Genres
- Movie_Id
- Genre_id
Die erste beiden sind klar, die letzte wahrscheinlich auch, sie speichert, welche Genres zu welchen Filmen gehören.
In meiner Anwendung habe ich für Filme und Genres jeweils zwei Klassen. Jeweils eine Klasse, die keine Ahnung von der DB hat, sondern einfach einen Film / ein Genre darstellt, z.B.
Delphi-Prism-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type Genre = public class public property Id : Int64 read fId; property Title : String read fTitle write SetTitle; property IsChanged : Boolean read fIsChanged; method ToString: String; override; end; |
Und ich habe jeweils eine (statische) Klasse, welche für die Zugriffe auf die Datenbank zuständig ist, z.B.:
Delphi-Prism-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| type FbGenre = public static class public class method Init(aConnection : DbConnection); class method Create(aTitle : String) : Genre; class method Update(gs : IEnumerable<Genre>); class method Delete(gs : IEnumerable<Genre>); class method Get(m : Movie) : List<Genre>; class method Get(whereClause : String; params parameters : Array of ParamNameValue) : List<Genre>; end; |
Damit habe ich, denke ich, die Datenbank-Zugriffe recht sauber vom Rest getrennt.
Änderungen an den Instanzen werden nicht direkt in die Datenbank geschrieben, sondern beim Schließen der Anwendung wird auf "IsChanged" geprüft und falls das wahr ist, der Datensatz in der DB aktualisiert.
Und hier ist mein Problem:
Wie mache ich das, wenn ein Genre zu einem Film hinzugefügt oder entfernt wird? Hält man in einem solchen Fall eine Liste, welche die hinzugefügten und gelöschten "Verbindungen" speichert und aktualisiert auch dann die DB erst am Schluss? Falls ja: Wo würde ich diese Liste in meiner Klassenstruktur einbauen. In der Movie-Klasse hat sie IMHO nix verloren, weil diese ja nichts von der Datenhaltung wissen soll.
Ich hoffe, ich konnte mein Problem darstellen
Grüße
Christian
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".