Laden...

Nummern-Kreise verwalten

Erstellt von M@TUK vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.474 Views
M
M@TUK Themenstarter:in
402 Beiträge seit 2005
vor 12 Jahren
Nummern-Kreise verwalten

verwendetes Datenbanksystem: MS-SQL 2008 r2 express

Hi,

ich sitz grad vor einem Problem und bin grad etwas ratlos. Es geht um das Verwalten und Handeln von Nummernkreisen. Das könnten Nummernkreise von Gutscheinen, Eintrittskarten, Tombolalosen etc... sein.

Nehmen wir mal an es gibt einen Nummernkreis (es könnten auch mehrere sein, ist aber für das Problem imho nicht relevant) für Lose.

100 - 199

Nun bekommt

User "Maier" 10 Lose => 101, 102, 103, 104, 105, 106
User "Huber" 3 Lose => 112, 143, 178

Man kann also nicht davon ausgehen dass man einen "Start" und einen "End"-Wert der erhaltenen Nummern hat und es sollen auch Nummern "zurückgegeben" werden und neu vergeben werden können.

Ich hätt mir jetzt folgendes ausgedacht.

Table "NumberRange":

NumberRangeId, Name, Start, End

Table "User":

UserId, Name,....

Table "UsedNumber":

NumberRangeId, Number, UserId, Returned

Ist das eine vernünftige Lösung bzw. gibt es hierzu schon Best Practices wie man soetwas löst?

Lg

16.807 Beiträge seit 2008
vor 12 Jahren

In meinen Augen hast Du ein NummernPaket. Dieses hat eine offene Anzahl an Nummern (Dein Range) ( 1-n Relation )
Hinter jeder Nummern befindet sich ja ein bestimmter Gewinn (1-1 Relation)
Der User hingegen hat nun eine Relation zur Nummer; und darüber dann indirekt zum NummernPaket (0-1 zu n Relation)

<Item> = Entity

Jedenfalls wäre das nun mein spontaner Gedanke.

3.511 Beiträge seit 2005
vor 12 Jahren

Hallo,

ist so schon fast gut. Allerdings würde ich keine "UsedNumbers" Tabelle anlegen, sondern nur eine "Numbers". Also, du hast eine Tabelle "NumberRange", "Numbers" und "Users". Der Aufbau der Tabellen ist ziemlich einfach

NumberRange


ID GUID
Name VARCHAR

Numbers


ID GUID
NumberRangeID GUID
Number INT
AssignedUserID GUID
AssignedOn DATETIME

Users


ID GUID
Name, Vorname, BlaBlaBla

So. From und To brauchst du in der NumberRange-Tabelle nicht, das sich dies aus der Numbers Tabelle ergibt. Ist eine Nummer zugewiesen, wird die ID des Benutzers und das Datum zugewiesen. Wird eine Nummer zurückgewiesen, werden diese einfach wieder auf NULL gestellt. Du hast damit wesentlich weniger Verwaltungsoverhead als mit einer "UsedNumbers"-Tabelle.

Neben den gezeigten Spalten kann da natürlich alles mögliche hinzukommen: Rücknahmegrund, Rücknahmedatum usw...

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

M
M@TUK Themenstarter:in
402 Beiträge seit 2005
vor 12 Jahren

Hallo,

danke, daran für jede Nummer eines Nummernkreises vorne weg schon einen Datensatz anzulegen hab ich gar nicht gedacht...

Ich müsste allerdings an die Number-Table noch eine LogTable dranhängen,
damit ich bei Rückgaben trotzdem noch die History hab....

lg

L
416 Beiträge seit 2008
vor 12 Jahren

Ich müsste allerdings an die Number-Table noch eine LogTable dranhängen,
damit ich bei Rückgaben trotzdem noch die History hab....

Die kannste dir ja per Trigger automatisch erstellen lassen.