Je crée un modèle db pour la génération de factures de location. La facture comprend N périodes de réservation.DB Schema: Modèle de prix versionné par rapport aux données relatives aux factures
Chaque réservation fait partie d'un modèle de prix. Un modèle de prix est un ensemble de règles qui déterminent un prix final (prix de base + prix de la saison + quantité discout + ...). Cela signifie que le prix final pour les N réservations dans une facture peut être un calcul complexe, et bien sûr je veux garder une trace de chaque aspect du calcul du prix final pour l'examen ultérieur d'une facture.
Le problème est qu'un modèle de prix peut changer dans le futur. Donc, lors de la génération de facture, il y a deux possibilités:
(a) Ne jamais modifier un modèle de prix. Il suffit de le rendre immuable en le versionnant et de se référer à une version concrète d'une facture. (B) Inscrire toutes les informations sur les prix, les remises et les extras dans la facture. Cela signifierait beaucoup de données, car une facture contient N réservations qui peuvent être en partie dans la fourchette d'un prix de saison. Fondamentalement, je décomposerais chaque réservation dans ses jours et pour chaque jour j'aurais N lignes calculant le prix de base, les réductions et les frais supplémentaires.
modèle de table possible:
Invoice
id: int
InvoiceBooking # Each booking. One invoice has N bookings
id: int
invoiceId: int
(other data, e.g. guest information)
InvoiceBookingDay # Days of a booking. Each booking has N days
id: int
invoiceBookingId: id
date: date
InvoiceBookingDayPriceItem # Concrete discounts, etc. One days has many items
id: int
invoiceBookingDayId: int
price: decimal
title: string
Ma question est, de quelle manière dois-je préfère et pourquoi.
Mes considérations:
Avec la solution (a), seraient recalculés la facture en utilisant les informations du modèle de prix chaque fois que les données sont visualisées. Je n'aime pas ça, car les algorithmes peuvent changer. Cela ne semble pas naturel pour la nature «en lecture seule» d'une facture. La gestion des versions de modèles de prix n'est pas non plus une tâche triviale et l'utilisateur doit connaître le concept de version, ce qui ajoute de la complexité aux applications. Avec la solution (b), je génère un tas de données imbriquées et ajoute beaucoup de complexité au schéma.
De quelle façon préférez-vous? Est-ce que je manque quelque chose?
Merci