Projektspezifische fragen zu DB-Design
-
Ich baue gerade eine Datenbank für ein relativ kleines Projekt.
Dabei habe ich verschiedene Probleme und Fragen und ihr könntet mir eventl. Einen Lösungsweg aufzeigen.Ich hab hier erstmal ein Bild ( 25 kb ) mit einem Teil der Datenbank mit ihren Verknüpfungen an Hand deren ich versuchen möchte meine Probleme und Fragen zu erklären.
Wie ihr sehen könnt habe ich eine Menge Tabellen die nur aus einer ID als Primärschlüssel und einem String, dem dargestellten Wert bestehen (Bsp.: Strasse, Name, etc.). Das habe ich deshalb gemacht, weil ich so garantieren kann, dass diese Werte für verschiedene Personen, Firmen einsetzbar sind. Zum. Beispiel kommen ja die meisten Personen aus der Datenbank aus Chemnitz. Außerdem lässt sich das so schön in einer Auswahlbox bereitstellen, beim erstellen neuer Datensätze. Ein weitere Vorteil könnte es sein, das man (ist noch nicht realisiert) damit wahrscheinlich leichtere Suche nach ähnlichen Werten bei einer Eingabe realisieren kann. Zum Bsp. Gibt der Nutzer als Name ’Schulye’ ein. Die Funktion würde dann die Tabelle durchsuchen und dem Benutzer zum Bsp. ’Schulze’ als Korrektur vorschlagen. (jemand eine Ahnung wie man so eine Vergleich umsetzt, eventl. Quellen?)
Mein eigentliches Problem bei dieser Version ist, wenn der Dateneingeber z. Bsp. den Namen ’Meyer’ in die Tabelle Namen eingegeben hat aber z. Bsp. ’Meier ‚ meinte. Dann in der Zwischenzeit mit diesem Namen aber mehrere Datensätze angelegt hat und nun auf die Idee kommt das der doch verkehrt ist und den ändert, ändert er das ja automatisch für alle Datensätze mit diesem Namen, für die anderen Datensätze war der Name aber so richtig geschrieben. Würdet ihr das irgendwie Datenbanktechnik anders lösen?
Ein weiteres Problem habe ich mit den Tabellen Personen und Firmen. Wie man sehen kann besteht der Primärschlüssel (fettgedruckt) bei diesem aus Name bzw. Name, Vorname und Geb.-Datum. Allerdings ist da ja nur theoretisch ein eindeutige Kennzeichnung mit möglich.
Kann ja dumm zu gehen und man muss mal zwei Leute eintragen, die halt zufällig am gleichen tag Geboren sind und gleiche Namen haben. Einen der zwei könnte ich dann nicht eintragen, weil das ja am Primärschlüssel scheitert.
Ich könnte auch die PersonenID in den Primärschlüssel einbeziehen, dann wäre der Primärschlüssel immer eindeutig aber dann könnte man wieder zweimal die genau gleiche Person anlegen, mit den genau gleichen Daten. Wie würdet ihr das lösen?Das letzte Problem was ich schildern möchte hat mit der nicht verknüpften Tabelle Kontodaten zu tun. Diese sollte es ja für Firmen sowie für Personen geben. Wenn ich diese aber anlege dann würden die IDs ja doppelt vorkommen können, nämlich von Personen und von Firmen und eine Zuordnung wäre so nicht mehr möglich. Im Moment fällt mir keine für mich sinnvoll erscheinende Lösung ein das zu ändern. Ich war schon soweit zwei Kontodatentabellen anzulegen. Eine für Firmen und eine für Personen aber das kann ja nicht die Lösung sein. Ideen?
Ich habe noch ander Tabellen, in welchen ich die gleichen Probleme habe. Z. Bsp. Kontaktdaten (Tabelle für Tel, Fax, mail, etc.) wo ich die ID dann auch nicht an Personen und Firmen zuordnen kann.
Ich danke allen, die sich die Zeit genommen haben, dies alles zu lesen.
-
hi,
-
beim ms sql server gibt es eine funktion soundex.
vielleicht gibts sowas auch fuer access (ansonsten
verwende die msde
(http://www.microsoft.com/sql/msde/default.asp).
die is kostenlos und fuer private zwecke absolut ausreichend,
weil es ein richtiger datenbank server ist, bei dem die
anzahl der verbindungen beschraenkt sind. -
ich wuerde generell immer einen einfachen eindeutigen
primaerschluessel nehmen. sachen wie, das der primaerschluessel
sich aus name, vorname, etc. zusammensetzen machen nur probleme.
mach also einfachen primaerschluessel. willst du keine doppelten
namen, dann leg da einen unique index drueber (den index kannst
du auch ueber mehrere spalten definieren: z.b. name,geb.datum
muessen eindeutig sein).- mach eine kreuztabelle zwischen firmen<->kontodaten
und personen<->kontodaten. eine kreuztabelle beinhaltet
nur die ids beider tabellen.
-
-
Danke schon mal für die Antworten.
"unique index" Geht das eventl. auch mit Access und wenn ja wie?
Ich benutzte den Borland C++ Builder und so wie ich das verstehe ist die MSDE 2000 nur für MS-Produkte.
Und das Projekt ist nicht ganz privat. Ich erstelle es zwar privat und unendgeltlich ist aber für eine Schule gedacht.
-
sorry ich kenn mich mit access gar nicht aus
aber sowas wie einen unique index sollte es eigentlich
selbst in access gebendu brauchst nur einen entsprechenden treiber fuer die msde
(die msde laeuft nur unter einem windows-betriebssystem).
schau mal, ob borland treiber zum zugriff mitliefert bzw.
nachliefert. alternativ sollte das ganze auch ueber odbc gehen.ich persoenlich wuerde dir die msde anstelle von access
empfehlen, weil du ein im grunde vollwertiges datenbanksystem
hast. allerdings ist das ganze auch komplizierter im einrichten
und verwalten. spaeter im betrieb kann sie dir aber aufgrund
der vielen moeglichkeiten (die access wahrscheinlich nicht bietet)
eine menge arbeit abnehmen...
die msde kannst du frei einsetzen und musst nix bezahlen (lizenkosten etc).vielleicht ist auch mysql eine alternative fuer dich...?!
-
Naja, bei Access war der Zugriif über ADO-Kompos vom BCB schön einfach herzustellen. Und ich weiß, wies geht.
Aber ich habe mir jetzt trotzdem mal den Download gestartet, weil eigentlich fände ich so einen datenbankserver auch besser, weil ich bei Access bisher die Datenbank immer nur für einen frei gegeben hatte, weils sonst Probleme gab.
MySQL wäre auch ne Lösung gewesen, fürs WEb nutze ich das ja eh schon.
Aber wenn das jetzt mit der Lizens vom MSDE200 klappt dann werde ich mich da schon reinfitzen. Wies scheint haben die aber ne neue Lizensvereinbarung, die einen verpflichtet sich bei MS zu outen(registrieren). Naja und das ganze Englisch ärgert mich halt bissel, bei Access wars richtig bequem mit allem in Deutsch.