Announcement

Collapse
No announcement yet.

Master-Detailtabelle, sind Verbindungen vorhanden?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Master-Detailtabelle, sind Verbindungen vorhanden?

    <PRE>Hallo zusammen</PRE>
    <PRE>Ich arbeite mit Delphi und Interbase 7.0. Ich habe diverse Master und Detailtabellen erstellt und die Datenkonsistenz mit entsprechenden Schlüsseln gelöst. Es darf kein Detaildatensatz gelöscht werden, wenn er noch irgendwo mit einem Masterdatensatz verlinkt ist.</PRE>
    <PRE>Ich will im Delphi-Programm das Löschen unterbinden wenn entsprechende Links vorhanden sind (Bevor ein Löschvorgang überhaut ausgeführt wird). Wie kriege heraus ob ein Detaildatensatz überhaupt hgelöscht werden darf?</PRE>
    <PRE> </PRE>
    <PRE>Gruss Peter Dubach</PRE>

  • #2
    Hi Peter,<BR><BR>
    das kommt etwas auf deine Struktur an.<BR>
    In einer 1 : n Beziehung (bzw. klassisch Master - Detail) sollte es ja keinen Datensatz in der Detail - Tabelle ohne Master geben. Damit dürfte kein Detail - Datensatz gelöscht werden.<BR>
    Wenn du allerdings Detail - Daten ohne Master - Datensatz zulässt, dann reich doch ein<BR>
    Master_Id > 0<BR>
    aus.<BR>
    Viielleich kannst du ja mal die Metadaten deiner Tabellen posten.<BR><BR>
    Gruß, Fran

    Comment


    • #3
      Hi Frank,
      Besten Dank für die Antwort. Es handelt sich nicht um die klassische Master-Detail-Verknüpfung.

      In der Detailtabelle STSDATEN sind zum Beispiel diverse gültige Stundenansätze definiert (Personalabteilung) worden. In den Mastertabellen "Mitarbeiterdaten", "Externe Servicearbeiten", "Interne Servicearbeiten" etc. können dann diese gültigen Stundenansätze entsprechend parametriert werden.

      Im Laufe des Projekts können weitere "Master-Tabellen" dazukommen. Ziel ist es, dass ich nicht bei jeder weiteren Mastertabelle wo ein Stundenansatz parametriert wird die Ueberprüfungsroutine anpassen muss.

      Gruss Pete

      Comment


      • #4
        Hi Peter,<BR><BR>
        wie sieht denn dann die Verknüpfung aus.<BR>
        Wenn ich es richtig verstehe, hast du dann in der Tabelle STSDATEN Felder wie MITARBEITERDATEN_ID etc., die entweder gültige ID's oder den Wert NULL haben. Und wenn irgendein Feld (FK) nicht NULL ist, darf nicht gelöscht werden?<BR>
        Aus meiner Sicht wäre dann ein Before Delete Trigger mit einer Exception angebracht.<BR>
        Wenn du die Info vorher schon brauchst und in der Quelle nichts mehr ändern willst, bleibt nur noch eine Stored Procedure [CAN_DELETE_FROM_STS_DATEN(ID)], die du vor dem Löschen aufrufst. Dann brauchst du immer nur die SP, nicht aber die Source ändern.<BR><BR>
        Fran

        Comment


        • #5
          Nachtrag...<BR>
          mir fällt noch ein, dass man auch ein computed field (z.B. CAN_DELETE) nehmen kann. (Da ich Firebird benutze, weiss ich allerdings nicht genau, inwieweit Interbase dies unterstützt.)<BR>
          Fran

          Comment


          • #6
            Hi Frank,

            Besten Dank für die Unterstützung. Im Moment fahre ich mit dem eingeschlagenen Kurs fort. Ich benutze eine SP wo ich die entsprechenden Mastertabellen "prüfe". Ich habe gedacht, dass vielleicht über die Systemtabellen noch etwas zu machen sei.

            Gruss Pete

            Comment

            Working...
            X