AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Foreign Key: Herausfinden wieviele childs es gibt
Thema durchsuchen
Ansicht
Themen-Optionen

Foreign Key: Herausfinden wieviele childs es gibt

Ein Thema von ByTheTime · begonnen am 16. Nov 2014 · letzter Beitrag vom 16. Nov 2014
Antwort Antwort
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#1

Foreign Key: Herausfinden wieviele childs es gibt

  Alt 16. Nov 2014, 17:51
Datenbank: SQLite • Version: 3.8.x • Zugriff über: FireDAC
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 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

Gruß,
Lukas
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Foreign Key: Herausfinden wieviele childs es gibt

  Alt 16. Nov 2014, 18:03
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Foreign Key: Herausfinden wieviele childs es gibt

  Alt 16. Nov 2014, 18:29
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Foreign Key: Herausfinden wieviele childs es gibt

  Alt 16. Nov 2014, 18:51
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.
  Mit Zitat antworten Zitat
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#5

AW: Foreign Key: Herausfinden wieviele childs es gibt

  Alt 16. Nov 2014, 19:20
Das ist nicht mein Code! Man beachte meine Randnotiz Ich wollte meine supder-strenggeheime-DB nur nicht preisgeben 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

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.
Lukas
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: Foreign Key: Herausfinden wieviele childs es gibt

  Alt 16. Nov 2014, 19:45
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 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