Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Foreign Key: Herausfinden wieviele childs es gibt (https://www.delphipraxis.net/182762-foreign-key-herausfinden-wieviele-childs-es-gibt.html)

ByTheTime 16. Nov 2014 16:51

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:
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)
);
Code dreißt geklaut von hier!

Jetzt tritt der Fall auf, das ich mit
Delphi-Quellcode:
FDQuery1.Delete;
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:

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

Sir Rufo 16. Nov 2014 17:03

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:
SELECT COUNT(*)
FROM song
WHERE songartist = :artist AND songalbum = :album
Am geschicktesten ist es einen Trigger auf die Tabelle song zu legen.

Sir Rufo 16. Nov 2014 17:29

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 ;)

Dejan Vu 16. Nov 2014 17:51

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.

ByTheTime 16. Nov 2014 18:20

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:
if not FDQuery2.FindKey(FDQuery1.Fields[0].Value, FDQuery1.Fields[1].Value) then
  FDQuery1.Delete;
Ungetestet, ist mir eben eingefallen. Muss ich mal ausprobieren.

Dejan Vu 16. Nov 2014 18:45

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 17:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz