Klopt dit DB ontwerp een beetje?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Niels Hermans

Niels Hermans

07/04/2011 11:33:33
Quote Anchor link
Beste dames en heren,

Ik ben aan het proberen een database te normaliseren / te ontwerpen. Nu heb ik het volgende ontwerp gemaakt.

Ik zou graag eens wat commentaar ontvangen, want ik begrijp het normaliseren denk ik wel, maar de verbindingen van de tabellen nog niet helemaal.

Ter verduidelijking:

tabellen:
ditbedrijf - het bedrijfsprofiel van eigenaar
users - gebruikerstabel
rechten - hier komen de rechtencodes in te staan gekoppeld aan user
koppeltabel persoonlijk-zakelijk - koppelt een persoon aan een bedrijf of andersom
contact_persoon - privegegevens
contact_zakelijk - zakelijke / bedrijfsinformatie
factuur - hier staan gegevens opgeslagen per factuur
koppeltabel factuur - koppelt factuur aan bedrijf of persoon
btw - kopppelt een btw percentage aan een factuur.

Dus ik ben benieuwd, wat heb ik er van gebakken?

Groeten!

Niels

Afbeelding
Gewijzigd op 07/04/2011 11:39:39 door Niels Hermans
 
PHP hulp

PHP hulp

18/04/2024 13:31:37
 
Jelmer -

Jelmer -

07/04/2011 11:40:27
Quote Anchor link
Overal waar je een nummertje in de kolomnaam hebt staan gaat het fout. Daar moet je juist normaliseren.

Bijv. factuur-producten-prijs.

Factuur heeft meerdere producten, een product kan op meerdere facturen voorkomen, maar de prijs is gekoppeld aan dat specifieke factuur (immers, de prijs van het product kan veranderen, maar de prijs op je al verzonden facturen blijft gelijk)

facturen
- id
- factuur_datum
- verval_datum
-...

producten
- id
- naam

factuur_producten
- id
- factuur_id
- product_id
- prijs

Je factuur heeft dan meerdere factuur_producten eraan gekoppeld (factuur.id = factuur_producten.factuur_id) en aan ieder van die factuur_producten is een prijs en een product gekoppeld (factuur_producten.product_id = producten.id).

Probeer dit eerst eens met de telefoonnummers (ieder telefoonnummer heeft één contactpersoon, een contactpersoon kan meerdere telefoonnummers hebben)
 
Niels K

Niels K

07/04/2011 12:26:45
Quote Anchor link
Wat misschien ook een leuke tip is: Design je ERD in het programma workbench. Wanneer je ERD klaar is, kan je hem met een aantal klikken naar SQL exporteren.
Gewijzigd op 07/04/2011 12:26:58 door Niels K
 
John D

John D

07/04/2011 12:31:56
Quote Anchor link
Minimaal: factuur moet je splitsen in factuur(_kop) en factuur_regel. Een BTW percentage hoort bij een product. De overheid bepaalt op welk product welke BTW geldig is. Je kan dus de BTW beter bij een product onderbrengen.
Gewijzigd op 07/04/2011 12:36:42 door John D
 
Niels Hermans

Niels Hermans

07/04/2011 19:05:07
Quote Anchor link
Bedankt voor de reacties en tips! Klinkt allemaal heel logisch! Ik ga er eens werk van maken komende dagen.

Bedankt iedereen!
 
Niels Hermans

Niels Hermans

11/04/2011 10:19:23
Quote Anchor link
Dit is wat ik er van gemaakt heb tot nu toe!

Ik heb een aantal nieuwe koppeltabelletjes gemaakt om dubbele opslag te voorkomen. Zouden er nog dingen verbeterd kunnen worden?
Vergeet ik iets? Hieronder staat mijn verbeterde/vernieuwde versie:


Afbeelding
Gewijzigd op 11/04/2011 10:20:09 door Niels Hermans
 
Vdleije .

vdleije .

11/04/2011 11:14:31
Quote Anchor link
Je hebt een aparte klasse rechten aangemaakt, maar die staat nog in user. Die zou ik uit user halen (want dat wordt een FK naar de klasse rechten) en in rechten iets toevoegen waardoor duidelijk wordt welke rechten er zijn.

EDIT:
Waarom heb je een aparte klasse email? Een email hoort toch bij een user, laat hem dan ook onder user vallen.
Gewijzigd op 11/04/2011 11:16:06 door vdleije .
 
Niels Hermans

Niels Hermans

11/04/2011 11:40:11
Quote Anchor link
@ Frizzl

bedankt voor de tip over de rechten,

De aparte klasse email, is omdat een contact, zakelijk of persoonlijk, wellicht meerdere email adressen kan hebben. en dit dus zo af wil vangen.
 
Niels K

Niels K

11/04/2011 19:25:25
Quote Anchor link
Kan je niet richting een mail queue programmeren?
 
Niels Hermans

Niels Hermans

11/04/2011 20:52:57
Quote Anchor link
Dat zou natuurlijk kunnen ( denk ik als ik het goed begrijp ), maar het gaat hier om een contact en factuur systeem.

Dus moet ik nog steeds een duidelijke scheiding tussen een of meerdere email adressen van een persoon en/of bedrijf kunnen maken.

Toch? of begrijp ik "mail queue" verkeerd?
 
Niels K

Niels K

11/04/2011 20:55:02
Quote Anchor link
Mail queue is een tabel met een verzameling mails.
Er zijn een aantal redenen om voor een mail queue te kiezen:

- Statistieken / bewijs (Wat voor mails, wanneer welke mail, naar wie welke mail etc)
- Geen problemen meer dat gebruikers foutmeldingen krijgen over email problemen.

Je kan dan alles via bijvoorbeeld een cron laten uitvoeren en laten verzenden.
 
Niels Hermans

Niels Hermans

11/04/2011 21:07:25
Quote Anchor link
Dus dat zou betekenen dat ik nog een extra tabel zou maken, welke alle emails die uitgaan opslaat en onverzonden mails bijvoorbeeld aan het einde van de dag via de cron laat verzenden ? Klinkt wel interesant. Ik ga er eens over nadenken.
 
Niels K

Niels K

11/04/2011 21:11:30
Quote Anchor link
Dat zou kunnen. Maar dat ligt aan de ernst van de mailtjes. In een webshop wil je de 'wachtwoord vergeten' mail direct versturen. Vandaar dat ik hem zelf altijd aan laat staan. (oneindige loop)

Daarnaast is het niet één tabel maar meerdere. Want denk eens aan templates en aan template versies..
 
Niels Hermans

Niels Hermans

11/04/2011 21:25:33
Quote Anchor link
Nou opzich is de ernst niet echt groot, sinds het geen webshop is op dit moment maar een soort van begin/uitbreiding van een Project manager. Het is een adresboek gekoppeld aan een factuursysteem. Dus de groep mensen die afhankelijk is van het systeem ( mijn stagebedrijfje ) is op dit moment nog niet heel groot.

Wellicht beter om als er nog tijd over is dit te gaan implementeren.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.