Voor m'n werk wil ik in m'n eigen tijd eigenlijk een issue-logger bouwen, een kleine web applicatie waar klanten, ontwikkelaars, beheerders, etc. de bugs en opmerkingen kwijt kunnen.
Nu heb ik hier vanochtend in de auto over nagedacht hoe ik dit in de database wil gaan oplossen.
M'n idee is als volgt:
Er zitten meerdere klanten in het systeem met ieder hun eigen ID. Er kunnen in de loop der tijd meer klanten bij komen. Deze klanten worden in een klanten tabel opgeslagen met daarin dus hun auto-id, naam en nog wat andere gegevens.
Verder zou er nog een product tabel kunnen komen. Ieder product heeft ook weer z'n eigen ID, naam en andere gegevens.
Deze twee tabellen zijn behoorlijk simpel.
Nu komt er een derde tabel, de Issue tabel. Hierin moet een primary key staan (ID), een relatie naar de klant en een relatie naar het product. Uiteraard ook nog met informatie van het issue.
Hoe ik me de issue tabel voorstel is als volgt
Het IssueID is het referentiepunt als er met een klant wordt gesproken, zodat we beide weten waar we over spreken.
Persoonlijk vind ik het niet mooi dat dit een auto-id veld wordt, want dan kan het voorkomen dat IssueID 1 bij klant 1 hoort, IssueID 2 bij klant 2 en IssueID 3 bij klant 1.
Klant 1 heeft dan de issue's 1 en 3. Dit is niet echt mooi, want zo ontstaan er gaten in de telling. Ik zou dus graag zien dat Klant 1 altijd opvolgende nummers heeft, dus 1, 2, 3, 4, 5, 6 en klant 2 ook dezelfde nummers kan hebben, maar dan voor andere issues.
Hieruit blijkt dat m'n eerste idee niet kan en dat de tabel er zo uit zal moeten komen te zien denk ik:
IssueID is dan niet meer uniek en gewoon een INT.
M'n vraag hierbij is, hoe zorg ik er voor dat het IssueID voor iedere klant uniek is.
De meest logische oplossing is om in de business laag het laatste IssueID van de betreffende klant op te halen en dit IssueID met 1 op te hogen. Dit vind ik eigenlijk een houtje-touwtje oplossing en vroeg me dus af of er betere methoden hiervoor zijn te bedenken.
Een andere oplossing is om iedere klant een eigen Issue-tabel te geven, maar dat vind ik een nog slechtere oplossing, aangezien je dan continu DB aanpassingen moet doen wanneer je een nieuwe klant in het systeem invoert.
Heeft iemand hier een beter idee voor dan ik zojuist heb geschetst in m'n business-laag voorbeeld?
Oh ja, de omgeving waar ik mee werk is SQL Server 2005 en .Net 3.5.
Nu heb ik hier vanochtend in de auto over nagedacht hoe ik dit in de database wil gaan oplossen.
M'n idee is als volgt:
Er zitten meerdere klanten in het systeem met ieder hun eigen ID. Er kunnen in de loop der tijd meer klanten bij komen. Deze klanten worden in een klanten tabel opgeslagen met daarin dus hun auto-id, naam en nog wat andere gegevens.
Verder zou er nog een product tabel kunnen komen. Ieder product heeft ook weer z'n eigen ID, naam en andere gegevens.
Deze twee tabellen zijn behoorlijk simpel.
Nu komt er een derde tabel, de Issue tabel. Hierin moet een primary key staan (ID), een relatie naar de klant en een relatie naar het product. Uiteraard ook nog met informatie van het issue.
Hoe ik me de issue tabel voorstel is als volgt
| IssueID | KlantID | ProductID | Melding | Opgelost | etc... |
Het IssueID is het referentiepunt als er met een klant wordt gesproken, zodat we beide weten waar we over spreken.
Persoonlijk vind ik het niet mooi dat dit een auto-id veld wordt, want dan kan het voorkomen dat IssueID 1 bij klant 1 hoort, IssueID 2 bij klant 2 en IssueID 3 bij klant 1.
Klant 1 heeft dan de issue's 1 en 3. Dit is niet echt mooi, want zo ontstaan er gaten in de telling. Ik zou dus graag zien dat Klant 1 altijd opvolgende nummers heeft, dus 1, 2, 3, 4, 5, 6 en klant 2 ook dezelfde nummers kan hebben, maar dan voor andere issues.
Hieruit blijkt dat m'n eerste idee niet kan en dat de tabel er zo uit zal moeten komen te zien denk ik:
| ID | IssueID | KlantID | ProductID | Melding | Opgelost | etc... |
IssueID is dan niet meer uniek en gewoon een INT.
M'n vraag hierbij is, hoe zorg ik er voor dat het IssueID voor iedere klant uniek is.
De meest logische oplossing is om in de business laag het laatste IssueID van de betreffende klant op te halen en dit IssueID met 1 op te hogen. Dit vind ik eigenlijk een houtje-touwtje oplossing en vroeg me dus af of er betere methoden hiervoor zijn te bedenken.
Een andere oplossing is om iedere klant een eigen Issue-tabel te geven, maar dat vind ik een nog slechtere oplossing, aangezien je dan continu DB aanpassingen moet doen wanneer je een nieuwe klant in het systeem invoert.
Heeft iemand hier een beter idee voor dan ik zojuist heb geschetst in m'n business-laag voorbeeld?
Oh ja, de omgeving waar ik mee werk is SQL Server 2005 en .Net 3.5.
Battle.net - Jandev#2601 / XBOX: VriesDeJ