[database] relatie images & andere componenten

Pagina: 1
Acties:

  • trekker22
  • Registratie: Maart 2003
  • Laatst online: 08:11
Hoi mensen,

Beetje vreemde titel maar ik kan het niet goed omschrijven.

Ik heb een database ontwerp met meerdere tabellen voor aparte onderdelen van een website.
o.a:

tblNEWS
tblEVENTS
tblAUTO
etc.

bij al deze records uit deze tabellen horen 0 of meerdere plaatjes bv
news item 1 heeft 3 aanverwante plaatjes
event 99 heeft 1 plaatje
auto 3 heeft geen plaatjes
auto 6 heeft 1 plaatje

de plaatjes heb ik onder gebracht in tblIMAGE met als structuur:
IMAGE_ID IMAGE_WIDTH IMAGE_HEIGHT IMAGE_ALT NEWS_ID EVENT_ID AUTO_ID

zoals je ziet zijn de laatste 3 velden foreign keys naar de aanverwante tabel.
Bij elke Image is dus 1 van de 3 foreign keys ingevuld.

Wat vinden jullie van deze structuur?

Opmerkingen van mij uit:
- steeds als ik een nieuw component met plaatjes toevoeg aan de database, bv tblWEBLOG dan moet de tblIMAGE uitgebreidt worden met een foreign key. Vind ik niet helemaal logisch, die tabel tblIMAGE wordt maar breder en breder.

- een koppeltable gaat niet werken, aangezien ik een NEWS_ID = 1 kan hebben en een EVENT_ID = 1, dan weet je niet meer waar het bij hoort

- een lossen tblIMAGE_NEWS tblIMAGE_AUTO vind ik niet logisch, omdat de tabellen nagenoeg gelijk zijn.

iemand ideeen hierover?

edit:

valt me net te binnen, misschien moet ik wel een koppel tabel gebruiken, die er zo uit ziet:
NEWS_ID EVENT_ID AUTO_ID IMAGE_ID

en hier alleen het betreffende veld invullen: NEWS_ID&IMAGE_ID indien het een news posting betreft..

is dat een betere oplossing?

[ Voor 11% gewijzigd door trekker22 op 11-10-2003 12:46 ]


  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
Ik zou gaan voor iets als:

images
imageid
url
...

news
newsid
...

images_relaties
relatieid
imageid
type
docid

je zegt bvb. dat news type 1 is, dan haal je met volgende query de gegevens op voor de images van newsid 1

code:
1
2
3
4
5
6
SELECT 
i.url, [ ... ] 
FROM images i, images_relaties r 
WHERE r.type='1' AND 
r.docid='1' AND 
r.imageid=i.imageid


Kan hoogstwaarschijnlijk sneller maar 't is maar een voorbeeldje hé ;-)

If you can't beat them, try harder


  • axis
  • Registratie: Juni 2000
  • Laatst online: 26-01-2023
ik denk dat de oplossing van dingstje het netste is.. heb zelf een tijd geleden ook met dit probleem gezeten, en een dergelijke structuur opgezet.

Two advices for network troubleshooting.. learn to draw diagrams in Visio, and THINK IN LAYERS!


Verwijderd

Yep, wat ik meestal doe is de objecten in de database een database unieke key geven. Ik heb daarnaast ook een tabel die bijhoud welke unieke id aan welk object zit:
Dus:

unique_ids
- id
- tablename

databasetabel
- uniqueid
- rest data


Maar het komt uiteindelijk bijna op hetzelfde neer als de reactie van dingstje

  • mocean
  • Registratie: November 2000
  • Laatst online: 15-08 04:26
Ik zou gaan voor een object georienteerd databasemodel (met evt templat engine),

Afbeeldingslocatie: http://www.habiforum.nl/data/temp/Diagram2.png
Daarmee kan je alles vastleggen binnen je DB.
Je definieert objecttypes, eigenschappen, relaties allemaal binnen je DB.

Uitleg in Smarty forum (Engels)

Koop of verkoop je webshop: ecquisition.com


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

mocean schreef op 11 oktober 2003 @ 18:57:
Ik zou gaan voor een object georienteerd databasemodel (met evt templat engine),

[afbeelding]
Daarmee kan je alles vastleggen binnen je DB.
Je definieert objecttypes, eigenschappen, relaties allemaal binnen je DB.

Uitleg in Smarty forum (Engels)
Dit heeft een voordeel voor bijv. een template engine aangezien je dan niet precies weet wat er afgemeeld moet gaan worden.

De T.S. weet al precies wat er is, dus valt dat voordeel af. En andere voordelen voor het gebruik van een soort van OO achtige DB structuur zie ik in dit geval niet? Het is wel trager, groter en complexer.

Ow, en ik mis ook nog de invulling van de Objecten van de T.S. in de DB die je beschrijft. Waar ga je bijv. de ImageWidth opslaan? Als je een oplossing wil geven doe het dan volledig ;)

[ Voor 3% gewijzigd door Creepy op 11-10-2003 19:23 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • blijhoofd_bennie
  • Registratie: Maart 2000
  • Niet online

blijhoofd_bennie

Wasser für alle!!

Ik zou ook gaan voor het idee van dingetje. Je idee dus uitvoeren door gebruik te maken van een koppeltabel waarin de ID's van news en images samenkomen.

  • trekker22
  • Registratie: Maart 2003
  • Laatst online: 08:11
Ik ben er nu pas aan toegekomen om bovenstaande te implementeren...

maar klopt het dat ik dank geen referentiele integriteit meer kan afdwingen in mijn database?


in Access heb ik een

tblIMAGE
IMAGE_ID

tblIMAGE_RELATED:
IMAGE_ID
RELATED_ID
TYPE_ID

tblNEWS
NEWS_ID

tblAUTO
AUTO_ID

zowel NEWS_ID als AUTO_ID zijn gerelateerd aan RELATED_ID, met referentiele integriteit. Maar als ik een nieuwsbericht met foto toevoeg, dan begint die dus te zeuren dat er ook een gerelateerd record in tblAUTO moet zijn.

Ik zie het toch goed dat ik de referentiele integriteit niet kan behouden?
Pagina: 1