Vergleich von Entities

  • Hi,

    ich habe eine fachliches Problem und da ich dieses Forum für diese Frage für richtig halte, wollte ich nachfragen, ob einer oder mehrere von euch mir weiterhelfen würden. Wenn euch nicht danach ist, dann hört hier auf zu lesen. Ansonsten freue ich mich, dass ihr hier weiterlesen und mit helfen wollt. Ich hatte keinen passenden Zweig für dieses Thema gefunden. Also wenn es nicht passend ist, dann bitte ich um Vergebung und Verschiebung des Threads.

    Ich beschäftige mich momentan mit dem Reverse Engineering bestehender Datenmodelle im Datenbankbereich, wobei das Datenbanksystem nicht einzugrenzen ist. Es kann mal ein Oracle oder mal ein DB2 oder mal ein ganz anderes System sein. Das Reverse Engineering an sich sollte nicht das große Problem werden. Nebenbei erwähnt benutze ich dafür ERwin. Gemacht habe ich es noch nicht, aber für Hilfe ist in dem Bereich schon gesorgt.

    Die Situtation ist folgende: Über mehrere Jahre sind verschiedene Datenbanken historisch gewachsen und mittlerweile gibt es in einigen Datenbanken mehrere hundert Entitäten bzw. Tabellen. Meine Aufgabe ist es, ein Konzept zu entwickeln, mit dem man die Gleichheit von Entitäten herausfinden kann, also von mehreren hundert auf ein paar Dutzend herunterkommt, denn es wird vermutet, dass in jedem System eine Vielzahl an Dubletten und somit auch Datenredundanzen existieren. Das heißt also, dass im Detail zwei Entitäten miteinander verglichen werden sollen und geschaut werden soll, ob eine von den beiden überflüssig oder durch Umstrukturierung eine von den beiden Tabellen die Aufgaben beider übernehmen kann und folglich die andere nicht mehr benötigt wird. Umstrukturieren heißt, dass beispielsweise Attribute von einer Tabelle in die andere übernommen wird und demnach wiederum eine Tabelle überflüssig ist.

    Jetzt habe ich mir meinen Studentenkopf schon ein paar Tage zerbrochen und Kommilitonen gefragt, die aber auch keine Ideen hatten. Nun wollte ich es bei euch versuchen, auf der Hoffnung mehr Input zu erlangen. Zum Schluss beschreibe ich noch meine bisherigen Ideen. Wenn ihr Ideen kundgeben wollt, dies aber unbefangen von meinen vorhabt, dann lest hier jetzt nicht weiter und schreiben sie auf. Ansonsten wünsche ich viel Spaß in meiner noch kleinen Ideensammlung.

    Beste Grüße und danke für die Hilfe.

    ----------------------------------

    Ich hatte mir per Mindmap und Brainstorming Gedanken gemacht und hier folgen die Ergebnisse. Zum Aufbau ist zu sagen, dass beispielsweise Datenmodell einen Oberpunkt darstellt und mit Anführungsstrichen die jeweiligen Teilpunkte folgen.

    Datenmodell

    Dokumentation
    Analyse der für das entsprechende Datenmodell zur Verfügung stehenden Beschreibungen und Dokumentationen, um doppelt vorhandenen Tabellen und Attribute zu identifizieren

    Entitäten

    Datenobjekt
    Prüfung der enthaltenen Attribute auf Gleichheit zwischen Bezeichnungen oder Deklarationen bei allen Entitäten innerhalb des entsprechenden Datenmodells, doppelt vorhandene Attribute sollen so herausgefunden und entfernt werden.

    Datensatz
    Suche nach redundanten Datensätzen bei allen Entitäten innerhalb des entsprechenden Datenmodells.

    Entitätsbezeichnung
    Auffinden von gleichen oder ähnlichen Bezeichnungen bei allen Tabellen innerhalb des entsprechenden Datenmodells und anschließender Vergleich der enthaltenen Attribute, gleichnamige Tabellen, die eventuell die gleiche Funktion erfüllen sollen so gefunden werden.

    Relation
    Suche nach Relationen zu gleichen oder ähnlichen Tabellenund Beachtung derer Eigenschaften (Anzahl, Kardinalität und Integrität der Relationen), d. h. dass es vielleicht Tabellen gibt, die genau die gleichen Beziehungen zu anderen Tabellen aufweisen wie eine zweite Tabelle.

  • äähm ist nicht ziel einer datenbank genau solch redunanzen zu vermeiden und eben für konsistenz und integrität zu sorgen?

    mal deinen gedanken gesponnen...
    wenn du die entitäten aus der db ausliest und aus ihnen in einer objektorientierten sprache objekte erzeugst, kannst du doch auch da eben dafür sorgen, dass du objekte nach bestimmten kriterien vergleichst.

    aber du musst auch eine klare linie haben ab wann du sagst :"ok diese objekte/entitäten sind gleich"

  • Genau darum geht es ja, dass ich dieses Konzept entwickle, ich aber im Moment noch überhaupt keine Idee habe.

    Mal eine andere Frage: Was sind für euch wichtige Entities einer Datenbank. Also bspw. welche wo sehr viele Relationen ein- und ausgehen. Unwichtige wären für mich genau das Gegenteil, die eben vllt. nur eine Relation aufweisen und dazu vllt. über Monate oder Jahre nicht mehr mit Daten gefüllt wurden. Was könnte man noch anführen, um wichtige von unwichtigen Entitäten zu unterscheiden?

    LG

  • dir is aber schon klar, dass sowas eigentlich humbug is oder?
    allein nicht zu wissen welche anwendungen die tabellen nutzen is die erste hürde...
    dann müssen sofern du es tatsächlich schafftst die 100 tabellen auf nein nich mehrere dutzend sondern realistisch geschätzt evtl auf 95 zu reduzieren, musst du den programmen ja auch beibringen welche änderungen gemacht wurden.. was bei komplexeren strukturen schon die nächste hürde birgt, da joins usw auch umgestrickt werden müssen.

    und wie ich oben bereits im ersten satz schrieb

    Zitat von synaptic

    äähm ist nicht ziel einer datenbank genau solch redunanzen zu vermeiden und eben für konsistenz und integrität zu sorgen?

    wenn du tatsächlich sowas hinbekommen solltest hat der datenbank-designer gepennt!

    und mehrere anwendungen auf gleiche tabellen zugreifen lassen is auch nich wirklich risiko-arm....

  • Guten Morgen,

    Du hast schon Recht damit, dass ich nicht weiß, welche Anwendungen auf die Datenbank zugreifen. Das habe ich auch schon berücksichtigt und werde das beim Gespräch anmerken, dass man sich vielleicht erstmal die Anwendung zeigen lässt.

    Das Ganze stellt ja im Moment auch noch mein Problem dar, dass ich versuche mich in die bestehenden Systeme einzuarbeiten und überhaupt erstmal zu verstehen, wo die Leute hinwollen. Das große Ziel ist es Geschäftsobjekte zu finden und diese einheitlich und zentral bereitzustellen. Dazu heißt es: "Durch die Datenmanagement-Initiative wollen wir die Steigerung der Wiederverwendung von Daten, Datenstrukturen und Datenbeschreibungen erreichen.".

    Vielleicht bin ich ein wenig in die falsche Richtung bisher gelaufen. Aus diesem Grunde suche ich ja Kontakt zu euch, um Licht ins Dunkel zu bringen. Soweit ich das verstehe, soll ein semantisch einheitliches Verständnis zu den Geschäftsobjekten aufgebaut werden und die dezentralen Datenmodelle in einem Repository zentralisiert werden. Außerdem steht eine Wiederverwendung der wichtigen Geschäftsobjekte an. Bspw. habe ich im aktuellen Datenmodell das GO Adresse. Dabei kann ein Mitarbeiter, ein Unternehmen, ein Lieferant, etc. eine Adresse haben. Wichtig ist glaube ich auch die Datenqualität und damit die Dokumentation der Datenobjekte. Im physischen Datenmodell kann kein Mensch etwas mit den Bezeichnungen anfangen. Es ist fast so, als würde man sich im IPv6-Stil ohne Namensauflösung im Netz bewegen müssen. Das logische Modell gibt dort etwas mehr her, jedoch sind auch nicht alle Bezeichnungen für den Modellierer verständlich.

    Was auch noch daraus resultieren soll bzw. wo diese Erkenntnisse einfließen sollen, sind Datenmodellierungsrichtlinien und eine aktive Projektunterstützung, da hier nur Projekte unterstützt werden. Die tatsächliche Modellierung und Anwendungsentwicklung geschieht in ganz anderen Bereichen.

    Das Reverse Engineering ist eigentlich nur ein kleiner Teil von dem, was gemacht werden soll. Das habe ich aber auch erst hier mitbekommen und vorher wurde mir das so nicht kommuniziert oder ich habe es nicht erfasst.

    Ich glaube, dass das Ganze durchgeführt wird, damit die Arbeit Systemverantwortlichen und Systemarchitekten erleichtert wird, d. h. die Planung für Neuentwicklungen oder Erweiterungen, damit die Datenmodelle zentral bereitstehen und ein einheitliches Verständnis herrscht. Von daher finde ich es schon wichtig, nach welche Kriterien wichtige GO ausgemacht werden können. Bspw. habe ich sehr viele Relationen zur Entität Adresse und in der Literatur kann man immer wieder das Standardbeispiel Adresse als GO nachlesen.

    Ich hoffe, ich konnte die Sache etwas mehr ins rechte Licht rücken und würde mich über konstruktive Kritik von dir/euch freuen, die ihr denn noch mitlest ;-).

  • Meine Betreuerin und ich.

    Nun das ist natürlich ziemlich nett von dir und ich würde nicht anders handeln, aber das muss ich glaube auf die Beine stellen. Es hätte ja sein können, dass privat Interesse an der Lösung einer solchen Aufgabe besteht bzw. eine Unterstützung. Deswegen hatte ich ja das Forum aufgesucht.

  • also wenn du dat packst... lass es dir patentieren...

    das is ne aufgabe, du du als einzelperson nich mal eben so machen wirst...
    wenn du studierst, kannste dein studium schmeissen und selbständig werden damit :)

    und deine betreurin hat auch keinen plan?
    ich glaub euch is gar nich bewusst was ihr da vorhabt...

    wie biste zu der odyssee gekommen?

  • Ich glaube auch, dass diese Arbeit irgendjemand mal in den Raum geworfen hat und nun soll mal was gemacht werden und es wurde ein Praktikant gesucht, der das machen darf.

    Ich weiß auch, warum es keine Literatur gibt ... weil kein Mensch damit zutun haben will. Vielleicht verstehe ich die ganze Sache auch noch nicht richtig oder überblicke das Vorhaben noch nicht.

    Ausgeschrieben war es als "Praktikant zum Reverse Engineering bestehender Datenmodelle.". Es sollte darum gehen ausgewählte Datenmodelle, die noch nicht im zentralen Repository enthalten sind aus unterschiedlichen Applikations-Datenbanken zu reverse engineeren, danach qualitätszusichern und mit weitergehenden Metainformationen anzureichern. Ziel ist es also eine kontinuierliche Verbesserung anzustreben und das, was ich im letzten Post geschrieben hatte.

    Ich muss auch ehrlich gestehen, dass mir das Ausmaß in dem Sinne bei der Vorstellung des Projektes nicht bekannt war und man fast sagen kann, dass die Entscheidung halb blauäugig getroffen wurde. Auf der anderen Seite war das die einzige Alternative, die ich mit privaten Kriterien vereinbaren konnte. Wenn du einen Rat hast, habe ich natürlich ein offenes Ohr. Alles hinzuschmeißen wäre sicherlich eine Lösung, aber sicherlich auch keine gute Möglichkeit.

    Ich merke aber von vielen Seiten, dass eigentlich eher eine skeptische Haltung existiert. Jüngst konnte man das erst hier in deinem letzten Post lesen ;-).

  • ja das ganze ding hat eben ausmaße die man zwar erreichen kann, aber eben nicht alleine und du kannst mit ner software deine sachen nur vorfiltern, weil ich kein system kenne, was eine derartige intelligenz besitzt, als dass man damit ein solches vorhaben realisieren könnte.

    prüfen musst du auf attribute, auf die datentypen in den attributen und letztlich auch den darinliegenden wert..
    die beziehungen isnd wichtig, damit du bei einer zentralisierung auch die notwendigen verknüpfungen übertragen kannst.

    aber ohne scheiss, das is nichts was ich ner maschine überlassen würde, sondern selbst machen müsste

  • Zitat

    aber ohne scheiss, das is nichts was ich ner maschine überlassen würde, sondern selbst machen müsste



    Man könnte dies im umgangsprachlichen Sinne als wissenschaftliche Erkenntnis annehmen. Also wirklich ohne scheiß auch von mir. Das einzige, was ich mir vorstellen könnte, wäre eine halbautomatische Vorgehensweise. Für die Modellierung und das Reverse Engineering kommt hier das Tool ERwin zum Einsatz. Da kann man auch nicht dran rütteln, weil es hier als Standardtool festgeschrieben ist. Ich wollte in meiner Ausarbeitung andere Tools beleuchten, u. a. den PowerDesigner von Sybase. Mehr Tools sind mir auch ehrlich gesagt noch garnicht bekannt.

    Zitat

    prüfen musst du auf attribute, auf die datentypen in den attributen und letztlich auch den darinliegenden wert.



    Genau das habe ich am Anfang auch gedacht nur nahm mir meine Betreuerin gleich wieder den Wind aus den Segeln. Ihr Argument war, dass wir uns nicht so tief auf Datenebene bewegen. Ich meine ich bin nur Praktikant und sie hat einen Doktorgrad erreicht. Da überlegt man sich ins Wort zu fallen.

    Für mich als Aufgabe steht jetzt an, wichtige Geschäftsobjekte zu identifizieren. Ein Vorgehensmodell oder Konzept kann ich noch nicht vorlegen, weil ich einfach keine Ideen habe. Ich hoffe sie noch mit dem Professor und der Betreuerin zusammen zu erarbeiten, komme mir aber etwas alleine mit der Bürde vor.

    Von daher gingen die Gedanken in Richtung Entitäten mit vielen Relationen. Synonyme, die auf unternehmensweite Geschäftsobjekte schließen lassen. Definitionen im Datenmodell. An eine Systemdokumentation kam ich bisher nicht heran. Im Konzept wollte ich das allerdings als einen wichtigen Schritt vorschlagen, diese zu zuvor zu lesen, neben einer Demonstration der Systemfunktionen. Ohne das gesehen zu haben, kann sich auch glaub ich gar kein Verständnis aufbauen geschweige denn einstellen und das ist nur 1 von 20 Systemen, die es zu untersuchen gilt.

    Gibt es denn noch Möglichkeiten in Richtung Normalisierung, Kardinalitäten, Integrität, etc. zu gehen. Normalisierung bspw. dass diese erkannt werden und sich so funktional abhängige (schwache) Entitäten ausfindig machen lassen, aber auch (ja jetzt fällt mir das Wort nicht ein) die Entitäten zu finden von der die anderen Entitäten funktional abhängig sind? Bspw. der Kunde hat eine Adresse und die Adresse wiederum Straße, PLZ, etc. in der 3. NF. Dann wäre, wenn man rückwärts geht die Adresse funktional abhängig vom Kunden. Ich hoffe jetzt nichts durcheinander zu schmeißen. Ich muss die Grundlagen auch nochmal aufarbeiten, da ich das auch vor 1 1/2 Jahren das letzte Mal gemacht habe und dann der VL-Plan voll mit anderen Sachen war. Demnach wäre Kunde das GO schlechthin, obwohl Adresse aus meiner Sicht auch ein GO darstellt bzw. Teil-GO ist, denn auch ein Mitarbeiter oder ein Werk hat eine Adresse.

  • also doktoren haben meist 2 arbeiten mehr abgeliefert, als praktikanten :D
    ich glaub so langsam du sollst tatsächlich nur ideen bringen und empfehlungen abgeben welche tabellen du findest..

    überleg doch mal was das fürn aufwand is, wenn du anwendung 1 hast, die auf usertabelle1 zugreift und anwendung 2 die auf usertabelle2 zugreift, weil beides verschiedene benutzergruppen sind und beide nicht auf die daten der anderen anwendung zugreifen dürfen.. da ergibt es doch wirklich sinn 2 usertabellen zu haben (selbst wenn in beiden tabellen die gleichen user vorkämen)

    ansonsten müssteste die tabelle zusammenfassen und nen indikator setzen auf welche anwendung die user zugreifen dürfen, was wieder beiden anwendunggen klargemacht werden muss..

    also mein komplettes büro und ich haben auf jeden fall mitgefühl für dich und wünschen dir viel erfolg

  • Nur hilft meistens dieses Gefühl dem Betroffenen nicht weiter ;-). Trotzdem danke dafür. Man kann schon sagen, dass das eine Empfehlung sein soll. Am Ende kann ja auch herauskommen, dass eben dieser ganze Prozess einen dermaßen großen Aufwand für alle Seiten darstellt, dass es sinnvoller ist auch Redundanzen zuzulassen (deine beschriebenen User in beiden Usertabellen) und das mit den restlichen Systemen nicht durchzuführen.
    Das wäre natürlich kein schönes Ergebnis auch für die eigene Motivation. In dem Sinne stellt es dann wirklich nur Schreibtischarbeit dar. Toller ist es da natürlich, wenn man als Praktikant eine Datenbank aufbaut und einführt mit allem drum und dran.
    Aber was soll ich jetzt machen? Hinschmeißen ist immer einfach und das Unternehmen verlassen sowieso. Stellt das aber in diesem Fall eine passable Alternative dar? Wohin dann? Woanders kann es besser oder noch schlechter sein.