Forum: PC-Programmierung Datenbanken programmieren


von Phil (Gast)


Lesenswert?

Hallo Freunde,

ich suche eine Möglichkeit um Datenbanken zu programmieren. Darin sollen 
viele, viele Datensätze eingelesen werden und komplexe Abfragen 
erstattet sein.. So nach dem Motto trifft Punkt A zu ist das vollkommen 
richtig. Trift Punkt A nur teilweise zu errechne die Wahrscheinlichkeit, 
dass A richtig ist... So in der Art. Ich hoffe Ihr versteht mein 
Anliegen.

Achja und ne graphische Oberfläche wäre auch was feines. Evtl. sogar ne 
graphische Ausgabe der Abfrage á la Excel oder sowas.

Kenntnisse hab ich fortgeschritten in C und Grundkenntnisse in C#.

Welche Programmiersprache ist empfehlenswert? Eine extra Sprache zum DB 
programmieren? Alles in C zu proggen wäre sicher ein Graus...

Viele Grüße,

Phil

von Vlad T. (vlad_tepesch)


Lesenswert?

das hört sich weniger nach Datenbank, sondern eher nach Expertensystem 
an

von Karl H. (kbuchegg)


Lesenswert?

Phil schrieb:
> Hallo Freunde,
>
> ich suche eine Möglichkeit um Datenbanken zu programmieren. Darin sollen
> viele, viele Datensätze eingelesen werden und komplexe Abfragen
> erstattet sein.. So nach dem Motto trifft Punkt A zu ist das vollkommen
> richtig. Trift Punkt A nur teilweise zu errechne die Wahrscheinlichkeit,
> dass A richtig ist... So in der Art. Ich hoffe Ihr versteht mein
> Anliegen.

Nicht wirklich.
Erst mal sehe ich nicht, warum das eine Datenbank im herkömmlichen Sinne 
sein muss. Datenbanken setzt man dann ein, wenn es gilt, viele Daten 
miteinander zu verknüpfen und so jede Information nur einmal zu 
speichern. Der klassische relationale Aufbau geht über Tabellen, die 
unter anderem auch Querverweise in andere Tabellen haben. In deinem 
Anforderungsprofil lässt sich nichts erkennen, was auf einen derartigen 
Aufbau schliessen lässt.

Allerdings wird der Begriff "Datenbank" in der Programmierung gerne auch 
mal etwas weiter gefasst.
Eine Array bestehend aus Strukturen mit den Daten darin, nennt man auch 
schon gerne mal die 'Datenbank des Programms' und meint damit einfach 
nur das dort der Platz ist, an dem alles zentral gespeichert ist.

> Welche Programmiersprache ist empfehlenswert?

Die, die du kannst.

> Eine extra Sprache zum DB
> programmieren? Alles in C zu proggen wäre sicher ein Graus...

Yep.
grafische Oberflächenprogrammierung in C ist zwar möglich, aber nicht 
lustig.

von Floh (Gast)


Lesenswert?

Phil schrieb:
> Ich hoffe Ihr versteht mein
> Anliegen.

Nicht wirklich.

> Achja und ne graphische Oberfläche wäre auch was feines. Evtl. sogar ne
> graphische Ausgabe der Abfrage á la Excel oder sowas.

Solls eine haben oder nicht?
Das sollte von Anfang an klar sein, sonst wirds ein Chaos.

> Kenntnisse hab ich fortgeschritten in C und Grundkenntnisse in C#.

Dann nimm doch eine von denen.:-)

> Welche Programmiersprache ist empfehlenswert?

Achtung, gleich fängt hier ein Glaubenskrieg an...

> Eine extra Sprache zum DB
> programmieren? Alles in C zu proggen wäre sicher ein Graus...

Wenn du c schon kannst, warum nicht, außer es widerspricht deinen 
Anforderungen.

Diese Anforderungen solltest du auch mal ganz ausführlich irgendwo 
festmachen, Stichwort Lastenheft/Pflichtenheft.
:-)

von tom (Gast)


Lesenswert?

Hallo Phil,


Schau dir doch mal QT an.

Das ist C, es können "einfach" graphische Oberflächen programmiert 
werden.
Eine Schnittstelle zu allen gängigen Datenbanken ist ebenfalls 
vorhanden.

Beispiele gibt es auch genug im Netz.


Gruß,
Tom

von Phil (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Nicht wirklich.
> Erst mal sehe ich nicht, warum das eine Datenbank im herkömmlichen Sinne
> sein muss. Datenbanken setzt man dann ein, wenn es gilt, viele Daten
> miteinander zu verknüpfen und so jede Information nur einmal zu
> speichern.

Ok. Dann nochmal ausführlicher.

Es gibt meinetwegen 100-200 Parameter. Es gibt 10000 Ereignisse.

Beispiel:
Parameter A: klein
Parameter B: blau
Parameter C: warm

Ereignis 1:
klein, blau, warm --> Wahrscheinlihkeit 100%

Ereignis 2:
klein, hellblau, warm --> Wahrscheinlichkeit 95%

Eregnis 3:
groß, grün, kalt --> Wahrscheinlichkeit 0%

Ich hoffe damit ist es verständlicher.

Ich möchte quasi Parameter und Ereignisse eingeben und auswerten lassen.

Das Projekt ist auf 2 Jahre angesetzt. Mal gucken obs klappt. Wenn nicht 
auch gut. Aber ich brauch noch ne passende Sprache.

Der Endnutzer soll nachher die Möglichkeit haben neue Ereignisse 
einzugeben und so die Datenbank selbständig erweitern. Zukunftsmusik 
bzw. nice to have wäre eine online Anbindung an eine externe von vielen 
Klienten bearbeitbare Datenbank.

Karl heinz Buchegger schrieb:
>> Welche Programmiersprache ist empfehlenswert?
>
> Die, die du kannst.

Das kann ich ja fast nicht glauben, dass man dieses Problem am 
sinnvollsten in C oder C# lösen würde.. Deshalb würde ich gerne wissen 
welche Sprache sich für mein Problem eignet.

Vlad Tepesch schrieb:
> das hört sich weniger nach Datenbank, sondern eher nach Expertensystem
> an

Das mit dem Expertensystem hört sich gut an bzw. ist es prinzipiell das 
was ich machen möchte. Super!

Wiki nennt folgende Sprachen:

CLIPS: Softwarewerkzeug zur Erstellung von Expertensystemen.
d3web: Open-source Software zur Erstellung von Expertensystemen.
JESS: Regelsystem für die Java Plattform - Nachfolger und Erweiterung 
des CLIPS Regelsystems.
Prolog: eine Logik-Programmiersprache zur Erstellung von 
Expertensystemen.

Kennt einer eine? Oder gibts noch ne andere Empfehlung? Graphische 
Oberfläche und -Auswertungsmöglichkeiten wären ein Muss

von Karl H. (kbuchegg)


Lesenswert?

Phil schrieb:
> Karl heinz Buchegger schrieb:
>> Nicht wirklich.
>> Erst mal sehe ich nicht, warum das eine Datenbank im herkömmlichen Sinne
>> sein muss. Datenbanken setzt man dann ein, wenn es gilt, viele Daten
>> miteinander zu verknüpfen und so jede Information nur einmal zu
>> speichern.
>
> Ok. Dann nochmal ausführlicher.
>
> Es gibt meinetwegen 100-200 Parameter. Es gibt 10000 Ereignisse.

Das klärt immer noch nicht, warum das jetzt eine Datenbank im Sinne 
einer relationalen Datenbank sein muss und nicht einfach nur ein
1
struct Event
2
{
3
  double Parameter[200];
4
}
5
6
struct Event Database[10000];

oder meinetwegen eine verkettete Liste oder dergleichen.

Eine Datenbank (mit all ihrem Overhead) setzt man dann ein, wenn man zb 
Rechnungen mit Kundendaten verknüpfen will. Es kann x Rechnungen geben, 
die alle demselben Kunden zugeordnet sind. Daher möchte man den Kunden 
nur einmal speichern und in die Rechnungen kommen verweise auf diesen 
Kunden rein. Dazu kommt dann in einer richtigen Datenbank die leidigen 
Probleme: Wie stellt man sicher, dass eine Operation als ganzes 
rückgängig gemacht werden kann, wenn eine Teiloperation schief geht; wie 
macht man es, dass 5 Sachbearbeiter gleichzeitig mit der Datenbank 
interagieren können, etc.

Das sind Problemstellungen, für die sich eine richtige Datenbank lohnt. 
Hat man diese Problemstellungen nicht, so braucht man eine Datenbank 
nicht. Was nicht heißen soll, dass man nicht trotzdem eine einsetzt, 
einfach deswegen, weil man sie fertig hat.

> Beispiel:
> Parameter A: klein
> Parameter B: blau
> Parameter C: warm
>
> Ereignis 1:
> klein, blau, warm --> Wahrscheinlihkeit 100%
>
> Ereignis 2:
> klein, hellblau, warm --> Wahrscheinlichkeit 95%
>
> Eregnis 3:
> groß, grün, kalt --> Wahrscheinlichkeit 0%
>
> Ich hoffe damit ist es verständlicher.

Ist schon klar. Du willst von jedem Datensatz wissen, wie 'gut' er mit 
den Suchbegriffen übereinstimmt. Für irgendeine, noch näher zu 
bestimmende, Definition von 'gut'.

Aber auch hier:
Der Knackpunkt liegt bisher immer noch in der Definition von 'gut' also 
in einer Funktion
   f( selectionset, data )
so dass f eine Aussage darüber macht, wie gut ein bestimmter 'Datensatz' 
zu den Suchkriterien passt und nicht darin eine relationale Datenbank 
zur Verfügung zu haben.

> Der Endnutzer soll nachher die Möglichkeit haben neue Ereignisse
> einzugeben und so die Datenbank selbständig erweitern. Zukunftsmusik
> bzw. nice to have wäre eine online Anbindung an eine externe von vielen
> Klienten bearbeitbare Datenbank.

Dann würde ich damit anfangen, mir eine fertige Datenbank wie zb. SQLite 
in Source Code zu besorgen und dort mal nachzusehen ob man die Funktion 
modifizieren kann, die bei einem SELECT ... WHERE  die Datensätze anhand 
der Suchbegriffe auswählt.

> Kennt einer eine? Oder gibts noch ne andere Empfehlung? Graphische
> Oberfläche und -Auswertungsmöglichkeiten wären ein Muss

graphische Oberfläche würde ich erst mal beiseite legen.
Und zwar aus dem Grund: Ich würde eine strikte Trennung zwischen der 
eigentlichen Datenengine und der Ein/Ausgabe anstreben.
Beides kann parallel entstehen, aber die strikte Trennung würde ich auf 
keinen Fall aufgeben (schon allein deswegen, weil du irgendwann online 
gehen willst)

von Verwirrter Anfänger (Gast)


Lesenswert?

Für mich hört sich das auch sehr nach Machine Learning an.
Wenn die Parameter von einander unabhängig sind, ließe sich das einfach 
über Wahrscheinlichkeitsrechnung erarbeiten, und dann evtl. mit 
irgendeinem priority Datentyp sortieren.

Wenn die Parameter von einander abhängig sind, ginge das mit etwas mehr 
Aufwand auch.

Der eigentlich Sinn von Machine Learning wäre natürlich unbekannte 
Kombinationen vorherzusagen, aber das ließe sich vielleicht auch gut 
nutzen um die Datenmenge zu komprimieren.

von Arc N. (arc)


Lesenswert?

Für so was sind C#, VB oder F# aufgrund von LINQ prädestiniert.
http://msdn.microsoft.com/library/bb308959.aspx
Zweiter Tipp: PowerPivot für Excel
http://office.microsoft.com/de-de/excel/powerpivot-fur-excel-neuerung-HA101677286.aspx
http://powerpivot.com/
Der Rest ist Zeitverschwendung.

von Vlad T. (vlad_tepesch)


Lesenswert?

jetzt hört sich es wieder etwas anders an.

Ein Expertensystem wird von Experten entworfen und mit deren Wissen 
gefütert und bleibt dann immer gleich.

zB, der Windows-Problem-Beseitigungsassistent ist ein Beispiel dafür. 
(wenn auch vielleicht nicht das beste)


Was du suchst hört sich jetzt eher nach einem Klassifikator an.

Du hast einen Eingeberaum von 100 Merkmalen (Farbton, temperatur, Größe) 
und möchtest eine Wahrscheinlichkeit für verschiedene Klassen 
(Ereignis1, Ereignis 2, Ereignis 3) haben.

Die Frage ist, wie gut du die Zusammenhänge deiner Inputdaten kennst.
entweder man erzeugt Trainingsdaten aus Messwerten der Größen mit 
händischer Bewertung der Klasse und trainierst damit einen Klassifikator 
(supervised).
Im Extremfall können das auch einzelne handimplementierte Regeln sein, 
was dann wieder in Richtung Expertensystem geht, wobei dieses sich durch 
Interaktivität und schrittweises Vorgehen auszeichnet.
Der Klassifikator kann dann zur Klassifikation unbekannter 
Eingabevektoren benutzt werden.

Oder du lässt den Klassifikator selbst Klassen suchen (unsupervised, 
clustering).

Meist sind die Klassifikatoren nach dem Training jedoch fix.
Das ganze so zu entwerfen, dass zur Laufzeit ein trainierter 
Klassifikator mit neuen Daten 'nachtrainiert' wird ist je nach 
Klassifikator sehr aufwendig bis unmöglich.


Such dir mal ein paar Bücher/Seiten/Infos zu den Themen 'Machinelles 
Lernen', 'Data Mining', 'Wissensmanagement'

von Karl H. (kbuchegg)


Lesenswert?

@Vlad

Ich bin mir immeer noch nicht sicher, ob das ganze überhaupt so komplex 
angedacht ist.

Ich denke er will einfach nur in einem Datenwust Daten wiederfinden, die 
so ungefähr auf seine Suchbegriffe passen, wobei dieses 'so ungefähr' 
der entscheidende Punkt ist.

Das klassische Problem:
Du suchst in einer Datenbank nach dem "Mayer Hubert". Der bewusste 
Hubert schreibt sich aber nicht mit ay sondern mit ei. Die Suchanfrage 
nach "Mayer Hubert" liefert daher kein Ergebnis. Eine erweiterte Suche 
würde aber hochkommen mit:
Mayer Hubert hab ich keinen gefunden. Aber mit 85% Wahrscheinlichkeit 
könntest du einen "Maier Hubert" gemeint haben. Jedoch nicht "Berger 
Helga", denn die hat nach meinen Kriterien nur 0% Übereinstimmung mit 
deinem Suchbegriff.

von Verwirrter Anfänger (Gast)


Lesenswert?

In dem Fall würde ich mal empfehlen sich mit den Themen Data Mining, web 
crawling und Internet Suche zu beschäftigen, evtl. könnte man einen 
angepassten top-k Algorithmus benutzen, um nicht immer alle Parameter 
für alle Ereignisse durch zu arbeiten.

von Klaus W. (mfgkw)


Lesenswert?

Wenn ich die Aufgabe verstanden habe, könnte auch eine SQL-DB mit Stored 
Procedures das richtige sein.

von ... .. (docean) Benutzerseite


Lesenswert?

Willst du die Daten nur speichern?

Also alle möglichen Kombinationen + das Ergebnis in eine Datenbank und 
dann daraus abfragen?
Wenn ja könnte man eine SQL-Datebank aufsetzen und die dann per C,C#,... 
abfragen, Libs gibts für fas jede Sprache...

Oder soll das irgendwie selbstständig (a la KI) ablaufen?

von Phil (Gast)


Lesenswert?

Im Prinzip könnte man das als Fehlersuche für eine Autowerkstatt sehen.

Sprich ich habe ein Problem. Das Auto fährt nicht.

Dann habe ich tausend Möglichkeiten warum das nicht sein kann und ich 
fang an Parameter einzugeben wie z.B. der Auspuff qualmt oder so.

Dann gibt es eine Liste an Ursachen die ebn genau das Problem mit dem 
qualmenden Auspuff enthalten. Ganz oben steht natürlich die 
wahrscheinlichste. Auf Platz zwei die zweitwahrscheinlichste.

Wobei das wahreinschlichste abhängig von der allgemeinen 
Eintrittswahrscheinlichkeit (sprich was ist meinetwegen bei dem Autotyp 
oder allgemein die häufigste Ursache) UND den detektierbaren 
Problemen/Parametern wie ebn dem qualmenden Auspuff abhängig ist.

Das Wissen für die Datenbank soll natürlich ständig erweitert werden und 
sie somit flexibel bleiben...

Da ich an so ein Problem noch nie ran gegangen bin wäre ich für 
jeglichen Input offen. Wie z.B. theoretische Grundlagen und ebn die 
Programmiersprache.

Ich weiß halt wo ich hin will und was ich kann. Den Weg muss ich mir 
erst erarbeiten.. logischerweise

von Karl H. (kbuchegg)


Lesenswert?

Phil schrieb:

> Da ich an so ein Problem noch nie ran gegangen bin wäre ich für
> jeglichen Input offen. Wie z.B. theoretische Grundlagen und ebn die
> Programmiersprache.

Alles klar.
Dein theoretisches Rüstzeug lautet "Expertensystem"

von ... (Gast)


Lesenswert?

http://www.informatik.uni-leipzig.de/~brewka/lehre1.html

weitere Begriffe zum Suchen:
"wissensbasiertes system" bzw. "knowledge-based system"
"decision theory"
"decision-making"
"decision support systems" bzw. "DSS"
"self service software"

von Nils (Gast)


Lesenswert?

Phil schrieb:

> Wobei das wahreinschlichste abhängig von der allgemeinen
> Eintrittswahrscheinlichkeit (sprich was ist meinetwegen bei dem Autotyp
> oder allgemein die häufigste Ursache) UND den detektierbaren
> Problemen/Parametern wie ebn dem qualmenden Auspuff abhängig ist.

Demnach: Subjektive Bewertung + detektierbare Parameter

Ich möchte jetzt ungern so ein Buzzword rein werfen, aber das sind 
typische Probleme der Fuzzy-Logic.

Beispiele:
Riesen Problem + Auspuff qualmt stark -> Folgerung 1
Riesen Problem + Auspuff qualmt ein bisschen -> Folgerung 2
Kleines Problem + Auspuff qualmt ein bisschen -> Folgerung 3

Es handelt sich also um ein Problem mit logischen Verknüpfungen, wobei 
die logischen Aussagen Wahrscheinlichkeitscharakter haben - das 
behandelt die Fuzzy-Logic.

Vielleicht wirst Du ja auch unter diesem Schlagwort fündig.

von High Performer (Gast)


Lesenswert?

Neuronale Netze, machen eigentlich genau das, was Du haben willst. Das 
hat aber nicht viel mit Datenbanken zu tun. OK, Du kannst die 
Parametersätze in einer Datenbank speichern. Das ist aber eher trivial. 
Aus den Datensätzen dann eine Funktion zu finden, die die Parameter 
optimal auf die ausgegebene "Wahrscheinlichkeit" abbildet, ist hier die 
Hauptaufgabe.

Also neuronale Netze funktionieren prinzipiell so:

Man gibt einen Satz Eingangswerte (bei Dir "Parameter") vor und das 
gewünschte Ausgangssignal (bei Dir "Wahrscheinlichkeit"). Damit 
trainiert man das System. So macht man das dann für alle Parametersätze. 
Am Schluss hat man dann ein künstliches neuronales Netz, das (im 
günstigen Fall ;-) auch bei noch nicht bekannten Parametersätzen 
vernünftige Ausgabedaten liefert. Habe mal vor Jahren ein wenig mit 
neuronalen Netzen experimentiert. Interessante Sache. Ich weiß 
allerdings nicht, ob es inzwischen fortgeschrittene, überlegene 
Technologien gibt. Bin da momentan nicht am Ball.

von High Performer (Gast)


Lesenswert?

>Im Prinzip könnte man das als Fehlersuche für eine Autowerkstatt sehen.

OK, das wäre dann ein klassisches Expertensystem. Das funktioniert aber 
gewöhnlich so, dass der Anwender immer wieder Fragen beantwortet oder 
Werte eingibt, worauf das System dann entscheidet, welche weiteren 
Fakten vom Anwender abgefragt werden. Am Schluss steht dann im Idealfall 
die korrekte Antwort des Systems.

Vergiss also das Thema neuronale Netze wieder.

von Vlad T. (vlad_tepesch)


Lesenswert?

High Performer schrieb:
> Neuronale Netze, machen eigentlich genau das, was Du haben willst.


neuroanle Netze sind nicht die einzigen Klassifikationsalogrithmen.

SVMs mit rbf-Kernel bringen auch sehr oft gute Ergebnisse.

von Vlad T. (vlad_tepesch)


Lesenswert?

High Performer schrieb:
>>Im Prinzip könnte man das als Fehlersuche für eine Autowerkstatt sehen.
>
> OK, das wäre dann ein klassisches Expertensystem.

Naja - hier kommt es darauf an, ob er einen oder mehrere Experten hat, 
die diese Regeln aufstellen können.
Wenn ja, dann ist definitiv das Expertensystem das richtige.

Wenn er einfach nur ein Haufen Daten hat, mit der entsprechenden 
Diagnose, dann würde ich nicht veruschen, das in ein Expertensystem zu 
quetschen, sondern würde versuchen einen Klassifikator zu finden, der 
mit den Daten gut umgehen kann.

Nachteil ist allerdings, dass man dann alle Einganswerte ermitteln muss, 
bevor man eine Lösung bekommt.
Hier ist das schrittweise auf Regeln basierte Inferenz-System des 
Expertensystems von großem Vorteil.

von AED (Gast)


Lesenswert?

Also ich hätte jetzt aufgrund Deiner Angaben an eine Data Warehouse 
Lösung gedacht.
Viele Quellen(User) speichern Daten ine eine Datenbank. Einige 
Sourcen(z.B. Manager) definieren was sie in welcher Form aus den Daten 
herauslesen möchten.

Möglicherweise liege ich mit meiner Anahme auch komplett falsch. Wenn 
nicht, nach Datawarehouse, Olap, etc. suchen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.