Announcement

Collapse
No announcement yet.

Dopellter Primärindex???

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

  • Dopellter Primärindex???

    Hallo alle zusammen,

    Ich arbeite im Moment an einer Auftragsbearbeitung mit Paradox7.0 Datenbanken. Es gibt eine Rechnungsdatenbank und eine Positionsdatenbank(für Artikelpostionen). Beide haben einen Primärindex, die Positionsdatenbank verbinde ich mit einer Master/Detail Beziehung über die Rechnungsnummer. So weit so gut. Nun das Problem: Ein Datensatz pro Rechnungsnummer funktioniert (logisch), aber wie geht es, das ich mehrer Positionen für eine Rechnungsnummer hinbekomme???
    In einer Beispieldatenbank von Delphi5 (Mastapp) geht das auch aber wie?

    Es wäre schön wenn mir Irgendjemand weiterhalfen könnte...
    Jens

  • #2
    Hallo Jens,

    also so ganz klar ist mir das Ganze nicht...
    Ich nehme mal an, dass Du zwei Tabellen hast: eine Tabelle für den "Rechnungskopf" die z.B. so aussieht:
    Rechnungsnummer (eindeutig)
    Empfänger
    Datum

    und eine Tabelle für die Artikel, also Rechnungspositionen. Diese Tabelle sieht so aus:
    ID (eindeutig)
    FK_Rechnungsnummer (Fremdschlüssel aus Rechnungskopf)
    Bezeichnung
    Menge
    Preis

    Wenn Du dann die Master/Detail-Beziehung über Rechnungsnummer <-> FK_Rechnungsnummer herstellst, sollte es kein Problem sein, für einen Rechnungskopf beliebig viele Positionen anzulegen!!
    Oder habe ich etwas falsch verstanden??

    Gruß Silvi

    Comment


    • #3
      Hallo Silvia,

      vielen Dank erstmal für Deine Antwort. Ich denke Du hast das schon richtig gedeutet. Der Fremdschlüssel ist bei mir die Rechnungsnummer die in der Positionstabelle den Primärschlüssel bildet. Eine Artikelpositon kann ich auch je Rechnungsnummer anlegen und bei der zweiten sag es mir dann "Index Fehler" was eigentlich auch logisch ist, da ein Primärindex ja eindeutig sein sollte. In dem gennannten Beispiel von Delphi5 (Mastapp) ist der Primärschlüssel aber nicht eindeutig und ich kann nicht rausfinden die das gemacht haben(Positionstabelle von Mastapp = 1 Rechnungsnummer(Primärindex) aber mehrer Artikel). Vielleicht kennst Du dieses Beispiel ja oder könntest es Dir ja mal ansehen.

      Ich bin für jeden Rat Dankbar
      Jens

      Comment


      • #4
        Hallo Jens,

        wenn ich das recht sehe, bekommst Du Fehlermeldungen beim Anlegen von Rechnungspositionen. Dies ist, wie Du selbst bemerkt hast logisch, da für eine Rechnung die Rechnungsnummer identisch ist und Du deinen Primärschlüssel nicht verändern kannst (sonst hättest Du ja auch eine andere Rechnung).

        Dein Datenmodell sieht an der Stelle in etwa so aus:

        Tabelle Artikel (<br>
        Artikelnummer Primärschlüssel<br>
        Bezeichnung<br>
        ...<br>
        );

        Tabelle Rechnung (<br>
        Rechnungsnummer Primärschlüssel<br>
        Artikelnummer Fremdschlüssel zu Artikel<br>
        ...<br>
        );

        Zur Lösung kannst Du z.B. in der Tabelle Rechnung einen zusammengesetzten Primärschlüssel bilden, aus Rechnungsnummer und Artikelnummer. Somit kannst Du pro Rechnungsnummer mehrere Artikelnummern angeben, jedoch nicht dieselben innerhalb einer Rechnung (macht ja auch eigentlich keinen Sinn).

        Eine weitaus bessere Lösung sieht so aus:

        (1) Lasse die Tabelle Artikel wie sie ist.<br>
        (2) Aus der Tabelle Rechnung entfernst Du den Fremdschlüssel zur Tabelle Artikel (die Tabelle Rechnung besteht somit aus einem einfachen Primärschlüssel Rechnungsnummer)<br>
        (3) Füge eine neue Tabelle RechnungArtikel hinzu, die aus einem zusammengesetzten Primärschlüssel (Rechnungsnummer und Artikelnummer) besteht. Diese Tabelle ist eine sogenannte Link-Table, die zur Auflösung von Many-To-Many-Relationships verwendet wird (ein Artikel kann in mehreren Rechnungen vorkommen, eine Rechnung kann aus mehreren Artikeln bestehen)

        Gruß<br>
        Stephan Schneide

        Comment


        • #5
          Hallo Stephan,

          Alles Klar!!! Ich hatte einen Denkfehler.
          Ich hatte nicht richtig über den zusammengesetzten Primärindex nachdacht.

          Vielen Dank
          Jen
          Jens

          Comment


          • #6
            Hallo,

            warum denn so kompliziert:

            1. Tabelle RECHNUNGEN erhält das Feld RECHNUNGENID (Primärindex)<br>
            2. Tabelle ARTIKEL erhält das Feld ARTIKELID (Primärindex) und das Feld RECHNUNGENID (Sekundärindex).<br>

            Verbunden wird dann der Primärindex der Tabelle RECHNUNGEN mit dem Sekundärindex der Tabelle ARTIKEL.

            Gruß Ul

            Comment

            Working...
            X