![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: SQLQuery
Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
Hallo,
können zwei Tabellen (A, B) gegenseitig zu einander in Beziehung stehen? Ein FK der Tabelle A zeig auf die Tabelle B, und der FK der Tabelle B zeigt auf die Tabelle A? Oder ist das keine gute Idee? Danke! |
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
Kommt drauf an. Normalerweise ist das ein Indiz, das etwas am Design faul ist, muss aber nicht. Nenn mal ein konkretes Beispiel.
|
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
Tabelle Alarm
--------- id alarmdatetime fk_jobid Tabelle Job --------- id job fk_alarmid 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. |
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
Ich würde hier mit einer Zwischentabelle arbeiten.
Aber die Rückverknüpfung ist eigentlich nicht notwendig
SQL-Code:
Delete from alarm a where a.<pk> in ( select j.<pk> from job j where j.<fk> = a.<pk>);
|
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
Ok...
|
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
mehrere Alarme können auf einen Job verweisen und wenn ich einen Job lösche, muss ich ebenfalls zugehörige Alarme löschen. Ist das DB-technisch gesehen nicht die gleiche Beziehung, will heißen, der FK in Jobs, der ja nur auf ein Elemant in Alarm zeigen könnte ist eh überflüssig?
|
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
Zitat:
Angenommen, man hätte sowas wie "Roter Alarm", der pro Job nur einmal vorkommen kann und dessen Eigenart unabhängig von den Merkmalen der gesamten Alarmliste je Job ist, könnte man sowas vielleicht gebrauchen. |
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
Also pro Job mehrere Alarme? Ok, also der FK in der Alarmtabelle auf die Jobs. Klar.
Aber wozu hat dann ein Job eine Alarm-FK? Zum Löschen *aller* Alarme, wo die FK_AlarmID doch nur auf einen Alarm zeigt? Verstehe ich nicht. Löschen eines Jobs 'JID'
Code:
Hab ich da was falsch verstanden?
delete from Alarme where FK_JobID='JID'
delete from Job where ID = 'JID' |
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
Ne, ist schon richtig so, alles richtig verstanden... danke! :thumb:
|
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
eine gute Gelegenheit sich mal hiermit zu beschäftigen ;-)
![]() |
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. |
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
Zitat:
Delphi-Quellcode:
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.
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; |
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.
|
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
Zitat:
Gruß K-H |
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 = ... |
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
Zitat:
Zitat:
Zitat:
|
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
Zitat:
|
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. :!::!::!::!::!::!::?: |
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.
|
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
Zitat:
Durch Zitat:
Gruß K-H |
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
Zitat:
Delphi-Quellcode:
Ich plädiere auch für Letzteres. Denn die erste Option ergibt einen Speicherüberlauf :stupid:.
procedure DuHastRecht(const WahrOderFalsch : Boolean);
begin if WahrOderFalsch then begin Writeln('Du hast recht'); DuHastRecht(WahrOderFalsch); end; end; |
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
Du hast Recht. :mrgreen:
|
AW: Können zwei Tabellen gegenseitig zu einander in Beziehung stehen?
vielleicht habe ich es überlesen , aber Foreign Keys können das löschen der anhängigen Records erledigen wenn man den FK mit ON DELERE CASCADE erzeugt
![]() mfg Hannes |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:49 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 by Thomas Breitkreuz