Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Gedanken zur optimalen Datenbankstruktur
mohnstrudel
myCSharp.de - Member



Dabei seit:
Beiträge: 27

Themenstarter:

Gedanken zur optimalen Datenbankstruktur

beantworten | zitieren | melden

verwendetes Datenbanksystem: SQL 2008

Hallo liebe Community!

Zunächst möchte ich sagen, dass ich nicht so recht weiß wonach ich bei meiner eher allgemeinen Frage googlen kann, daher liefern die Suchergebnisse irgendwelche sehr speziellen Probleme, die mir nicht weiterhelfen.

Nun aber zu meinem Anliegen:

Ich möchte ein ganz simples Programmchen schreiben, das das Eintragen und Auslesen von Datensätzen ermöglicht. Es sind 18 Felder geplant +/- n, wobei n hinreichend klein ist.
Ist also eigentlich nichts, was man auch nicht mit Excel hätte lösen können, doch hier kommt das Entscheidende - die Anzahl der Einträge kann und wird vermutlich in die Tausender gehen. Dadurch leidet bei Excel schon jetzt (bei mehreren Hundert) die Übersichtlichkeit.

Nun stellt sich mir die Frage im Bezug auf Performance - soll ich eine einzige große Tabelle machen mit den 18 Feldern oder die eher aufspalten? Beim ersten hätte ich einen einzigen Tabellenzugriff, der jedoch mehrere Spalten durchlaufen muss. Beim zweiten hätte ich immer kleinere Tabellen (sagen wir mal mit je 2-3 Spalten), jedoch mehrere Tabellenzugriffe.

Außerdem habe ich von Nested Sets gehört, nur habe ich hier ja kein Forum mit komplexer Verschachtelung o.ä.

Was denkt ihr? Gibt es noch andere Möglichkeiten, die Datenbank zu "designen"? Habe leider keine Erfahrungswerte was die Zugriffszeit von großen Datenmengen angeht.

Nochmal kurze Zusammenfassung

entweder

id firmenname kontaktperson kontaktdaten usw
1 xy ag heinz 123
1 xy ag peter 234
1 xy ag karl 345
1 xy ag olli 456

oder

id firmenname
1 xy ag

id kontaktperson kontaktdaten
1 heinz 123
1 peter 234
1 karl 345
1 olli 567

Danke euch im Voraus!

P.S. vielleicht bin ich auch einfach zu unerfahren und man würde bei den modernen Rechnern sowieso kaum einen Unterschied merken?
P.P.S.
Eventuell ist es ja wichtig - das Programm soll nur intern in einer kleinen Firma verwendet werden über einen lokalen Server.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von mohnstrudel am .
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.105

beantworten | zitieren | melden

Zugriffe auf mehrere Tabellen sind unperformanter als auf eine einzige.
Und ein paar tausend Zeilen in der Tabelle dürften den Sql Server zu einem müden Lächeln veranlassen ;-)
private Nachricht | Beiträge des Benutzers
Coder007
myCSharp.de - Member



Dabei seit:
Beiträge: 1.214

beantworten | zitieren | melden

Schon mal von Normalisierung gehört?
Wie weit du die Normalisierung aber treibst, musst du selbst entscheiden. Das kann man so allgemein nicht sagen. Ich würd einfach sagen, wenns halbwegs sinnvoll ist, die Daten auf mehrere Tabellen zu verteilen, dann würd ichs auch machen.
Performance ist da oft nebensächlich. Vor allem bei paar tausend Zeilen, das ist ja wirklich nicht die Welt.
private Nachricht | Beiträge des Benutzers
Khalid
myCSharp.de - Experte

Avatar #avatar-2534.gif


Dabei seit:
Beiträge: 3.511
Herkunft: Hannover

beantworten | zitieren | melden

Hallo,

auf jeden Fall die 2. Variante verwenden. Bei der 1. hast du redundante Daten. Wenn du eine Firma z.B. umbenennen willst, brauchst du nur den Namen in der Firmentabelle an einer Stelle ändern. Bei Variante 1 musst du den Namen an mehreren Stellen ändern.
Zitat
Zugriffe auf mehrere Tabellen sind unperformanter als auf eine einzige.
Was so nicht stimmt. Gerade bei so einer einfachen Struktur, sind zwei Tabellen genau so schnell, wie eine. Da gibt es keinen Unterschied.
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
private Nachricht | Beiträge des Benutzers
mohnstrudel
myCSharp.de - Member



Dabei seit:
Beiträge: 27

Themenstarter:

beantworten | zitieren | melden

Zitat
Und ein paar tausend Zeilen in der Tabelle dürften den Sql Server zu einem müden Lächeln veranlassen ;-)
Zitat
Performance ist da oft nebensächlich. Vor allem bei paar tausend Zeilen, das ist ja wirklich nicht die Welt.
Zitat
Was so nicht stimmt. Gerade bei so einer einfachen Struktur, sind zwei Tabellen genau so schnell, wie eine. Da gibt es keinen Unterschied.

Super, danke euch! Einfache Antworten, die mir keine zusätzlichen Probleme bereiten Werde mich dann wohl für die zweite Variante entscheiden, da es vom Verwaltungsaufwand dann geringer ist...

private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.105

beantworten | zitieren | melden

Ok ich hab übersehen dass es normalisierbare Daten sind. Die Frage klang stark nur danach ausgerichtet als wärs vielleicht ein Problem mit mehreren Spalten pro Tabelle.
In dem Fall bist du natürlich mit mehreren Tabellen besser dran.
private Nachricht | Beiträge des Benutzers
haarrrgh
myCSharp.de - Member



Dabei seit:
Beiträge: 208
Herkunft: Raum Köln

beantworten | zitieren | melden

Zitat von mohnstrudel
... die Anzahl der Einträge kann und wird vermutlich in die Tausender gehen.

[...]

Habe leider keine Erfahrungswerte was die Zugriffszeit von großen Datenmengen angeht.

Für einen SQL Server (und jede andere halbwegs vernünftige Datenbank) sind Tausende von Datensätzen nichts.
"Einigermaßen große" Datenmengen fangen bei ein paar Millionen Datensätzen an 8)
private Nachricht | Beiträge des Benutzers