Modellierung - wie ists besser?

  • Heyho,

    folgendes (modellierungstechnische) Problem quält mich: Ich habe derzeit die Entitäten Honorarnote, Rechnungsposten, und Preis. Auf einer Honorarnote können mehrere Rechnungsposten stehen, ein Rechnungsposten kann mehrere Preise haben, es wird über ein Date-Attribut (in Preis) ermittelt, welcher der gerade aktuelle ist. Problem bei einer naiven Implementierung (so wie bei mir leider derzeit modelliert *hust*) über eine Relation-Tabelle in der die Primarys von Honorarnote und Rechnungsposten stehen, wird der zum Zeitpunkt der Honorarnotenerstellung gültige Preis nicht mitgespeichert (d.h. wenn ich die Honorarnote 2 Wochen später aus dem Archiv aufrufe, und zwischenzeitlich ein neuer Preis-Tupel für einen enthaltenen Rechnungsposten eingefügt wird, stimmt die Honorarnote nicht mehr mit der damals erstellten überein).

    Jetzt die Frage: Wie lös ich das Problem am elegantesten: in der Relation-Tabelle die Preis-ID mitspeichern, oder über einen select nachsehen, welcher Preis zum Ausstellungsdatum der Honorarnote gültig war?

  • ich denke datentechnisch wäre es sicher kleiner wenn man sich den preis über timestamps selecten tut, aber wenn bei der wartung mal einer verloren geht oder es sich gerade irgendwie überschneidet ist es bestimmt fehleranfälliger...

    ich würde es in den selben datensatz tun, weil man auch kundenspezifisch den preis justieren kann (nebenleistungen?) und weil beim export nur ein table exportiert werden muss und nicht mehrere...

    aber ich hoff es kommen noch andere kommis :)

    Thomas


  • Jetzt die Frage: Wie lös ich das Problem am elegantesten: in der Relation-Tabelle die Preis-ID mitspeichern,


    Das ist auf jedenfall 'elegenater' in der Query


    oder über einen select nachsehen, welcher Preis zum Ausstellungsdatum der Honorarnote gültig war?


    Das ist eleganter vom Design, sonst hast an zwei Stellen quasi das selbe stehen.

    Wennst jetzt in die Relationstabelle Honorarnote und Rechnungsposten reingejoint hast, sollte es doch eh kein Problem sein noch den korrekten Preis reinzujoinen (mit ein/zwei Funktionen in den Join-Bedingungen)

    µC-Leitung

  • so einfach ist der join auch nicht: in Preis hab ich ein Attribut (Date) "giltAb" (wodurch implizit klar ist welcher preis der gerade aktuelle ist, aber: )- wie kann ich denn den korrekten datensatz für ein gegebenes Datum am besten raus-selecten? (steh da irgendwie auf der leitung...)

  • Du könntest eine Subquery reinjoinen die ca. so aussieht

    Code
    (SELECT * FROM preis where posten = x and datum = (SELECT MAX(datum) FROM preis where giltab <= z and posten = x group by posten))


    wobei x die postenID und z das Datum der Honorarnote ist.
    Ich hoffe ich habe dein Relationsschema da schön umgemappt :)

    Ob das ganze jetzt funktioniert kann ich jetzt ohne wirkliches test nicht sagen

    µC-Leitung

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!