![]() |
Datenbank: SQLite • Version: 3.8.x • Zugriff über: FireDAC
Foreign Key: Herausfinden wieviele childs es gibt
Moin :)
Ich habe eine SQLite DB die etwa diese Struktur hat:
Code:
Code dreißt geklaut von
CREATE TABLE album(
albumartist TEXT, albumname TEXT, albumcover BINARY, PRIMARY KEY(albumartist, albumname) ); CREATE TABLE song( songid INTEGER, songartist TEXT, songalbum TEXT, songname TEXT, FOREIGN KEY(songartist, songalbum) REFERENCES album(albumartist, albumname) ); ![]() Jetzt tritt der Fall auf, das ich mit
Delphi-Quellcode:
einen Datensatz lösche (hier im Bsp. einen Song) und es im "schlimmsten" Fall dazu kommt, dass für einen Datensatz im Parent-Table (hier im Bsp. ein Album) keine Childs (Songs) mehr existieren. Dann möchte ich den Datensatz (Album) löschen, da er keine Childs mehr hat:
FDQuery1.Delete;
Geht das auch mit "Bordmitteln" oder muss ich da SQL-Befehle verwenden? Habe bis jetzt noch keine Möglichkeit gefunden, die Anzahl der Childs zu ermitteln. Entschuldigt bitte meinen begrenzten Wortschatz, ich beschäftige mich erst seit neustem mit SQLite/FireDAC/SQL 8-) Gruß, Lukas |
AW: Foreign Key: Herausfinden wieviele childs es gibt
Da die Datenbank als einzige weiß, wieviele Datensätze noch da sind, wirst du wohl die Datenbank fragel müssen -> SQL
SQL-Code:
Am geschicktesten ist es einen Trigger auf die Tabelle song zu legen.
SELECT COUNT(*)
FROM song WHERE songartist = :artist AND songalbum = :album |
AW: Foreign Key: Herausfinden wieviele childs es gibt
Allerdings fällt mir gerade auf, dass du mit der Struktur Probleme mit einer Kompilation bekommst (Album mit Songs von unterschiedlichen Künstlern), denn da ist der Albumartist und der Songartist unterschiedlich ;)
|
AW: Foreign Key: Herausfinden wieviele childs es gibt
Ich würde dem Album eh einen Primary Key verpassen und die FK-Beziehung des Songs darüber laufen lassen. Dann hätte man gleich das Problem mit der Compilation erschlagen.
|
AW: Foreign Key: Herausfinden wieviele childs es gibt
Das ist nicht mein Code! Man beachte meine Randnotiz :wink: Ich wollte meine supder-strenggeheime-DB nur nicht preisgeben :twisted: Es ging mir nur um das Prinzip mit dem Foreignkey. Ich dachte mir das es vllt. eine einfache Möglichkeit gibt die Childs zu ermitteln und das eben mit Bordmitteln. Da ich bis jetzt fast alles ohne SQL-Befehle mache, wollte ich dieses Konzept nicht brechen :lol:
Da fällt mir ein:
Delphi-Quellcode:
Ungetestet, ist mir eben eingefallen. Muss ich mal ausprobieren.
if not FDQuery2.FindKey(FDQuery1.Fields[0].Value, FDQuery1.Fields[1].Value) then
FDQuery1.Delete; |
AW: Foreign Key: Herausfinden wieviele childs es gibt
Na dann. Mach es trotzdem. Selbst beim 'klauen' kann man was lernen.
Deine Frage nach der Anzahl ist kein Datum, welches man in einer Datenbank halten sollte, sondern eines, welches man zu Informationszwecken ermittelt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 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