2009-07-30 9 views
2

Sagen, ich habe eine Tabelle namens HoursChargedSQL-Entwurf - Bilanzierung von unbekannten Werten

ChrgNum(varchar(10)) 
CategoryID(uniqueidentifier) 
Month(datetime) 
Hours(int) 

CategoryID ist ein Fremdschlüssel Bezug auf eine andere Tabelle in meiner Datenbank, die nur ein Name/ID-Paarung ist. ChrgNum ist garantiert einzigartig außerhalb dieser Datenbank, und so überprüfe ich nur, ob es bereits in meiner Datenbank existiert.

Sie sollten auch wissen, dass dieses Tool mehrere verschiedene Gruppen aus einer Datenbank unterstützt (daher die global eindeutige CategoryID, da verschiedene Gruppen die Kategorien möglicherweise die gleiche Sache nennen, die ich unterscheiden musste).

Diese Tabelle wird aus einer CSV-Datei ausgefüllt. Die Idee ist, dass jede Kombination von ChrgNum, CategoryID und Month einzigartig sein wird. Der Bericht, der zum Erstellen der Importdatei ausgeführt wird, kann nur einen bestimmten Bereich (z. B. ein Jahr) anzeigen. Deshalb sucht der Algorithmus etwas wie folgt aus:

IF (ChrgNum exists in database, CategoryID exists in database, 
    combo of ChrgNum/CategoryID/Month DOES NOT exist in table HoursBurned) 
THEN add a new row for this entry 
ELSE IF (ChrgNum exists in database, CategoryID exists in database, 
    combo of ChrgNum/CategoryID/Month DOES exist in table HoursBurned) 
THEN update the existing row with the new Hours value. 

Das ist alles schön und gut, bis jetzt mein Chef will, dass ich stundenlang Konto belastet, in einem bestimmten Monat, für einen bekannten ChrgNum und einer unbekannt Kategorie.

Meine Frage ist, wie kann ich das erklären? Wenn ich einfach eine NULL CategoryID einfüge, was passiert, wenn eine völlig separate Gruppe Stunden auf die gleiche Nummer und Kategorie auflädt? Meine andere Idee war es, eine neue Tabelle für die unbekannten Kategorien zu erstellen, aber wenn ich das tue und der erste Import zwei unbekannte Kategorien hat, während der nächste eine der beiden wieder hat (was passieren kann), was mache ich?

Mein Kopf hat stundenlang herumgewirbelt. Jede Hilfe wird geschätzt!

+0

ernst: müssen Sie die verschiedenen "unbekannten" Kategorie IDs auseinander halten? Ich mag Ihre Idee, in eine Tabelle "unbekannte Kategorien" einzufügen. Um das "Unbekannte bereits vorhanden" zu behandeln, können Sie entweder eine programmatische Überprüfung durchführen und nur einfügen, wenn es nicht bereits vorhanden ist, oder eine eindeutige Einschränkung für die CategoryID hinzufügen und sie anweisen, Duplikate zu ignorieren. –

+0

Nein, das Problem besteht darin, dass der Bericht eine variable Zeitspanne hat. Angenommen, ich finde zwei unbekannte Kategorien im ersten Berichtslauf. Das nächste Mal, ich finde eins, und das eine genaue Kopie von einem der früheren zwei. Was passiert mit der Reihe? –

+0

könnten Sie Ihren "Unbekannten Kategorien" eine zusätzliche Spalte hinzufügen, die diesen Fall einzigartig macht? Etwas wie eine INT IDENTITY oder so? Verlassen Sie sich nicht auf die CategoryID, um einzigartig zu sein? –

Antwort

2

Ihr Chef hat Sie mit diesem Problem konfrontiert, also warum fragen Sie sie nicht? Denn das klingt wirklich nach einem Geschäftsproblem. Wenn Sie Gruppen haben, die über Kategorien berichten, von denen Sie nichts wissen, dann sollten Sie sicher versuchen, Ihre Datenbank mit den Systemen zu synchronisieren, die sie versorgen?

Sonst was ist falsch mit einer einzigen "Unbekannt" -Kategorie? Sie werden aufgefordert, die Stunden zu verfolgen, die Kategorien zugewiesen wurden, die Sie nicht verfolgen.

+0

Ob Sie es glauben oder nicht, das ist die beste Antwort auf das, was ich tat. –

+0

Manchmal sind die einfachsten Lösungen die besten. In der Tat, obwohl das nicht bedeutet, dass wir die Dinge immer so umsetzen müssen. – APC

0

Es scheint mir, als ob Sie die unerkannten Kategorien zu den bestehenden Kategorien Tabelle im laufenden hinzufügen sollten. Wenn das Problem dann zwischen Kategorien mit demselben Namen aus verschiedenen Gruppen unterscheidet, haben Sie dieses Problem jetzt schon?

+0

Ich möchte keine Kategorien hinzufügen, da sie für andere Zwecke von Benutzern ausgewählt werden können. –

+0

Wenn Sie der Haupttabelle nie Kategorien hinzufügen, verwenden Sie die Tabelle "unbekannte Kategorien", über die Sie gesprochen haben, wahrscheinlich mit einer Spalte, die angibt, welche Gruppe sie bereitgestellt hat.Dann würden Sie bei jedem Import nicht nur sehen, ob die Kategorie in einer der Tabellen existiert, und wenn nicht, fügen Sie sie der unbekannten Tabelle hinzu? – edsoverflow

Verwandte Themen