Laden...

Datenstruktur

Erstellt von M@TUK vor 16 Jahren Letzter Beitrag vor 16 Jahren 859 Views
M
M@TUK Themenstarter:in
402 Beiträge seit 2005
vor 16 Jahren
Datenstruktur

verwendetes Datenbanksystem: mysql

Hi!

Ich bin am überlegen ob folgendes System Sinn macht bzw. ob es möglicherweise
gravierende Probleme damit geben könnte und ob jemand vielleicht eine bessere Alternative anzubieten hätte....

Ich hab eine Tabelle mit Datensätzen.
Sagen wir es handelt sich um Kontaktdaten, also
Vorname, Zuname, Adresse, ....
und einen Kontakt-Typ (Freund, Familie, Geschäftspartner, Firma,...)
Für jeden dieser Typen gibt es nun möglicherweise zusätzliche,
unterschiedliche Felder (Firma -> Umsatzsteuer UID,... Freund -> Geburtstag,..)

Nun möchte ich diese Felder nicht fix hinterlegen sonder (so ähnlich wie in Outlook)
in der Applikation selber anlegen könnnen.

Die Frage ist nun aber wie speichere ich diese "benutzerdefinierten" Felder in der Datenbank ab. Dabei ist die Vorgabe, daß ich über diese Felder suchen können muß...

Mein Plan wäre nun folgender.
Ich lege für jedes benutzerdefinierte Feld in der Tabelle (hier zb.) Kontakt
eine eigene Spalte ("userdefined_1", "userdefined_2",...) an und merke mir
in einer zusätzlichen Tabelle welches Feld nun zu welchem Typ gehört, damit
ich das Formular selber dann dynamisch zusammenbauen kann.
Darüber könnte ich mit SQL auch bequem suchen, weil sie in der gleichen Tabelle sind.

Mein Problem ist nun aber die Anzahl der Spalten...
Wenn ich nun, 10 verschiedene Typen habe und diese wiederum
je nach Typ 10-20 Felder dann wären dass 100-200 zursätzliche Spalten
in der Tabelle. Kann in meinem Fall eine mySQL-Datenbank mit so vielen Spalten (oder viel mehr) umgehen?

Eine andere Möglichkeit wäre die Werte in einer eigenen Tabelle abzuspeichern.
Also datensatz_id, key, value. Nur weiß ich hier nicht recht wie ich darüber suchen soll
und wie ich die Daten möglicherweise mit einem Query als ein Datensatz aus der DB bekomme.

Gibts für diesen Fall noch weitere vielleicht sinnvollere Möglichkeiten?

danke, lg

2.187 Beiträge seit 2005
vor 16 Jahren

Hallo M@TUK,

Außer den von dir genannten Methoden würde mir nur noch einfallen, alle dynamischen Felder in ein unbegrenzt großes Textfeld abzuspeichern und mit "WHERE dynamischeFelder LIKE '%Geburtstag=16.02.2008%" zu suchen.
Vorteil:

  • Du brauchst keine zusätzliche Tabelle.
  • Du kannst das Feld mit einem einfachen Query mit allen "normalen" Feldern abrufen.
  • Du kannst beliebig viele Felder anlegen.
    Nachteil:
  • Alle Dynamischen Felder sind Textfelder.
  • Du kannst nur mit LIKE bzw. = suchen und nicht mit >, ≥ oder ...
    (Langsam!)

Wenn du die dynamischen Felder als "userdefined_1" usw. anlegst, dann brauchst du für 10 Typen mit bis zu 10 Feldern nur 10 zusätzliche Felder in der Tabelle, da jeder Typ das Feld ja anders belegen kann.
Vorteil:

  • Du brauchst keine zusätzliche Tabelle.
  • Du kannst das Feld mit einem einfachen Query mit allen "normalen" Feldern
  • Die Felder sind Typensicher (NUMERIC; DATETIME; ...).
    Nachteil:
  • Du legst die maximale anzahl zusätzlicher Felder fest.

Wenn du die Felder extern auslagers hast du volgende Vor- und Nachteile:
Vorteiele:

  • Die Felder sind Typensicher (NUMERIC; DATETIME; ...).
  • Du kannst beliebig viele Felder anlegen.
  • Du kannst die Felder sogar je Datensatz (nicht nur je Typ) variieren.
    Nachteile:
  • Zusätzliche Tabelle.
  • Komplexe SQL-Befele (Alle: INSERT, UPDATE, DELETE und auch SELECT).
    (Langsam!)

Wenn es also kein Problem ist, dass man nicht beliebig viele Felder anlegen kann, solltest du die Variante mit "userdefined..." wählen. Wenn du jedoch beliebig viele zusätzliche Felder brauchst, musst du abwägen, welche Nachteile der anderen Varianten weniger wichtig für dich sind.

Gruß
Juy Juka

N
59 Beiträge seit 2008
vor 16 Jahren

/edit

verklickt