Starre Datenbankstruktur oder Tabellen bei Bedarf neu erzeugen?

Status
Nicht offen für weitere Antworten.

JanHH

Top Contributor
Hallo,

innerhalb meines Programms gibt es die Möglichkeit, diverse "Unter-Projekte" anzulegen, von denen jedes einen Haufen Daten erzeugt (die abber bei allen Projekten Strukturgleich sind). Alles soll in eine Datenbank. Die Frage ist: Sollte ich lieber eine Datenbank entwerfen, die eine feste Struktur hat, in der alle Daten aller Unter-Projekte gemeinsam in grossen Tabellen landen (so das man über den Namen des Projektes danach suchen kann), oder sollte man lieber zur Laufzeit für jedes Projekt die dafür benötigten Tabellen erzeugen, so dass jedes Projekt seinen eigenen Tabellensatz hat?

Mir wurde gesagt, das eigentlich das erste die korrekte Methode ist.. kommt mir eigentlich auch plausibel vor. Eine einmal entworfene, danach statische Struktur der Datenbank, und die korrekte Abbildung aller Daten aller Projekte wird halt durch vernünftige Modellierung besorgt. Aber die Tabellen werden gross (nicht wirklich gross, aber halt relativ gross). Also wenn man z.B. pro Projekt 1000 Datensätze hat, und 50 Projekte, wären es in Variante 1 eine Tabelle für alle Datensätze, 50.000 Einträge lang, und bei Variante 2 50 Tabellen mit je 1000 Einträgen.

Was ist denn nun zu bevorzugen?

Gruß+Danke
Jan
 

didjitalist

Bekanntes Mitglied
der dynamische ansatz macht den code unnötig kompliziert. bei jedem zugriff muss geprüft werden, ob eine bestimmte tabelle bereits existiert. das sorgt für teure sonder- und fehlerbehandlung. ausserdem muss sichergestellt werden, dass anwender, die projekte anlegen und löschen dürfen, auch strukuturelle änderungen an der datenbank vornehmen dürfen. meiner meinung nach ein unnötiges sicherheitsrisiko.

definier für die entsprechende tabelle einfach einen index, der den eindeutigen bezeichner, bzw. die id, des projekts beinhaltet und entsprechende zugriffe bleiben performant. tabellen mit ein paar tausend einträgen sind nicht weiter dramatisch.
 

JanHH

Top Contributor
Habe das gerade mal durchgerechnet, mit realistischen-aber-eher-pessimistischen Annahmen. Komme dann auf eine einzelne Tabelle, die 22.500.000 Zeilen hat, aus vier Spalten besteht, und jede Zeile ist ca. 50 Zeichen lang. Macht eine Gesamt-Datenmenge von ca. 1 GB. Ist das immer noch so problemlos? Wie gesagt, ein eher pessimistisches Szenario, aber keins, was nicht doch mal vorkommen könnte. Der Zugriff auf die Daten muss dabei im Bedarfsfall "ruckzuck" gehen.

Zur Berechnung: 50 Projekte, in jedes Projekt sind 1500 Personen involviert, und jede Person erzeugt 300 einzelne Daten/Variablen.

Ein etwas optimistisches Szenario wäre: 20 Projekte, pro Projekt 900 Personen, je Person 200 Variablen. Macht nur noch 3.600.000 Zeilen (=ca 171 MB) Datenvolumen. Aber das ist dann wirklich "alltägliches Geschäft".

Ist es wirklich sinnvoll, das alles in eine Tabelle zu stopfen?
 

JanHH

Top Contributor
Oder man optimiert, datenbankdesigntechnisch..

Also zur Struktur der einzelnen Daten: Es gibt da

"Projekt 1", "Person 1", "Variable 1"
"Projekt 1", "Person 1", "Variable 2"
...
"Projekt 1", "Person 2", "Variable 1"
....
"Projekt 2", "Person 1", "Variable 1"
und so weiter und so fort.

Projekte und Personen können dabei relativ freie Namen haben.

Man könnte nun die Kombination Projekt/Person zusammenfassen in einer weiteren Tabelle, und daraus einen künstlichen Schlüssel generieren, so dass die Einträge in der ursprünglichen Tabelle zumindest deutlich kürzer werden. Also aus "Projekt 1, Person 1" wird der künstliche Schlüssel "1", aus "Projekt 1, Person 2" der Schlüssel "2", aus "Projekt x, Person y" der künstliche Schlüssel "z". Das dürfte die eigentliche Tabelle zumindest um ca. 1/3 verkleinern.

Allerdings wäre dies eine Speicher-Optimierung, was mir gar nicht so sinnvoll erscheint. An sich sind 1 GB grosse Tabellen ja gar kein Problem, denke ich so, und auch 10 GB grosse noch nicht wirklich. Die Kunst ist eher der schnelle Zugriff darauf, und das ist auch das, was in meiner Applikation das wichtigste ist. Wie geht man das denn am besten an?
 
Zuletzt bearbeitet:

JanHH

Top Contributor
Mir fällt allerdings gerade auf, das in meiner ersten Tabelle eh noch der eindeutige Primärschlüssel fehlte. Also fünf Spalten statt vier. Macht es nun auch nicht gerade kleiner.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I MySQL Datenbankstruktur angleichen - Daten behalten Datenbankprogrammierung 7
Anfänger2011 Datenbankstruktur/aufbau (theoretisches Problem) Datenbankprogrammierung 5
M Datenbankstruktur im JTree darstellen Datenbankprogrammierung 19
F Derby/JavaDB Datenbankstruktur grafisch darstellen... (Strukturdiagramm?) Datenbankprogrammierung 7
S PostgreSQL Datenbankstruktur exportieren und importieren Datenbankprogrammierung 2
B Wie persistiert man eine Tree-ähnliche Datenbankstruktur? Datenbankprogrammierung 2
R Datenbankstruktur für eine renn simulation Datenbankprogrammierung 3
J Suche geeignete Datenbankstruktur Datenbankprogrammierung 3
S Datenbankstruktur überprüfen Datenbankprogrammierung 2
OnDemand Daten auf mehrere Tabellen aufteilen oder Spalten nutzen Datenbankprogrammierung 2
Ataria SQLite Werte aus zwei Tabellen zusammenführen Datenbankprogrammierung 8
I H2 - GUI Tool.... sehe aber keine Tabellen Datenbankprogrammierung 2
Zrebna Tabellen-Erzeugung via Hibernate ignoriert 'CascadeType' settings Datenbankprogrammierung 1
H JDBC Tabellen ausgeben Datenbankprogrammierung 8
Kirby.exe Tabellen Zeilen combinen und splitten Datenbankprogrammierung 3
N Hibernate Entitäten bei Selects aus 2 Tabellen Datenbankprogrammierung 7
M Sql Tabellen erstellen Datenbankprogrammierung 3
F Tabellen automatisch erstellen wenn sie nicht existieren Datenbankprogrammierung 6
C Mapping mit Annotations von 2 Tabellen Datenbankprogrammierung 22
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
L Join zweier Tabellen in SQL Datenbankprogrammierung 2
P JSP - Daten aus 2 Tabellen in eine neue Tabelle einfügen Datenbankprogrammierung 1
I Oracle Wie ermitteln, welche Benutzer-(!)Tabellen in einer DB sind? Datenbankprogrammierung 1
H Brauche Hilfe beim Mappen von 3 Tabellen a 1:n mit hbm.xml. Datenbankprogrammierung 34
D JPQL- Query über mehrere Tabellen Datenbankprogrammierung 7
feinperligekohlensaeure MySQL Dynamische Tabellen. Wie kann man es besser machen? Datenbankprogrammierung 3
O HSQLDB Eine Entität, mehrere Tabellen Datenbankprogrammierung 8
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
D Count(*) auf 2 Tabellen anwenden Datenbankprogrammierung 7
D MySQL Many to Many Tabellen in Java abbilden? Datenbankprogrammierung 4
V SQLite 2 Tabellen vergleichen und nur Unterschiedliche Sätze rausgeben. Datenbankprogrammierung 31
F Tabellen verbinden Datenbankprogrammierung 13
L0MiN Wie kann ich eine bestimmte Seite aus verschiedenen Excel-Tabellen in eine neue Exceldatei kopieren? Datenbankprogrammierung 1
U Kann die Tabellen nicht finden Datenbankprogrammierung 0
D umschalten zwischen verschiedene Tabellen Datenbankprogrammierung 1
U SQLite Für mich etwa komplexe Abfrage via 2 Tabellen Datenbankprogrammierung 5
E Kann man, wenn man in DB2 Tabellen erstellt hat für dessen auch einen Command-File erstellen? Datenbankprogrammierung 1
M JDBC Tabellen mit Boolean Spalten können nicht erstellt werden. DB Updaten - wie? Datenbankprogrammierung 6
T Tabellen von nicht mehr vorhandenen Entities werden generiert Datenbankprogrammierung 0
J MySQL Workbench Tabellen werden verschoben Datenbankprogrammierung 1
M MySQL Tabellen dynamisch erstellen Datenbankprogrammierung 12
T Ähnliche Wrapperklassen + DB-Tabellen Datenbankprogrammierung 1
K HSQLDB Einzelne Tabellen abfragen? Datenbankprogrammierung 4
T Tabellen Alias Datenbankprogrammierung 7
M MySQL Insert über mehrere Tabellen Datenbankprogrammierung 7
J Tabellen in Tabellen finden Datenbankprogrammierung 4
S versionierte Tabellen Datenbankprogrammierung 2
K n:m Tabellen mit Hibernate erstellen Datenbankprogrammierung 1
I Was ist besser: Tabellen oder Spalten Datenbankprogrammierung 1
S MySQL Abfrage über mehrere Tabellen + Einträge werden überschrieben Datenbankprogrammierung 1
M Vergleich von Daten in verschiedenen Tabellen Datenbankprogrammierung 1
C SQL-Statement SELECT über 3 Tabellen Datenbankprogrammierung 5
G 2 Tabellen und ein spezieller Eintrag Datenbankprogrammierung 2
T Fehler beim ausgeben von Tabellen Inhalt Datenbankprogrammierung 9
T 2 Tabellen aus 2 Datenbanken miteinander vergleichen Datenbankprogrammierung 6
I MySQL Vergleich über mehrere Tabellen! Join? Datenbankprogrammierung 6
R PostgreSQL Tabellen hinzufügen, falls nicht vorhanden Datenbankprogrammierung 3
E Tabellen nacheinander auslesen Datenbankprogrammierung 10
D Übersichtliche Zuweisung von Daten in Tabellen Datenbankprogrammierung 17
S 2 Tabellen zu einer zusammenführen, INSERT INTO Fehler Datenbankprogrammierung 5
A Zugriff auf DB-Tabellen mit Objekten Datenbankprogrammierung 3
K SQL tabellen auswahl in jfreechart Datenbankprogrammierung 2
0 Alle Tabellen aus DB lesen Datenbankprogrammierung 2
F Komplexer Tabellen-Join und Ausgabe in Excel Datenbankprogrammierung 17
I Master/Detail Tabellen mit JDBC und Swing Datenbankprogrammierung 10
H Fortlaufende Nummerierung innerhalb mehrerer Tabellen Datenbankprogrammierung 4
G JOIN Abfrage über mehrere Tabellen Datenbankprogrammierung 15
Consuelo Verbinden von zwei Tabellen, foreign key Datenbankprogrammierung 4
O MySQL sql Datei einzelner Tabellen erzeugen (über Java Programm) Datenbankprogrammierung 6
T Kleine Tabellen für schnellere abfragen? Datenbankprogrammierung 3
G SQL Abfrage über mehrere Tabellen Datenbankprogrammierung 28
H SQL Abfrage - zwei tabellen vergleichen. Datenbankprogrammierung 2
R MySQL Unbenutzte Tabellen/Spalten herausfinden Datenbankprogrammierung 7
I mit Java SQL Attribute / Tabellen erstellen Datenbankprogrammierung 17
C SQL String zwei Tabellen vergleichen und gleiche Zeile löschen Datenbankprogrammierung 25
R hibernate Frage zu configFile-Pfad und Groß/Kleinschreibung von Postgres-Tabellen Datenbankprogrammierung 8
J Mit einer Abfrage Worte suchen die in Zwei Tabellen enthalten sind Datenbankprogrammierung 5
F Einzelne Sql- Tabellen sichern (lokal) Datenbankprogrammierung 2
I MySQL - Anzahl Tabellen heraus finden Datenbankprogrammierung 6
B Es werden keine Tupel in Tabellen abgelegt Datenbankprogrammierung 2
S SQL inner join bei >10 Tabellen über 2 Variablen Datenbankprogrammierung 2
S HSQLDB Kopiere Tabellen Datenbankprogrammierung 2
Guybrush Threepwood Nachträgliches Ändern von Variableneigenschaften in (gefüllten) Tabellen Datenbankprogrammierung 3
J Tabellen auflisten, die in einer Datenbank enthalten sind Datenbankprogrammierung 16
T DB2 delete/update über 2 Tabellen Datenbankprogrammierung 2
T SQL Abfrage: Zeige alle Values von bestimmten Tabellen Datenbankprogrammierung 11
R Datenbanken, Tabellen normalisieren. Datenbankprogrammierung 1
A Datenbankzugriffe, mehr Tabellen Datenbankprogrammierung 12
oliver1974 JPA, JTable und 2 DB-Tabellen... Datenbankprogrammierung 2
X Abfrage über 2 Tabellen mit Tücken Datenbankprogrammierung 3
G verbindung 2er Tabellen Datenbankprogrammierung 3
M Auswerten über drei Tabellen Datenbankprogrammierung 2
H Inserts in 2 Tabellen 1:n Datenbankprogrammierung 6
G Mehrere Tabellen abfragen Datenbankprogrammierung 7
M JavaDB/Derby: Tabellen erstellen Datenbankprogrammierung 8
G 2 Tabellen in einer 1:n Verbindung Datenbankprogrammierung 2
M insert in 2 tabellen Datenbankprogrammierung 7
MQue Metadaten für Tabellen in der Datenbank Datenbankprogrammierung 5
D aus mehreren sql tabellen matchen und sortieren Datenbankprogrammierung 6
G 2 Tabellen zusammenfügen wie? Datenbankprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben