Indviklet SQL Query

Tags:    databaser

<< < 12 > >>
Hej Udviklere,

Jeg har et lille problem som jeg ikke ved hvordan jeg skal løse.

Jeg er ved at lave et galleri, og er gået i stå ved oprettelse af albums.

Jeg har disse 2 tabeller som er påvirket.

Albums
+--------+----------+----------------+---------+
| id | int(10) | auto_increment | primary |
+--------+----------+----------------+---------+
| aDay | varchar()| | |
+--------+----------+----------------+---------+
| aDate | varchar()| | |
+--------+----------+----------------+---------+
| picId | int(10) | | |
+--------+----------+----------------+---------+

Pictures
+---------+----------+----------------+---------+
| id | int(10) | auto_increment | primary |
+---------+----------+----------------+---------+
| pictures| longblob | | |
+---------+----------+----------------+---------+
| aId | int(10) | | |
+---------+----------+----------------+---------+
| author | varchar()| | |
+---------+----------+----------------+---------+

Mit problem ligger i at når jeg opretter et nyt album, så skal der lægges en række ind i Albums og en række ind i pictures. MEN her kommer problem. I albums skal jeg bruge pictures.id, for at henvise til albummets billede. I pictures.aId skal jeg bruge album.Id!? Hvordan knækker jeg den nød?



Indlæg senest redigeret d. 27.06.2007 21:13 af Bruger #6559
13 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 7 karma
Sorter efter stemmer Sorter efter dato
Hvis forsidebilledet skal være et af billederne i albummet, kan du starte med at sætte det til NULL. Når du så senere har indsat billeder, kan du vælge et billede som forsidebillede og indsætte id'et i tabellen.



Hej Udviklere,

Jeg har et lille problem som jeg ikke ved hvordan jeg skal løse.

Jeg er ved at lave et galleri, og er gået i stå ved oprettelse af albums.

Jeg har disse 2 tabeller som er påvirket.

Albums
+--------+----------+----------------+---------+
| id | int(10) | auto_increment | primary |
+--------+----------+----------------+---------+
| aDay | varchar()| | |
+--------+----------+----------------+---------+
| aDate | varchar()| | |
+--------+----------+----------------+---------+
| picId | int(10) | | |
+--------+----------+----------------+---------+

Pictures
+---------+----------+----------------+---------+
| id | int(10) | auto_increment | primary |
+---------+----------+----------------+---------+
| pictures| longblob | | |
+---------+----------+----------------+---------+
| aId | int(10) | | |
+---------+----------+----------------+---------+
| author | varchar()| | |
+---------+----------+----------------+---------+

Mit problem ligger i at når jeg opretter et nyt album, så skal der lægges en række ind i Albums og en række ind i pictures. MEN her kommer problem. I albums skal jeg bruge pictures.id, for at henvise til albummets billede. I pictures.aId skal jeg bruge album.Id!? Hvordan knækker jeg den nød?


Du skal ikke bruge typen longblob til at opbevarer dine billede data. Den type er 1) langsom og 2) obsolete / bruges meget sjældent. I stedet skal du bruge et binær type. På SQL Server hedder typen "Image" og på Oracle hedder den "BLOB" (Binary Large OBject).






Ville en relation som:

Et gallery består af 0 eller flere albums eller billeder
et album består af 0 eller flere billeder

Ikke være en meget logisk måde at opbygge et gallery på?

Dette kan man opnå ved at oprette 3 tables,

albums, album_indeholder_billede og billede

albums har følgende kolonner
id, navn, beskrivelse, dato, etc. (og anden information som kun tilhøre et specifik album.)

album_indeholder_billede har følgende kolonner
album_id, billede_id
og der oprettes en unik kontrol på en sammen sætning af de 2 kolonner.

billeder har følgende
id, billede_data, meta, beskrivelse, author, etc.

Dette opretter en struktur der tillader at 1 billede kan være tilknyttet mere end et album, og der kan være mere end 1 billede i hver album. desuden håndhæver den også at det samme billede ikke bliver tilføjet et album flere gange.



Det virker lidt underligt hvis der kun skal være et billede i et album. Eller er der noget jeg har misforstået? Jeg tror i hvert fald du skal genoverveje dit databasedesign.



Du opretter en fælles tabel, som har id's.



Lars: Der er da ingen grund til at have en tredje tabel med mindre et billede kan være i flere forskellige albums.



Det virker lidt underligt hvis der kun skal være et billede i et album. Eller er der noget jeg har misforstået? Jeg tror i hvert fald du skal genoverveje dit databasedesign.


Det ene billede skal bruges som et front billede til albummet. Se evt. http://gac.hotserv.dk/test/



Jo, jeg er nok ikke den bedste til database design. Kom gerne med forslag? Slot, prøv at uddybbe lidt mere. Lyder interessant.



Hvis forsidebilledet skal være et af billederne i albummet, kan du starte med at sætte det til NULL. Når du så senere har indsat billeder, kan du vælge et billede som forsidebillede og indsætte id'et i tabellen.


Havde jeg også overvejet. Tror det andet vil give for mange problemer. Det må så være det jeg gør i første omgang. Hvis jeg finder noget, kan jeg jo altid lave det om.



Jeg bruger MySQL. Brugte også BLOB til at starte med, men de billeder som bruges er digital billeder, og nogle af dem fylder mere end hvad der kan være i en BLOB.



<< < 12 > >>
t