MySQL - Datenbankentwurf Kompetenzprofil

Hallo,

ich habe diesmal eine Frage zur Datenbankmodellierung (in meinem Fall unter MySQL).

Unzwar geht es um folgenden Auszug aus der Datenbank:

Es gibt eine Tabelle „Person“. Personen können ein Kompetenzprofil anlegen, in dem sie angeben, was sie für Fähigkeiten, Sprachen und Interessen haben. Dabei können sie zu einem Gebiet (also Sprache, Fähigkeit oder Interesse) keinen oder mehrere Einträge haben. Dazu wird noch eine Unterscheidung bei den Profilen zwischen „Suche“ und „Biete“ vorgenommen. Es gibt also unter Umständen zwei Profile für eine Person (einmal mit „Suche“ und einmal mit „Biete“).

Ich habe das wie auf dem folgenden Screenshot in der MySQL Workbench gelöst. Scheint mit einfachen Testdaten auch weitesgehend zu klappen. Ich wollte aber wissen, ob das so sinnvoll gelöst ist, es nicht einfacher geht, oder ob ich mit der Methode noch auf Probleme stoßen werde (weil ich bei den wenigen Testabfragen jetzt vllt etwas nicht bedacht habe).

http://www.abload.de/img/alumni-profilodox2.jpg

Bin für jeden Tipp dankbar!

P.S. Das ganze ist ein kleines Uni Projekt, nichts kommerzielles oder so.

Hallo Fragensteller

Für den ersten Entwurf ist das Datenbank Schema nicht schlecht. Ich würde es vermutlich etwas generischer Aufsetzen…

Personen ist eindeutig eine Tabelle
Fähigkeiten, Sprachen und Interessen sind in deinem Beispiel zu identisch um dafür Extra Tabellen anlegen zu müssen. Daher eine Tabelle mit Attribute und die Attribute bekommen ein Type, der bestimmt um Welches Attribute es sich handelt.
Dann müsste ich natürlich noch die Beziehungstabelle erstellen „User2Attribute“ ob der User jetzt die Fähigkeit anbietet oder sucht, wäre damit ein Type der Beziehungstabelle.

Ich hab dir mal ein erm gebaut: http://i.imgur.com/emFim.png

Ob es bei Modellen später Probleme gibt hängt immer davon ab, was für Anforderungen noch dazu kommen. Sollen noch viele ganz unterschiedliche Attribute dazu kommen oder bleiben die sich so ähnlich.

Aber ich fange lieber simpel und schön generisch um dann spiezifischere Zusatz Tabellen zu bauen. Z.b könnte man ja noch eine Tabelle Sprachen bauen, die dnn 1 zu 1 mit der Tabelle Attribute verknüpft ist, um die Sprache jetzt spezieller zu beschreiben.

Falls du noch Fragen hast, würde ich mich über eine Rückmeldung freuen.

Viele Grüße
Frank

Weiss nicht

Hallo Fragesteller110,

wenn ich mir die Frage durchlese, komme ich zur Erkenntnis, daß die Fähigkeiten, Interessen und Sprachen der Person zu zuordnen sind und nicht der Suche oder Biete. Also wären eigentlich diese Tabellen
mit der Person zu verknüpfen.

Die nächste Frage, die sich stellt, wird in der Suche oder Biete weitere Informationen zur Suche oder Biete gespeichert, dann sind hier die 2 Tabellen gut verknüpft.

Befinden sich keine Daten in diesen Tabellen, würde ich bei der Person lediglich 2 Felder (eines für Suche, eines für Biete) setzen mit SET (‚ja‘,‚nein‘). Dadurch wird die Menge an Verknüpfungen reduziert, was sich nur vorteilhaft auf die weitere Ausarbeitung auswirken sollte

Viele Grüße
1awww.com - Internet-Service-Provider

Detlef Bracker

Für diese Frage bin ich nicht der richtige Adressat.

Hallo,

vielen Dank für deine Antwort. Deine Entwurf ist ja deutlich kleiner als meiner und scheint dennoch alle Fälle genauso abdecken zu können, die ich bisher so getestet habe! Da habe ich wohl bei meinem Entwurf viel zu kompliziert gedacht …

Bei deiner Version ist es auch möglich von einer Person alle Sprachen, Fähigkeiten und Interessen auf einmal anzuzeigen, das war bei meinem Entwurf glaube ich so gar nicht möglich.

Ich denke ich kann ohne Bedenken deine Version durch meine ersetzen, vielen Dank nochmal! :smile:

Hallo,

danke für deine Antwort.

Ich habe das Ganze jetzt anhand eines vorgeschlagenen Entwurfs einer anderen Mitglieds umgesetzt.

Der Entwurf: http://i.imgur.com/emFim.png

In den Suche und Biete Profilen werden sonst keine Informationen gespeichert, daher ist es wohl sinnvoll, diese komplett wegzulassen.

Freut mich zu hören. :smile:
Du kannst ja mal berichten wie das Uni Projekt gelaufen ist.

Viele Grüße
Frank

Das kann ich machen :smile: Dauert bis zur Bewertung dann noch aber sicher rund 2 Wochen, wie das immer so ist :stuck_out_tongue:

P.S.
Mal noch ne Frage, wo ich dich grad an der Strippe habe ^^

Macht es eigentlich einen Unterschied (bezogen auf meinen Screenshot aus dem Anfangspost), ob ich bei ProfilBiete die idPerson eintrage, oder ob ich bei Person die idProfilBiete einsetzen würde?
Mir ist das gar nicht so bewusst gewesen, dass ich das ja theoretisch auch hätte anders rum machen können, aber wirkt sich das irgendwie aus?

Hey,

Technisch würde beides gehen, aber sauberer ist die Lösung die du erst hattest.
Also idPerson in der Verbindungstabelle, weil die Person ja erstmal nur eine Person darstellt und immer das Feld hätte, auch wenn sie nichts anbieten würde (z.b. Bei einer Person, die nur suchen würde) wenn du bei Person die das Feld für bieten machen würdest, müsstest du für suchen ebenfalls ein Feld bei der Person machen für idProfilSuche…
Das wäre datentechnich nicht wirklich sauber gelöst.

Daher meinte ich auch, zwar alles etwas redundant, aber immerhin sauber gelöst. :wink:

Du hättest theoretisch die Tabellen ProfilSuchen und bieten komplett sparen können und deine verbindungstabellen (ProfilBietehasXXX und ProfilSuchehasXXX) direkt mit der Person Tabelle verknüpfen können…

Allgemein Tabellen mit einer Information die zu einer anderen Tabelle eine 1:1 Beziehung haben können gespart werden. :smile:

2 Wochen ist ja nicht die Welt und bin neugierig was der Prof sagt :wink:
Darf ich erfahren welches Semester du bist?

Viele Grüße
Frank

1 Like

Hi,

alles klar, danke, dann hatte ich das beim entwerfen doch richtig gedacht, ob bewusst oder unbewusst :smile:

Ich werde vermutlich deine Lösung mit meiner kombinieren, also die Profile lassen und dahinter dann so einfach wie du das dargestellt hast verbinden (also ohne die Redundanz bei den Sprachen, Fähigkeiten, usw.).
Dann habe ich die Erweiterungsmöglichkeit, falls ich bei den Profilen unter Umständen doch zusätzliche Informationen speichern müsste, wie z.B. Bemerkungen oder ähnliches.
Dürfte so doch dann sinnvoll sein, oder?

Ich bin im 3. Semester eines Medieninformatik Studiums :smile:

Hi,
generell würde ich sagen ist es in Ordnung, und wird auch funktionieren.
Was mich etwas verwundert ist, dass du praktisch alle Tabellen kopiert hast. Wenn die Profile die selben Felder enthalten kann man die Tabellen einfach zusammenlegen und has_sprache, has_fähigkeiten und has_Interesse nur einmal haben. Von Person aus wird dann einfach 2 mal verlinkt auf eine Tablee „Profil“ diese hat ein feld idPerson, und ein Feld „Biete_oder_suche“ mit dem man entscheidet ob es ein such oder biete profil ist. Da gibt es dann noch schönere Methoden um die Verlinkungen zu maskieren, vor allem würde ich nicht so lange namen für tabellen oder felder verwenden, aer das ist dann geschmackssache

Im Thread sind die Antworten bereits enthalten. Mehr kann ich dazu nicht sagen.
Viele Grüße
Thomas220

Weiss ich nicht

hi,
tout malade, dzt. leider keine zeit.
m.

Hallo fragensteller110,

ich habe diesmal eine Frage zur Datenbankmodellierung

Danke für das Vertrauen, ich wusste gar nicht, daß ich DB-Experte bin :wink:
Tut mir leid, aber im Moment bin ich privat zeitlich so beansprucht, daß ich nicht dazu komme, deine Frage zu beantworten. Auch meine Mails kann ich im Moment nur einmal wöchentlich checken, deswegen habe ich die Frage auch erst jetzt gesehen.

Es gibt eine Tabelle „Person“. Personen können ein
Kompetenzprofil anlegen, in dem sie angeben, was sie für
Fähigkeiten, Sprachen und Interessen haben.

Nur so als Anmerkung: Das kann man so trennen, aber ist es auch sinnvoll (und trennscharf)? Jemand, der die „Sprache“ chinesisch kann, was unterscheidet ihn von jemanden, der die „Fähigkeit“ besitzt, chinesisch zu sprechen? Das „Interesse“ an chinesisch lässt sich dann ja noch als potentielle „Fähigkeit“ interpretieren, aber wenn derjenige dann „fähig“ ist, die chinesische „Sprache“ zu sprechen, wandert er dann in die Tabelle „Sprachen“ oder „Fähigkeiten“? Und sein „Interesse“ bsteht ja weiter, oder?
Sind sicher etwas spitzfindige Einwände (und auch mehr aus dem Bauch heraus), aber vielleicht kannst Du ja mal drüber nachdenken.

Unterscheidung bei den Profilen zwischen „Suche“ und „Biete“

Auch hier aus dem Bauch heraus (ohne daß ich das jetzt auf die 3. Normalform überprüft habe): Braucht es da wirklich zwei x 3 gespiegelte Tabellen? Wenn Du schon bei „Fähigkeiten“, „Sprachen“ und Interessen bleibst, reicht da nicht in jeder Tabelle zwei zusätzliche Spalten mit „Biete“ = Ja/Nein, „Suche“ = Ja/Nein? Mit Bitfeldern http://dev.mysql.com/doc/refman/5.6/en/bit-type.html würde sogar nur eine zusätzliche Spalte reichen. Das alles aber, wie gesagt, rein aus dem Bauch heraus, ob es damit tatsächlich

einfacher geht

wer weiss?

P.S. Das ganze ist ein kleines Uni Projekt, nichts
kommerzielles oder so.

Tut mir leid, daß ich dir erst so spät schreibe, und dann noch nicht mal eine richtige Antwort liefern kann, aber vielleicht helfen die kleinen Anregungen auch schon etwas.

Viele Grüße
Marvin