Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   FreePascal Können zwei Tabellen gegenseitig zu einander in Beziehung stehen? (https://www.delphipraxis.net/185063-koennen-zwei-tabellen-gegenseitig-zu-einander-beziehung-stehen.html)

Dejan Vu 12. Mai 2015 19:14

AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
 
Jaaaa, passt hier nicht (imho). Ich glaube, hier wurde einmal zu viel um die Ecke gedacht, das ist alles.

Aber grundsätzlich: Pflichtlektüre.

Perlsau 12. Mai 2015 19:46

AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
 
Zitat:

Zitat von AlexII (Beitrag 1301191)
Nun ist es so, mehrere Alarme können auf einen Job verweisen dazu der FK. Und den FK in der Tabelle Job brauche ich um alle Alarme aus der Tabelle Alarm zu löschen falls ein Job gelöscht wird.

Mal ganz langsam: Es gibt eine Job-Tabelle, die hat einen PK (Primary Key). Und es gibt eine Termin-Tabelle, da gibt es neben der Spalte DATUM ebenfalls einen PK. Nun möchtest du notieren, daß ein Job mehrere Termine haben kann, ein Termin aber auch mehrere Jobs. Dafür erstellst du nun eine dritte Tabelle, die meinetwegen JOB_TERMIN heißt, spendierst ihr einen PK und richtest daneben noch die Spalten Id_Job und Id_Termin ein. In diese dritte Tabelle schreibst du nun deine Zuweisungen:
Delphi-Quellcode:
Function NeuerTermin(Const Id_Job, Id_Termin : Integer) : Boolean;
begin
  Id_Job := Query_Job.FieldByName('ID_JOB').AsInteger;
  Id_Termin := Query_Termin.FieldByName('ID_TERMIN').AsInteger;
  If Not Query_Job_Termin.Locate('ID_JOB;ID_TERMIN';VarArrayOf([Id_Job,Id_Termin]),[]) Then
  Begin
    Query_Job_Termin.Append;
    Query_Job_Termin.FieldByName('ID_JOB').AsInteger := Id_Job;
    Query_Job_Termin.FieldByName('ID_TERMIN').AsInteger := Id_Termin;
    Query_Job_Termin.Post;
    Result := True;
  End Else Result := False;
end;
Auf diese Weise kannst du nun jedem Termin mehrere Jobs zuweisen und jedem Job mehrere Termine. Wenn du nun einen Job löschen willst, dann merkst du dir dessen Id und löschst aus der Tabelle JOB_TERMIN alle Einträge, die sich auf diese Job-Id beziehen.

Dejan Vu 12. Mai 2015 20:56

AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
 
Ich glaube nicht, das er meint, das ein Termin mehrere Jobs haben kann. Wenn doch (m:n-Beziehung), hättest Du Recht.

p80286 12. Mai 2015 21:39

AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
 
Zitat:

Zitat von Dejan Vu (Beitrag 1301274)
Ich glaube nicht, das er meint, das ein Termin mehrere Jobs haben kann. Wenn doch (m:n-Beziehung), hättest Du Recht.

Wäre es ausgeschlossen, daß eine n:m Beziehung bestehen könnte, dann wäre eine solche Tabelle unnötig.

Gruß
K-H

Perlsau 13. Mai 2015 02:42

AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
 
In der Tat! Dann würde nämlich eine Tabelle mit den Spalten Termin und Job-Id vollauf genügen. Wenn dies das Anliegen des TE wäre, bräuchte er keine zusätzliche Tabelle. Es gibt sogar Grund zu der Vermutung, daß der TE das so gemeint haben könnte, denn er wollte in seiner DB-Unerfahrenheit ja lediglich die einem Job zugehörigen Termine löschen, wenn der Job gelöscht wird, und glaubte, er müsse dafür irgendwie in der Job-Tabelle vermerken, welche Termine jeder Job habe, obwohl diese Information ja bereits in der Termine-Tabelle notiert wurde. Er wußte nicht, daß man das einfach via SQL-Befehl erledigen könnte:

delete from TERMINE where ID_JOB = ...
delete from JOBS where ID_JOB = ...

Dejan Vu 13. Mai 2015 06:15

AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
 
Zitat:

Zitat von p80286 (Beitrag 1301286)
Zitat:

Zitat von Dejan Vu (Beitrag 1301274)
Ich glaube nicht, das er meint, das ein Termin mehrere Jobs haben kann. Wenn doch (m:n-Beziehung), hättest Du Recht.

Wäre es ausgeschlossen, daß eine n:m Beziehung bestehen könnte, dann wäre eine solche Tabelle unnötig.

D.h. Du gibst mir Recht.
Zitat:

Zitat von Perlsau (Beitrag 1301303)
..daß man das einfach via SQL-Befehl erledigen könnte:...

Hatten wir auch schon
Zitat:

Zitat von Dejan Vu (Beitrag 1301196)
Löschen eines Jobs 'JID'...

Wer hört auf erstes auf, dem Vorposter Recht zu geben? ;-) Ich meine, es ist Balsam für die Seele, aber spamt auf Dauer das Forum zu :lol:

Perlsau 13. Mai 2015 06:20

AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
 
Zitat:

Zitat von Dejan Vu (Beitrag 1301306)
Wer hört auf erstes auf, dem Vorposter Recht zu geben? ;-) Ich meine, es ist Balsam für die Seele, aber spamt auf Dauer das Forum zu :lol:

:?: :?: :?:

Dejan Vu 13. Mai 2015 06:35

AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
 
Na, Du sagst was Richtiges. Ich sag was, KH gibt mir Recht, Du gibst mir Recht (wiederholst das, was ich eine Seite zuvor gesagt habe). Ist ja alles kein Problem, aber irgendwie drehen wir uns im Kreis. Die Lösungen aller Lösungen ist schon genannt (keine m:n Beziehung, FK in den Terminen unnötig, Löschen über zwei DELETE-Befehle).

Jetzt können wir endlos darauf herumreiten und uns gegenseitig Recht geben, oder etwas anderes machen. Ich plädiere für Letzteres.

:!::!::!::!::!::!::?:

AlexII 13. Mai 2015 08:53

AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
 
Also ein Job kann mehrere Alarme haben, z.B. jeden Mittag um 12 Uhr, oder nur ein Mal. Und ein Alarm kann nur auf einen Job zeigen. Ist wohl ne 1:n Beziehung.

p80286 13. Mai 2015 11:05

AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
 
Zitat:

Zitat von Dejan Vu (Beitrag 1301306)
Zitat:

Zitat von p80286 (Beitrag 1301286)
Zitat:

Zitat von Dejan Vu (Beitrag 1301274)
Ich glaube nicht, das er meint, das ein Termin mehrere Jobs haben kann. Wenn doch (m:n-Beziehung), hättest Du Recht.

Wäre es ausgeschlossen, daß eine n:m Beziehung bestehen könnte, dann wäre eine solche Tabelle unnötig.

D.h. Du gibst mir Recht.

Leider Nein! da in unseren Aussagen die Schwerpunkte diametral sind.
Durch
Zitat:

Zitat von AlexII (Beitrag 1301325)
Also ein Job kann mehrere Alarme haben, z.B. jeden Mittag um 12 Uhr, oder nur ein Mal. Und ein Alarm kann nur auf einen Job zeigen. Ist wohl ne 1:n Beziehung.

Hat sich allerdings die Diskussion über n:m Relationen erledigt.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 Uhr.
Seite 2 von 3     12 3      

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