2017-09-22 4 views
1

Dies ist eine eher konzeptuelle Frage:konzeptionelle SQL - Preis pro Stück und den Preis pro Gewicht

ich mit Tabellen „Produktinformation“ auf eine Datenbank arbeite und „Kauf-Transaktionen“ - jetzt die Produkt-Informationstabelle so far features "price" und die Buying-Transaction-Tabelle features "amount".

Aber einige Produkte sollen pro Stück bezahlt werden, und einige haben einen Preis pro Gewicht. Jetzt bin ich mir nicht sicher, wie das geht, ohne Dezimalwerte für Beträge zuzulassen. Soll ich die Produkte mit einer Flagge versehen, wenn sie als Preis pro Gewicht verarbeitet werden sollen und nur weitere Berechnungen im umliegenden Programm vornehmen? Das scheint ziemlich unpraktisch zu sein, da es die Aggregation in Abfragen eher unmöglich macht. Oder sollte ich Dezimalzahlen zulassen, aber in der Benutzeroberfläche verbieten, dass Dinge Stück für Stück gekauft werden, was wiederum eine Flagge erfordert? Was ist der sinnvollste Ansatz hier?

Stellen Sie sich grundsätzlich eine Datenbank mit Quittungen aus dem Einkauf von Lebensmitteln und den entsprechenden Informationen für jedes Produkt vor. Der Benutzer würde den Inhalt eines Einkaufswagens einfügen, und die Gesamtsumme würde berechnet und vom Programm ausgegeben, sowie der berechnete Preis für jeden Artikel, der pro Gewicht zu bezahlen ist.

Es tut mir leid für die Dummheit der Frage.

+0

Wenn es mir, ich würde wahrscheinlich Flagge Elemente, die eine Dezimalzahl Menge haben kann, und haben eine Art der Validierung auf die Mengenfeld, das besagt: "Wenn dieses Flag nicht gesetzt ist, lassen Sie keine Dezimalstellen zu." – phroureo

+0

Es wäre sinnvoll, ein Flag (oder UOM-Feld) auf dem Produkt zu haben, um dies anzuzeigen. Es wäre vernünftig, einen DECIMAL-Betrag zu haben. Die UI kann auf ganze Zahlen beschränkt sein, wenn die UOM des Produkts "ea" oder das Feld weight_flag "1" ist oder die Logik, die Sie verwenden möchten. Die Aggregation ist immer noch 'sum (product.price * transaction.amount) 'also keine Sorgen. – JNevill

+0

Ich stimme für das Schließen dieser Frage als Off-Topic ab, weil es sich um Geschäftsregeln und nicht um Programmierung handelt. –

Antwort

1

Hier ist, was wir für LedgerSMB tun, und ich denke, die Lösung funktioniert relativ gut.

  1. Artikel werden alle pro "Einheit" berechnet. Artikel haben einen Preis pro Einheit und einen Einheitsdeskriptor (vom Menschen lesbar).
  2. Artikel verkauft pro Stück haben eine Einheit von "Stück". Artikel verkauft pro Gewicht haben eine Einheit wie "kg", "oz", "g" oder "T"
  3. Preis und Menge sind beide numerischen Typen ohne Genauigkeit angegeben (so in mindestens PostgreSQL haben Sie keine Genauigkeitsgrenzen).

Unsere Tabellenstruktur sieht wie folgt aus etwas (für diese Frage vereinfacht)

create table parts (
    id serial primary key, 
    sku varchar not null, 
    unit barchar(5) not null, 
    sell_price numeric, 
    last_cost numeric, 
    description text, 
    obsolete bool 
); 
create unique index parts_sku_active_idx on parts(sky) where obsolete is not true; 
Verwandte Themen