Ik ben momenteel bezig met het overzetten van een database met (auto) onderdelen van een Multivalue database (Pick / D3nt) naar een relationele database (msSQL 2005).
Voor het grootste gedeelt van de database is dit geen probleem, echter over 1 stuk heb ik zo mijn twijfels.
Namelijk de onderdelen zelf, we hebben ongeveer 1100 verschillende onderdelen in de database welke allemaal verschillende velden (specificaties) bevatten. Totaal hebben we z'n 150 verschillende velden voor deze onderdelen. In Pick maakt het niet uit dat een record uit ruim 150 velden bestaat waarvan telkens maar een klein aantal gevuld is. In msSQL is dit uiteraard een ander verhaal om het aantal velden in te perken kwam ik op het volgende ontwerp:

Tussen Delen.KopId en Koppen.KopId loopt uiteraard ook een relatie. Deze is helaas niet op het plaatje gekomen.
Het plaatje zegt waarschijnlijk meer dan woorden maar toch even kort.
In de delen tabel zit een KopId waar mee in een koppeltabel (Koppen) de bijbehorende velden opgezocht kunnen worden. De voorraad tabel bevat de unieke voorraad regels welke linken naar de Koppeltabel (voorraadvelden) welke de waarde van de velden bevat.
Dit ziet er naar mijn idee redelijk uit, echter heb ik het probleem dat ik de voorraad niet kan selecteren doormiddel van een sql-regel.
De bedoeling is dat ik een select van voorraad opvraag en netjes alle velden terugkrijg.
Welke ik dan naast elkaar in een gridview kan display'en om de gebruiker een overzicht te geven.
De enige 2 methoden die lijken te werken zijn de volgende.
1. Aparte selects
2. Gecombineerde select
Methode 1 is erg traag afhankelijk van het aantal resultaten.
Methode 2 is redelijk vlug echter moet er dan zelf nog de dubbele gedeelte van de velden ‘handmatige’ verwijderd worden, wat redelijk gaat zolang deze opvolgend zijn echter bij een sortering lever deze handeling een flinke vertraging op.
Is er een select manier welke ik kan gebruiken of heb ik een fundamentele fout in mijn database zitten?
Voor het grootste gedeelt van de database is dit geen probleem, echter over 1 stuk heb ik zo mijn twijfels.
Namelijk de onderdelen zelf, we hebben ongeveer 1100 verschillende onderdelen in de database welke allemaal verschillende velden (specificaties) bevatten. Totaal hebben we z'n 150 verschillende velden voor deze onderdelen. In Pick maakt het niet uit dat een record uit ruim 150 velden bestaat waarvan telkens maar een klein aantal gevuld is. In msSQL is dit uiteraard een ander verhaal om het aantal velden in te perken kwam ik op het volgende ontwerp:
Tussen Delen.KopId en Koppen.KopId loopt uiteraard ook een relatie. Deze is helaas niet op het plaatje gekomen.
Het plaatje zegt waarschijnlijk meer dan woorden maar toch even kort.
In de delen tabel zit een KopId waar mee in een koppeltabel (Koppen) de bijbehorende velden opgezocht kunnen worden. De voorraad tabel bevat de unieke voorraad regels welke linken naar de Koppeltabel (voorraadvelden) welke de waarde van de velden bevat.
Dit ziet er naar mijn idee redelijk uit, echter heb ik het probleem dat ik de voorraad niet kan selecteren doormiddel van een sql-regel.
De bedoeling is dat ik een select van voorraad opvraag en netjes alle velden terugkrijg.
Welke ik dan naast elkaar in een gridview kan display'en om de gebruiker een overzicht te geven.
De enige 2 methoden die lijken te werken zijn de volgende.
1. Aparte selects
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
| -- Als eerste deze query SELECT Debiteuren.Rode_Naam, Voorraad.BijzonderheidInet FROM Voorraad INNER JOIN Debiteuren ON Voorraad.DebiteurId = Debiteuren.DebiteurId WHERE (Voorraad.ModelId = @ModelCode) AND (Voorraad.DeelId = @DeelCode) -- Voor elke resultrecord van de eerste query doen we dan deze query SELECT Velden.Naam, VoorraadVelden.WaardeAM FROM VoorraadVelden INNER JOIN Velden ON VoorraadVelden.VeldId = Velden.VeldId WHERE (VoorraadVelden.InternetId = @InternetCode) AND (VoorraadVelden.SModelId = @SmodelCode) AND (VoorraadVelden.DebiteurId = @DebiteurCode) AND (VoorraadVelden.ModelId = @ModelCode) AND (VoorraadVelden.DeelId = @DeelCode) |
2. Gecombineerde select
SQL:
1
2
3
4
5
6
| SELECT Debiteuren.Rode_Naam, Voorraad.InternetId, Voorraad.BijzonderheidInet, VoorraadVelden.WaardeAM, Velden.Naam FROM Voorraad INNER JOIN VoorraadVelden ON Voorraad.DeelId = VoorraadVelden.DeelId AND Voorraad.ModelId = VoorraadVelden.ModelId AND Voorraad.DebiteurId = VoorraadVelden.DebiteurId AND Voorraad.SModelId = VoorraadVelden.SModelId AND Voorraad.InternetId = VoorraadVelden.InternetId INNER JOIN Velden ON VoorraadVelden.VeldId = Velden.VeldId INNER JOIN Debiteuren ON Voorraad.DebiteurId = Debiteuren.DebiteurId |
Methode 1 is erg traag afhankelijk van het aantal resultaten.
Methode 2 is redelijk vlug echter moet er dan zelf nog de dubbele gedeelte van de velden ‘handmatige’ verwijderd worden, wat redelijk gaat zolang deze opvolgend zijn echter bij een sortering lever deze handeling een flinke vertraging op.
Is er een select manier welke ik kan gebruiken of heb ik een fundamentele fout in mijn database zitten?
Heeft uw auto pijn? Ga dan naar de onderdelenlijn
Het bedrijf waar ik met veel plezier werk - Mijn eigen vertrouwde domein