# Datenbankstruktur/aufbau (theoretisches Problem)



## Anfänger2011 (13. Apr 2016)

Hallo liebes Java-Forum,

Ich hab mal wieder ein kleines Problem und zwei Lösungsansätze. Mich würde dabei interessieren, welchen ihr davon nehmen würdet oder ob ihr noch einen besseren kennt.

So zum Problem: Jeder Benutzer bekommt beim erstellen seines Accounts eine tabelle. In dieser Tabelle werden Datensätze, die er selber erzeugt gespeicht. Die Datensätze können aber für den Benutzer selbst und/oder auch für andere Benutzer gebraucht werden. Dabei entsteht eine Art Von/Für-Struktur. 

Wenn jetzt ein Datensatz erzeugt wird, kann dieser in der Tabelle des Erzeugers abgespeicht werden und die Zielpersonen würden in diesem Datensatz mit einer ID aufgelistet. Wenn ich dann als Zielperson angemeldet bin, müssten sämtliche Dateneinträge von allen registrieten Benutzern durchsucht werden.

Die andere Möglichkeit wäre einfach die anfallenden Datensätze in beide Tabellen (vom Ersteller u. Zielperson) zu schreiben. Langes durchsuchen wäre damit nicht nötig. Es fallen dafür aber doppelt so viele Daten wie sonst an.

Wie würdet ihr euch entscheiden?

Schon Mal im voraus DANKE FÜR EURE ANTWORTEN


----------



## Joose (13. Apr 2016)

Ich finde den Ansatz mit Tabelle/User schon falsch 

Mache eine Tabelle in welcher alle Datensätze drinnenstehen, jeder Datensatz sollte dabei eine eindeutige ID haben.
In einer weiteren Tabelle speicherst du dann welcher User Zugriff auf welchen Datensatz hat. Diese Tabelle löst eine klassische n:m Beziehung auf.

Wenn es wichtig ist zu wissen welcher Datensatz von welchen User erstellt wurde musst du es eben in einer der beiden Tabellen speichern.
Entweder bekommt die Tabelle mit den Datensätzen eine Spalte "CreatedBy" (dann musst du den Zugriff vom Creator nicht in der anderen Tabelle speichern), oder in der anderen Tabelle kommen neben DatensatzID und UserID noch eine Spalte hinzu.


----------



## Anfänger2011 (13. Apr 2016)

Eine Tabelle für alle Eintrage habe ich zunächst auch als Möglichkeit überlegt, aber das Durchsuchen von allen Einträgen würde doch bei einer gewissen Masse zu lange dauern, so dass die Performance darunter leidet.


----------



## Anfänger2011 (13. Apr 2016)

Was mir gerade noch einfällt ... Wenn eine solche Masse tatsächlich mal erreicht werden sollte, könnte man doch diese Tabelle beispielsweise in 10 Tabellen und nach der ersten Ziffer der ID trennen, oder?


----------



## Joose (13. Apr 2016)

Von welcher Anzahl an Einträgen reden wir hier? Ein paar Millionen Einträge sollten kein Problem darstellen.
Man darf halt nicht vergessen Indexes anzulegen.

Solche Teilungen gabs es früher immer wieder mal, ich sehe da keinen großen Vorteil darin. Jedes halbwegs passable DBMS sollte mit mehreren Millionen Datenzeilen kein Problem haben.


----------



## Anfänger2011 (13. Apr 2016)

Ok danke für deine schnelle Hilfe


----------

