Allgemeine Frage zu mySQL und Datenbankeinträgen

Andreas B.

Benutzer
Beiträge
14
Hallo mySQL-Freunde,

als Anfänger habe eine allgemeine Frage, deren Beantwortung für euch sicher ein Klacks ist :-)

Ich habe eine mySQL-Tabelle mit ca. 10.000 Personen-Datensätzen (es geht um Prominente). Die Felder heißen id, name, sternzeichen, etc. Die Tabelle lese ich in PHP aus und generiere so für jede Person einen kleinen Mini-Steckbrief auf meiner Homepage. Das klappt soweit ganz gut.

Nun möchte ich den Steckbrief um Bilder sowie die zugehörigen Lizenzangaben erweitern. Dazu habe ich mir ein Script geschrieben, welches die frei verfügbaren Wikipedia-Bilder bzw. die Links dazu ausliest.

Angenommen, es gibt für jede Person zehn verfügbare Bilder, und zu jedem Bild drei Lizenzangaben wie 1) Dateiname, 2) Autor und 3) Lizenz. Wie handhabt man da die neuen Datenbankeinträge am besten? Die bestehende Tabelle erweitern, wenn ja, wie? Eine neue Tabelle anlegen? Wie gesagt, es handelt sich um einige Tausend Einträge, die jeweils vervollständigt werden sollen.

Ich bin absoluter Anfänger, was das angeht. Ich hätte jetzt einfach für jede Person vier zusätzliche Felder angelegt (url, dateiname, autor, lizenz) und dort die ausgelesenen Daten hintereinander eingefügt, getrennt mit einem Separator.
Beim Datenbank-Auslesen hätte ich dann die Strings wieder mit explode zerlegt. Das ist wahrscheinlich nicht das gelbe vom Ei, oder?

Vielen Dank im voraus für eure Antworten :-)

Gruß, Andreas
 
Werbung:
Beim Datenbank-Auslesen hätte ich dann die Strings wieder mit explode zerlegt. Das ist wahrscheinlich nicht das gelbe vom Ei, oder?

Jepp. Ich gehe davon aus, daß in der jetzigen Tabelle id ein Primary Key ist. Du legst eine Detailstabelle an, wo Du zu jeder id 1 oder mehrere Detaildatensätze mit jeweils einem Foreign Key auf die Mastertabelle anlegen kannst. Diese Datensätze enthalten dann die Details wie Dateiname, Autor, Lizenz. Sollten diese Merkmale nicht starr sein böte sich ein Datentyp wie JSON an, was MySQL aber nicht kann.
 
Code:
test=*# create table master(id int primary key, name text);
CREATE TABLE
test=*# create table detail (master_id int references master, datei text);
CREATE TABLE
test=*# insert into master values (1, 'name1');
INSERT 0 1
test=*# insert into master values (2, 'name2');
INSERT 0 1
test=*# with id as (select id from master where name = 'name2') insert into detail select id.id, 'pfad zum bild' from id;
INSERT 0 1
test=*# select * from master ;
 id | name  
----+-------
  1 | name1
  2 | name2
(2 Zeilen)

test=*# select * from detail ;
 master_id |  datei   
-----------+---------------
  2 | pfad zum bild
(1 Zeile)

test=*#

So kannst Du zu jedem Eintrag in der master-Tabelle beliebig viele Details speichern.
 
Werbung:
Zurück
Oben