![]() |
Bilder -> Personen Datenbank
Hi Leute, ich hoffe ich poste das ganze nun nicht in der falschen sektion, aber das Hauptproblem ist die Datenbank ;)
Also ich habe folgendes vor und dabei folgendes Problem: Ich habe eine relativ große Anzahl von Bildern (momentan ca. 1000, aber es werden immer mehr) Deshalb will ich mir nun ein Proggi basteln was zu folgendem fähig ist: Das Programm soll mir eine Liste aller Personen auf den Bildern zeigen, wenn ich nun eine dieser Personen auswähle möchte ich eine Liste haben auf welchen Bilder die Person zu sehen ist. Ich hatte mir das bis jetzt folgendermassen überlegt ich erstelle mir einen Record zu jedem Bild in dem ich die Daten speichere die mich interessieren also (Personen, Datum, Ort, etc.) Diese Records speichere ich in einem extra Ordner. Als Name würde ich ihnen den MD5 Check des jeweiligen Bildes geben. Somit müsste ich bei jede suche alle Bilder durchhangeln um alle Einträge zu suchen, ich vermute aber das das Recht langsam ist. Also hatte ich mir gedacht ich könnte auch beim start des Proggs aus den ganzen Record files eine einfach Verkettete Pointeliste bauen und mich durch die Hangeln. weiß aber nun nicht wie optimal das beides ist. Und bei 1000 Bildern ist das ganze so oder so recht viel Arbeit, deshalb hatte ich nicht vor das ganze 2 mal zu machen und würde deshalb gerne von euch die Meinung hören was ihr von meinen Ideen haltet, bzw wie ihr es umsetzten würdet. Ich habe ehrlich gesagt nicht viel Erfahrungen mit Datenbanken und weiß deshalb nicht nach was ich suchen soll. Ich benutze Delphi 6 Personal und das lauffähige Programm soll keien extra Programme benötigen die installiert sein müssen (zumindest der Datenbankteil) deshalb kommt die Borland Datenbank schon mal nicht in Frage. MFG Blacklotus :-D |
Re: Bilder -> Personen Datenbank
Zitat:
Ich vermute mal die Bilder selbst sollen nicht in die Datenbank. Ich würde mir 3 Tabellen anlegen:
Code:
Bilder.db
Bild_ID Integer // Primärschlüssel Name string Ort string Datum datetime Bemerkung string MD5_Hash string Filename string ...
Code:
Personen.db
Person_ID Integer // Primärschlüssel Name string Vorname string Nickname string Geburtstag date Bemerkung string ...
Code:
Beispieldaten:
Zuordnung.db
Bild_ID Integer // Primärschlüssel Person_ID Integer // Primärschlüssel Bilder.db Bild_ID, Name, Ort, Datum, Bemerkung, MD5_Hash, Filename 1, Eltern, Zuhause, 01.01.2002, Das sind meine Eltern am Sylvester, xxx, c:\temp\Eltern.jpg 2, Test, Zuhause, 01.01.2002, Das ist ein Testbild mit mir und meinem Vater, xxx, c:\temp\test.jpg Personen.db Person_ID, Name, Vorname, Nickname, Geburtstag, Bemerkung 1, Mustermann, Hans, Papa, 01.01.1950, Das ist mein Dad 2, Mustermann, Helga, Mamma, 01.01.1952, Das ist Mom 3, Mustermann, Hugo, Ich, 01.01.1980, Das bin ich Zuordnung.db Bild_ID, Personen_ID 1, 1 1, 2 2, 1 2, 2 Was soll das Ganze? Also In Bilder.db speicherst Du alle Daten zu den Bildern ab (Ausnahme die Personen) Der Filename zeigt auf das Bild. Der MD5_Hash dient zum wieder finden der Bilder falls sie verschoben wurden. (Funktion schreiben, die HDD durchsucht und MD5_Hash erstellt und dann mit Datenbank vergleicht) In Personen werden alle Personendaten abgespeichert. In Zuordnung werden die Personen den Bildern zugeordnet. 1. Zeile (1, 1) = auf Bild mit Bild_ID 1 ist Person mit Person_ID 1 abgebildet (Vater auf Eltern.jpg) 2. Zeile (1, 2) = auf Bild mit Bild_ID 1 ist Person mit Person_ID 2 abgebildet (Mutter auf Eltern.jpg) 3. Zeile (2, 1) = auf Bild mit Bild_ID 2 ist Person mit Person_ID 1 abgebildet (Vater auf test.jpg) 3. Zeile (2, 3) = auf Bild mit Bild_ID 2 ist Person mit Person_ID 3 abgebildet (ich auf test.jpg) Das wars. Wie finde ich nun die Bilder einer Person? Du willst alle Bilder Deiner Mutter sehen? Deine Mutter hat Person_ID 2, also lässt Du Dir alle Datensätze der Zuordnung.db mit Person_ID 2 anzeigen. -> Nur Bild_ID 1 zeigt Deine Mutter Falls Du das Ganze mit SQL machen willst:
SQL-Code:
Ich würde Dir die BDE in Kombination mit Paradox Tabellen empfehlen.
select Bild_ID from Zuordnung where Person_ID = 2
Dann empfiehlt es sich einen Filter zu setzen:
Delphi-Quellcode:
Wenn Du für die 3 Tabellen jeweils eine TTable nimmst, kannst Du diese 3 Tabellen miteinander verknüpfen.
Table3.Filter := 'Person_ID=2';
Du hast dann z.B. 2 TDBGrid Eins für die Bilder eins für die Personen wenn Du Dich im BilderGrid bewegst, wird das PersonenGrid automatisch aktualisiert und zeigt die abgebildeten Personen an. Ich hoffe Die Info bringt Dich etwas weiter. |
Re: Bilder -> Personen Datenbank
Zitat:
Die Idee find gut. Du kannst ja dann das fertige Programm ja in ![]() ![]() |
Re: Bilder -> Personen Datenbank
Hi Mabuse, erstmal danke für die Antwort :-D
Richtig die Bilder sollen nicht mit in die Datenbank. Wie gesagt geht es mir auch darum, dass ich keien extra Programme installieren muss. Dass ist für mich kein Problem aber eben für die an die die Anwendung weitergeben werden soll. Somit will und kann ich die BDE schlecht benutzen. Aber wie ich erfahren habe gibt es ja die Möglichkeit in Delphi "MyBase" Datenbanken zu erstellen die keine installierte BDE brauchen, sondern nur die midas.dll, die man ja ohne Problem mitliefern kann. Habe das wohl bei den Daten zu schlecht beschrieben. Also es handelt sich um Schulbilder Auf den Bildern sind "Lehrer" und "Schüler" diese sind jeweils in "Kursen" bzw. "Exkursinen" somit ist die Bilder.db, Personen.db und Zuordung.db dann so (Hoffe nix vergessen zu haben): Bilder.db ========= Bild_ID Integer // Primärschlüssel Kurs Integer // Denke das ist am sinnvollsten über konstanten zu verwalten ? Datum datetime Filename string //Unter Kurse würden somit auch die Exkursionen fallen. Personen.db =========== Person_ID Integer // Primärschlüssel Name string Vorname string Lehrer boolean Zuordnung.db ============ Bild_ID Integer // Primärschlüssel Person_ID Integer // Primärschlüssel Wie gesagt mir geht es darum das nicht mehrmals :coder: zu müssen. Ich könnte zwar danach den Source posten ist kein Problem, doch der wird vermutlich so speziel für mein Problem ausfallen, dass keiner was damit anfangen kann :tongue: |
Re: Bilder -> Personen Datenbank
Zitat:
Mach eine 4. Tabelle mit Kursen:
Code:
Bilder.db
========= Bild_ID Integer // Primärschlüssel Veranstaltung_ID Integer Datum DateTime Filename string MD5_Hash string
Code:
Ich habe die Tabelle bewusst nicht Kurse.db genannt, sondern Veranstaltung, damit wird das Ganze universell und Du kannst es für alles Nutzen :-) (Schulfeste, Schnappschüsse mit Schülern aus mehreren Kursen, ...)
Veranstaltung.db
================ Veranstaltung_ID Integer // Primärschlüssel Name string Bemerkung string In Deinem Fall werden in Veranstaltung.db die Kurse eingetragen. Zitat:
Grundsätzlich ist es besser auf "Konstanten" zu Verzichten und dafür eine Tabelle zu erzeugen, in der die Konstanten "erklärt" sind. Damit wird die Datenbank von Deinem Programm unabhängig, und es ist möglich z.B. auch ein Web Frontend (Bilder Galerie) in z.B. PHP zu schreiben. Die Wahl der Datenbank muss man natürlich den Gegebenheiten anpassen. Wenn keine Installation einer Datenbank möglich ist, bleiben nicht mehr so viele Alternativen übrig. Das TClientDataSet ist keine schlechte Wahl, das habe ich in kleineren Projekten auch schon verwendet. Warum habe ich den MD5_Hash noch mal mit in die Tabelle geschrieben? Deine Idee den MD5_Hash zu verwenden um Dateien zu identifizieren hat mir gut gefallen. Das ist z.B. Nützlich, wenn die Bilder verschoben wurden. Mann könnte wie ich oben schon geschrieben habe eine Funktion schreiben, die die "fehlenden" Bilder wieder sucht und den Filename korrigiert. Sonst musst Du jedes Mal, wenn Du Änderungen an der Verzeichnisstruktur vornimmst alle betroffenen Bilder in der Datenbank editieren (Feld Filename). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz