2010-02-04 8 views
13

Zwei meiner Kollegen und ich bauen ein System, um alle Arten von Hydrologie und verwandten Dingen zu tun. Es hat viele Anforderungen und eine gute Anzahl von Tabellen.Wann haben Sie zu viele Tische?

Wir behandeln alle Arten von Probenahme, die es in diesem Bereich (Hydrologie) getan wird, und wir versuchen, einen Weg zu finden, es auf eine weniger schmerzhafte Weise zu tun.

Manchmal müssen wir all diese Stichproben zusammentragen, und ich fange an zu denken, dass wir unser Datenbankdesign zu kompliziert machen.

Wie oder wann wissen Sie, dass Sie eine Datenbank überarbeiten? Natürlich denken wir über viele Normalformregeln und andere gute Praktiken nach, aber wenn es in Ordnung ist, eine dieser Regeln fallenzulassen, z. nicht etwas normalisieren?

Was sind Ihre Meinungen dazu?

+3

"Normalisieren, bis es weh tut, denormalize bis es funktioniert." : http://www.codinghorror.com/blog/archives/001152.html – Fionnuala

+0

Verwenden Sie ORM oder direkt SQL, um darauf zuzugreifen? Ich habe festgestellt, dass die Verwendung von ORM, besonders um Informationen zu erhalten, die hierarchisch sein können und zur Laufzeit als eine Klassenhierarchie dargestellt wird, sich für eine große Anzahl von Tabellen eignet. Wenn ich es manuell manipulieren müsste, wäre das schrecklich. – Uri

Antwort

12

Kurzantwort

Sie können nicht, Sorgen über etwas anderes.

Lange Antwort

Das klingt noch eine andere Form von premature optimization. (YAFPO?)

Sie sollten Ihr Schema mit third normal form (3NF) entwerfen. Nach dem Entwurf sollten Sie Ihre Tabellen mit Daten füllen und mit der Profilerstellung beginnen.

Wenn eine bestimmte Abfrage als zu teuer erachtet wird, sollten Sie von Fall zu Fall auf denormalization schauen.

Technische Antwort (für die Nitpicker, die zwangsläufig widersprechen wird: „Sie können nicht“)

Sie eine Grenze an einem gewissen Punkt Motor auf der Grundlage Ihrer Wahl von RDBMS und/oder Lagerung erreichen. Wahrscheinliche Obergrenzen sind Speicherverbrauch oder offene Dateideskriptoren.

+0

Die teuren Abfragen können mit verschiedenen Mitteln angegriffen werden: Denormalisierung, Views, materialisierte Views, Überprüfung von Indizes, Überprüfung, ob sich die Indizes in einem anderen Tablespace befinden, ... – Alfabravo

+0

@Alfabravo: Sie haben Recht. Ich wollte nicht vermitteln, dass Denormalisierung die einzige verfügbare Option war. Ich beschränkte stattdessen den Umfang meiner Antwort auf die Angst vor "vielen Tischen". – hobodave

+0

Richtig, du hast auch Recht, jedenfalls :) BTW: für unseren ängstlichen Freund, gerade arbeite ich an einigen freaky EJBs, die von einem Bündel Affen getan werden, die über ... verwenden, lassen Sie mich die Mathe .. 1600 Tische. Also, kaufe eine Flasche voller Vitamine und töte sie! (nicht wörtlich) – Alfabravo

2

Wir haben ein System mit buchstäblich hunderten von Tabellen - es ist keine große Sache, es ist nur, dass viele verschiedene Dinge in der Datenbank gespeichert sind.

+0

Humn, aber was ist mit Komplexität? Wir arbeiten mit vielen verwandten Tabellen, zum Beispiel: Wir haben eine Überwachungspunkttabelle, eine Instrumententabelle (1: m mit Überwachungspunkt) und n Tabellen, die auf Instrumente verweisen. So etwas wiederholt sich bei dem Projekt. Machen wir es falsch? Gibt es einen besseren Weg? Bitte beachten Sie, dass diese nicht wiederholt werden. –

+2

@George: Sie sollten diese Art von Dingen in einer anderen Frage stellen; nicht in einem Kommentar. Zeigen Sie uns Ihr Schema und bitten Sie um Feedback. – hobodave

+0

Aber bitte, nur ein paar Tabellen –

0

Wir haben eine Menge Tische in unserem System. Was wir getan haben, war die Normalisierung der Datenbank zu einem guten Punkt, dann erstellt ein paar Ansichten, die die häufigsten Anforderungen an die Tabellennutzung unseres Systems umfassen. So etwas könnte dir auch helfen.

2

"Wann haben Sie zu viele Tische?"

Auf der Ebene des logischen Designs ist die richtige Antwort "nie".

Auf der Ebene des physikalischen Designs (insofern "eine Tabelle" sich wirklich auf ein Konzept bezieht, das sich auf das physikalische Design bezieht), ist die richtige Antwort "ob und wann die Abfragen, die Sie angesichts der Einschränkungen durchführen müssen des von Ihnen verwendeten DBMS verursachen eine unannehmbar niedrige Leistung. ".

Verwandte Themen