# Datenbankdesign



## Generic1 (2. Nov 2011)

Hallo,

ich hätte eine Frage zum SB- Design. Ich habe eine bestehende Applikation bei welcher ein Teil des Schemas so ausschaut:


```
Event           <------------------>      Participance     <-------------------->   Participant
```

Wenn sich ein Participant für einen Event annimmt, dann wird in Participance genau ein Eintrag gemacht. 
Wenn das gemacht wurde, kann kein Eintrag in Participance für den Participant für den Event gemacht werden -> einfach gesagt: ein Participant kann nur einmal beim gleichen Email teilnehmen, was ja Sinn macht -> das ist alles in der Business- Logik abgebildet.

Was ich jetzt machen möchte ist, dass ein Participant bei einem Event mehrmals teilnehmen kann und uach die Spalten in Participance sind ein bisschen anders.
Mein Ansatz wäre jetzt, dass ich folgendes mache:



```
Event           <------------------>      Participance     <-------------------->   Participant
                                |____ MultipleParticipance _____|
```

Also eine neue "Zwischentabelle". 
Was haltet ihr von diesem Design? 
lg


----------



## nillehammer (2. Nov 2011)

Im Moment hast Du in der Tabelle Participance sicher zwei Spalten (etwa eventId, participantId) mit jeweils Fremdschlüseln auf Event und Participant. Beide Spalten zusammen sind der Primary Key oder Du hast einen Unique Constraint über beide Spalten. Erweitere diese Tabelle um eine Spalte id, nutze diese als Primary Key und entferne ggf. den Uniuqe Constraint. So sparst Du Dir die Zwischentabelle.


----------



## Generic1 (2. Nov 2011)

Das hab ich mir auch schon gedacht, was mich aber stört ist, dass MultipleParticipance ein paar zusätzliche Spalten hätte,
Wenn ich nur die Tabelle Participance hätte, dann müsste ich diese um ein paar Spalten erweitern, die aber nur zum tragen kommen wenn eben ein Participant bei einem Event mehrmals teilnimmt. 

Das ist das eine das mich stört und das andere ist, dass ich dann alles gemischt in einer Tabelle habe (einfache und mehrfache teilnahme)

Was ist eure Meinung dazu? 
lg


----------



## nillehammer (2. Nov 2011)

Die einfache/mehrfache Teilnahme kriegst Du über Abfragen raus. Entweder, weil Dein ResultSet mehrere Rows enthält oder mit einem COUNT. Schreib doch mal noch die anderen Attribute, die Du gerne speichern würdest. Vielleicht kann man dann besser beurteilen, welche Alternativen es noch gibt.


----------

