BaseBallBatBoy
Erfahrenes Mitglied
Hallo!
Ich entwerfe eine Datenbank von Grund auf neu. Da ich bei diesem Neudesign komplette Freiheit habe, möchte ich diese selbstverständlich so gut wie möglich gestalten.
Daher die Frage an euch: was sind die "best practices" im DB design? Eigene Erfahrungen, Tipps und evtl. Links zu entsprechenden Seiten (Englisch ist auch OK)?
Hinweis: Die DB wird ähnlich viele read wie write Operationen verkraften müssen.
Ausserdem habe ich auch noch einige ganz spezifische Fragen:
- Ich habe eine Tabelle "countries". Diese besteht aus dem "country_code" (dreistelliger ISO Ländercode, ISO 3166-1 alpha-3) sowie dem "country_name". Nun meine Frage: wie sinnvoll ist es country_code, also ein Textfeld, als PK zu verwenden auch wenn dieser code garantiert unique ist? Oder sollte man aus Performancegründen für einen PK immer int wählen? Dh. in diesem Fall eine zusätzliche Spalte "id"? Was ist der Unterschied?
- Ich werde meine DB normalisieren (3NF). Das hat zur Folge, dass Datenbankabfragen oft viele joins beinhalten werden. In diesem Fall habe ich an eine View gedacht. Meine Frage: Wie gut ist die Performance einer View verglichen zu einer Abfrage die ich selber zusammenstelle?
- Wenn eine View joins beinhaltet, kann man kein insert darauf ausführen. Gibt es trotzdem einen einfachen Weg, Daten in die betroffenen Tabellen einzufügen ohne diese einzeln anzusprechen? Stored procedures?
- Korrekter Gebrauch von indexes? Wie eintscheidet man welche Spalten man indexiert und welche nicht?
- Ich werde eine Spalte mit einem Freitext haben. Diesen Freitext werde ich mit einem like '%keyword%' nach einem keyword durchsuchen. Gibt es eine Methode um diese Suche nach einem Keyword irgendwo im Text zu beschleunigen?
PS: Mein RDBMS ist MySQL 5.1.40, ENGINE=InnoDB, DEFAULT CHARSET=latin1
Gruss
BBBB
Ich entwerfe eine Datenbank von Grund auf neu. Da ich bei diesem Neudesign komplette Freiheit habe, möchte ich diese selbstverständlich so gut wie möglich gestalten.
Daher die Frage an euch: was sind die "best practices" im DB design? Eigene Erfahrungen, Tipps und evtl. Links zu entsprechenden Seiten (Englisch ist auch OK)?
Hinweis: Die DB wird ähnlich viele read wie write Operationen verkraften müssen.
Ausserdem habe ich auch noch einige ganz spezifische Fragen:
- Ich habe eine Tabelle "countries". Diese besteht aus dem "country_code" (dreistelliger ISO Ländercode, ISO 3166-1 alpha-3) sowie dem "country_name". Nun meine Frage: wie sinnvoll ist es country_code, also ein Textfeld, als PK zu verwenden auch wenn dieser code garantiert unique ist? Oder sollte man aus Performancegründen für einen PK immer int wählen? Dh. in diesem Fall eine zusätzliche Spalte "id"? Was ist der Unterschied?
- Ich werde meine DB normalisieren (3NF). Das hat zur Folge, dass Datenbankabfragen oft viele joins beinhalten werden. In diesem Fall habe ich an eine View gedacht. Meine Frage: Wie gut ist die Performance einer View verglichen zu einer Abfrage die ich selber zusammenstelle?
- Wenn eine View joins beinhaltet, kann man kein insert darauf ausführen. Gibt es trotzdem einen einfachen Weg, Daten in die betroffenen Tabellen einzufügen ohne diese einzeln anzusprechen? Stored procedures?
- Korrekter Gebrauch von indexes? Wie eintscheidet man welche Spalten man indexiert und welche nicht?
- Ich werde eine Spalte mit einem Freitext haben. Diesen Freitext werde ich mit einem like '%keyword%' nach einem keyword durchsuchen. Gibt es eine Methode um diese Suche nach einem Keyword irgendwo im Text zu beschleunigen?
PS: Mein RDBMS ist MySQL 5.1.40, ENGINE=InnoDB, DEFAULT CHARSET=latin1
Gruss
BBBB