Een 'alias' maken van database records

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Marientjuh
  • Registratie: Oktober 2004
  • Laatst online: 10-05 17:02

Marientjuh

Fullstack developer

Topicstarter
Ik zit met het volgende probleem:

In de database slaan wij profielen op. Deze profielen stellen een download voor in combinatie met gegevens welke de download beschrijven. Op deze gegevens zoekt de gebruiker. Eén van deze gegevens is het materiaal waarvoor het profiel geschikt is.

De database (in vereenvoudige vorm) is dus:

Profielen
- Id
- Materiaal id

Materialen
- Id
- Fabrikant id
- Naam

Nu wil het feit zijn dat er ook materialen kunnen zijn met een andere naam maar waarvoor hetzelfde profiel gebruikt kan worden. Dit heb ik opgelost door een koppeltabel te maken tussen de verschillende materialen.

Nu ben ik dus op zoek naar een manier om alle profielen uit de database te krijgen, en als er dus een 'alias' is voor een materiaal moet 1 profiel meerdere keren weergegeven worden (maar dan met een ander materiaal naam)

Op dit moment heb ik het opgelost in PHP (met alle tekortkomingen) maar ik ben op zoek naar een oplossing aan de database kant om bijvoorbeeld direct goede sortering te doen en recursie in de koppeltabel op te vangen.

Dit is een vereenvoudigde weergave van het probleem omdat het om meerdere eigenschappen van het profiel gaat, en er tevens ook nog licensering gedaan word op parameters (welke gebruikers mogen welke data zien, maar dat is een ander verhaal :) )

Database is Microsoft SQL

Respect begint waar eigen kunnen ophoudt! - Kinderkleding webshop van vrouwlief: coz-adore.nl


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Euh; ik denk dat we te weinig relevante info hebben maar ik vermoed dat er een left-join (Hoe werken joins?) aan te pas komt en dan bijv een constructie als:

SQL:
1
2
3
4
select a.foo, case when b.name is null then a.name else b.name end as productname, ..., ...
from sometable a
left outer join othertable b on a.x = b.y
order by productname

Maar het zou handig zijn als we de exacte tabellen (inc. koppeltabel) zouden zien.

Verder: Waar hoort mijn topic?
SEA >> PRG

[ Voor 20% gewijzigd door RobIII op 28-04-2011 11:17 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Marientjuh
  • Registratie: Oktober 2004
  • Laatst online: 10-05 17:02

Marientjuh

Fullstack developer

Topicstarter
Tabellen zijn:

tblProfiles
- id
- mediaId

tblMedia
- id
- manufacturerId
- name

tblMediaCopies
- parentId
- childId

Voorbeeld data op basis van de tabel definitie:

tblMedia

1 - 1 - Media XYZ
2 - 1 - Media ABC

tblProfiles

1 - 1

tblMediaCopies

1 - 2

Dit betekent dus dat er 1 profiel inzit voor media 1 (XYZ) en er een relatie bestaat van XYZ naar ABC.

De query zou nu het resultaat moeten geven:

Profile id 1 - Media ABC
Profile id 1 - Media XYZ

[ Voor 6% gewijzigd door Marientjuh op 28-04-2011 11:33 ]

Respect begint waar eigen kunnen ophoudt! - Kinderkleding webshop van vrouwlief: coz-adore.nl


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Dan moet je met mijn post toch een heel eind komen? Wat lukt er niet? Wat heb je geprobeerd?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Marientjuh
  • Registratie: Oktober 2004
  • Laatst online: 10-05 17:02

Marientjuh

Fullstack developer

Topicstarter
Ik heb nu deze query:

code:
1
2
3
SELECT     tblProfiles.id, tblMedia.manufacturerId, tblMedia.name
FROM         tblProfiles LEFT OUTER JOIN
                      tblMedia ON tblProfiles.mediaId = tblMedia.id


Dit geeft het resultaat:
code:
1
2
3
id | manufacturerId | name
--------------------------------
1  | 1              | Media ABC


Hoe kan ik hierop de tblMediaCopies op toepassen? De tabel word alleen gevuld als er dus een relatie tussen media's/materialen is...

Respect begint waar eigen kunnen ophoudt! - Kinderkleding webshop van vrouwlief: coz-adore.nl


Acties:
  • 0 Henk 'm!

Anoniem: 35775

Is het dan niet handiger om de 1 op 1 relatie tussen een profiel en media helemaal weg te doen en altijd een een op meer relatie te gebruiken via de koppeltabel ?

Eventueel zou je in die koppeltabel ook aan kunnen geven dat media ABC als 'hoofdmedia' gezien moet worden.

Acties:
  • 0 Henk 'm!

  • Marientjuh
  • Registratie: Oktober 2004
  • Laatst online: 10-05 17:02

Marientjuh

Fullstack developer

Topicstarter
@thioz
Een idee die vandaag ook bij mij op kwam borrelen. Alleen dit gaat een heftige wijziging in onze code worden aangezien het core data is... ;) Ik ga er verder over nadenken, bedankt voor de handreiking.

Respect begint waar eigen kunnen ophoudt! - Kinderkleding webshop van vrouwlief: coz-adore.nl


Acties:
  • 0 Henk 'm!

Anoniem: 35775

Hmm ... 'heftige wijzigingen' ... klinkt .. eh... heftig :P

Ligt natuurlijk een beetje aan de manier van developen maar in het meest ideale geval heb je een Model / DAO of whatever die ervoor zorgt dat de aanroep naar de DB en de queries losstaan van de daadwerkelijke logica.

Qua DB migratie lijkt het me ook niet zo heel heftig, want met een paar queries zou je toch een eind moeten komen om alle relaties aanvankelijk goed te zetten.

Daarnaast is 'veel werk' nooit een excuus om een systeem niet beter/schaalbaarder/in de toekomt beter onderhoudbaar te maken en door te borduren op iets waar je vroeg of laat mee vast loopt.

Helaas is het niet altijd makkelijk om hier een leidinggevende / management van te overtuigen

Acties:
  • 0 Henk 'm!

  • Marientjuh
  • Registratie: Oktober 2004
  • Laatst online: 10-05 17:02

Marientjuh

Fullstack developer

Topicstarter
De abstractie is inderdaad aanwezig, en het management overtuigen moet ook wel lukken aangezien dit functionaliteit is die het hele systeem ontzettend krachtig gaat maken.

Alleen met heftige wijziging bedoel ik dat er goed getest moet worden omdat er veel bovenop gebouwd is zoals statistieken en externe software.

Ik ga onderzoek doen naar hoe groot het project gaat worden ;)

Respect begint waar eigen kunnen ophoudt! - Kinderkleding webshop van vrouwlief: coz-adore.nl


Acties:
  • 0 Henk 'm!

Anoniem: 35775

Nice ! ... goed om te horen dat er nog mensen zijn die niet bang zijn voor van die enge veranderingen ;)

ik zou zeggen... veel succes en laat maar weten wat er uit je onderzoek komt, ben wel nieuwsgierig.

Acties:
  • 0 Henk 'm!

  • Marientjuh
  • Registratie: Oktober 2004
  • Laatst online: 10-05 17:02

Marientjuh

Fullstack developer

Topicstarter
Het heeft top prioriteit gekregen ;) Een bestaande klant heeft er al behoorlijk last van.

Het plan is om op basis van de relaties binnen de materialen de materiaal - profiel relatie te updaten.

Respect begint waar eigen kunnen ophoudt! - Kinderkleding webshop van vrouwlief: coz-adore.nl

Pagina: 1