Database inrichting

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Peter Klaessen

Peter Klaessen

03/03/2017 11:19:38
Quote Anchor link
Hoi,

Ik heb een vraagje hoe ik mijn database het beste kan inrichten.

Ik heb zelf bedacht dat dit mij dit het beste leek:

Table name: Contracts

Kolommen: Contract_ID PRIMARY AI, Contract_type PRIMARY

Table name: MailAddresses

Kolommen: Contract_type PRIMARY, Contract_mailaddress

Table name: Alle contract types

Kolommen: Contract_ID PRIMARY AI, Contract_type PRIMARY, en alle verdere nodige kolommen.

Table contracts bestaat zodat Contract_ID en Contract_type gekoppeld zijn met elkaar. (Of is dit overbodig?)
Vervolgens bestaat MailAddresses zodat er aan ieder type contract een mailadres te koppelen is.

En in de laatste tabellen staan alle gegevens van de contracten zelf. Deze heb ik in verschillende tabellen gezet omdat er verschillende kolommen per contract type zijn.

Iemand nog tips, of op- of aanmerkingen?

Alvast bedankt!

Met vriendelijke groet,

Peter Klaessens
 
PHP hulp

PHP hulp

15/11/2024 22:30:46
 
Ward van der Put
Moderator

Ward van der Put

03/03/2017 12:13:14
Quote Anchor link
Ik zou eerder zoiets verwachten:

contract_types:
# contract_type_id (PK)
* contract_type_description

contracts:
# contract_id (PK)
* contract_type_id (FK)
o contractor_email_address
 
Peter Klaessen

Peter Klaessen

03/03/2017 12:22:33
Quote Anchor link
Ward van der Put op 03/03/2017 12:13:14:
Ik zou eerder zoiets verwachten:

contract_types:
# contract_type_id (PK)
* contract_type_description

contracts:
# contract_id (PK)
* contract_type_id (FK)
o contractor_email_address


Ieder contract type hoeft maar 1 emailadres te krijgen. Ik vond het overbodig om in ieder record opnieuw het emailadres te herhalen. Dat is de reden waarom ik daar een aparte tabel van heb gemaakt.

Kan je mij een korte uitleg geven wat de #, * en het rondje inhouden?

Overigens moet het Contract_type in tabel Contracts in mijn geval wel een foreign key zijn, toch? (Foutje die ik nu inzie)
Gewijzigd op 03/03/2017 12:24:56 door Peter Klaessen
 
Ward van der Put
Moderator

Ward van der Put

03/03/2017 12:29:00
Quote Anchor link
Je gebruikt de term type anders dan ik die zou gebruiken. Je zou verwachten je een handvol contracttypen hebt en honderden of duizenden contracten van één type. Je zou ook verwachten dat je per contractant een e-mailadres hebt, maar jij hebt kennelijk per type/soort contract maar één e-mailadres.

# is een sleutel;
* een verplicht gegeven;
o een optioneel gegeven.
 
Peter Klaessen

Peter Klaessen

07/03/2017 14:14:35
Quote Anchor link
Ward van der Put op 03/03/2017 12:29:00:
Je gebruikt de term type anders dan ik die zou gebruiken. Je zou verwachten je een handvol contracttypen hebt en honderden of duizenden contracten van één type. Je zou ook verwachten dat je per contractant een e-mailadres hebt, maar jij hebt kennelijk per type/soort contract maar één e-mailadres.

# is een sleutel;
* een verplicht gegeven;
o een optioneel gegeven.


Allereerst bedankt voor reacties.

Misschien moet ik het toch op jou manier doen voor een eventuele latere aanpassing waarin elk contract toch een eigen email krijgt.

Ik heb inderdaad een handvol contracttypen. +/- 10. Ik ga in ieder record een email plaatsen.

Alleen ik weet nog niet zo goed hoe ik mijn database het beste kan inrichten. Ik verwacht dat alle contracten dezelfde velden krijgen. Verder wil ik wel per contract type permissies toepassen. Ik denk dat ik dmv php deze permissies ook op 1 tabel kan instellen. Zou het dan slim zijn om alles in 1 tabel te doen?

Als volgt:

contracts
#contract_id
contract_type
contract_name
...
 
Frank Nietbelangrijk

Frank Nietbelangrijk

07/03/2017 14:46:31
Quote Anchor link
Je moet naar een nieuwe tabel wanneer er een relatie is waarbij:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
een tabel een relatie heeft naar meerdere records uit een andere tabel.


Bovenstaande klinkt misschien ingewikkeld maar dat valt mee als je het in de praktijk brengt. voorbeeldje:

één gebruiker kan MEERDERE contracten hebben. Dit wordt dus een User tabel en een Contract tabel. In de contract tabel komt een FK naar de user van wie dit contract is. Dit noemen we een one-to-many relatie

Soms komt het ook voor dat meerdere records van tabel A een relaie hebben met meerdere records van tabel B.
Bijvoorbeeld een tabel Article en een tabel Category waarbij je wilt dat een categorie meerdere artikelen laat zien maar ook dat een artikel in meerdere categorieën geplaatst kan worden.
We noemen dit een Many-to-many relatie. Hierbij heb je drie tabellen nodig:
- Product
- Category
- products_categories (koppeltabel)

De koppeltabel krijgt twee FK kolommen: product_id en category_id.


Meerdere op elkaar lijkende items in één tabel
Je hebt meerdere contract types zeg je maar deze lijken qua opslag erg op elkaar.

Je kunt ze dan in één tabel opslaan. Voeg een extra kolom toe aan de tabel waarin je voor ieder type een unieke naam opslaat. We noemen dat een "discriminator column". Je applicatie ziet aan deze kolom over welk type contract het gaat en weet vervolgens welke kolommen in de tabel van toepassing zijn voor het huidige type. Als je OOP programmeert kun je dit ook heel mooi opvangen met afgeleide classen van één hoofd class.
Gewijzigd op 07/03/2017 14:55:47 door Frank Nietbelangrijk
 



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.