Help mij bij het ontwerpen van een relationeel databasemodel met SQL
description
Met deze prompt krijg je concrete hulp bij het structureren van je database, waardoor je efficiëntere queries kunt schrijven en beter inzicht krijgt in je datamodel. Dit voorkomt veelvoorkomende ontwerpfouten en bespaart tijd bij het bouwen van databases.
prompt
Help mij een relationeel databasemodel te ontwerpen voor het volgende scenario: <beschrijf jouw scenario of use case> Geef aan w ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hieronder vind je een voorstel voor een relationeel databasemodel voor een webshop met klanten, bestellingen en producten.
**Tabellen en relaties:**
1. **Klanten** (`Customers`)
- Bevat informatie over klanten
2. **Producten** (`Products`)
- Bevat informatie over producten
3. **Bestellingen** (`Orders`)
- Bevat informatie over een bestelling, gekoppeld aan een klant
4. **Bestelregels** (`OrderItems`)
- Bevat details over welke producten in een bestelling zitten, inclusief hoeveelheid en prijs
**Relaties:**
- Eén klant kan meerdere bestellingen plaatsen (1:N tussen `Customers` en `Orders`)
- Eén bestelling kan meerdere producten bevatten (N:M tussen `Orders` en `Products` via `OrderItems`)
---
### SQL-code voor het maken van de tabellen:
```sql
-- Klantentabel
CREATE TABLE Customers (
CustomerID INT AUTO_INCREMENT PRIMARY KEY,
Naam VARCHAR(100) NOT NULL,
Email VARCHAR(100) UNIQUE NOT NULL,
Telefoon VARCHAR(20),
Adres VARCHAR(255),
Postcode VARCHAR(10),
Plaats VARCHAR(50),
Land VARCHAR(50)
);
-- Productentabel
CREATE TABLE Products (
ProductID INT AUTO_INCREMENT PRIMARY KEY,
Naam VARCHAR(100) NOT NULL,
Beschrijving TEXT,
Prijs DECIMAL(10,2) NOT NULL,
Voorraad INT NOT NULL
);
-- Bestellingentabel
CREATE TABLE Orders (
OrderID INT AUTO_INCREMENT PRIMARY KEY,
CustomerID INT,
OrderDatum DATETIME DEFAULT CURRENT_TIMESTAMP,
Status VARCHAR(50),
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
-- Bestelregels (orderregels) tabel
CREATE TABLE OrderItems (
OrderItemID INT AUTO_INCREMENT PRIMARY KEY,
OrderID INT,
ProductID INT,
Aantal INT NOT NULL,
Prijs DECIMAL(10,2) NOT NULL,
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID),
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
```
---
### Samenvatting:
- **`Customers`**: klantgegevens
- **`Products`**: productgegevens
- **`Orders`**: informatie over bestellingen, gekoppeld aan klanten
- **`OrderItems`**: details van producten in een bestelling
Deze structuur zorgt voor een flexibel en normaalvormig datamodel, waarmee je gemakkelijk klanten, bestellingen en producten kunt beheren en koppelen.
Heeft u nog verdere wensen of vragen?
provider: deepseek
model: deepseek-chat
Zeker, hier is een relationeel databasemodel voor jouw webshop-scenario:
## Tabellen en Relaties
**1. Klanten (customers)**
- Primair sleutel: customer_id (INT, AUTO_INCREMENT)
- Velden: voornaam, achternaam, email, telefoon, adres, postcode, stad
**2. Producten (products)**
- Primair sleutel: product_id (INT, AUTO_INCREMENT)
- Velden: naam, beschrijving, prijs, voorraad, categorie
**3. Bestellingen (orders)**
- Primair sleutel: order_id (INT, AUTO_INCREMENT)
- Foreign key: customer_id (koppeling naar customers)
- Velden: order_datum, status, totaalbedrag
**4. Orderregels (order_items)**
- Samengestelde primaire sleutel: order_id + product_id
- Foreign keys: order_id (naar orders), product_id (naar products)
- Velden: hoeveelheid, eenheidsprijs
## Relatieschema
- customers (1) → (n) orders
- orders (1) → (n) order_items
- products (1) → (n) order_items
## SQL CREATE Statements
```sql
-- Klanten tabel
CREATE TABLE customers (
customer_id INT AUTO_INCREMENT PRIMARY KEY,
voornaam VARCHAR(50) NOT NULL,
achternaam VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
telefoon VARCHAR(20),
adres VARCHAR(100),
postcode VARCHAR(10),
stad VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Producten tabel
CREATE TABLE products (
product_id INT AUTO_INCREMENT PRIMARY KEY,
naam VARCHAR(100) NOT NULL,
beschrijving TEXT,
prijs DECIMAL(10,2) NOT NULL,
voorraad INT DEFAULT 0,
categorie VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Bestellingen tabel
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT NOT NULL,
order_datum TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status ENUM('verwerkt', 'verzonden', 'afgeleverd', 'geannuleerd') DEFAULT 'verwerkt',
totaalbedrag DECIMAL(10,2) NOT NULL,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
-- Orderregels tabel
CREATE TABLE order_items (
order_id INT NOT NULL,
product_id INT NOT NULL,
hoeveelheid INT NOT NULL,
eenheidsprijs DECIMAL(10,2) NOT NULL,
PRIMARY KEY (order_id, product_id),
FOREIGN KEY (order_id) REFERENCES orders(order_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);
```
## Optionele optimalisaties:
- Indexen toevoegen voor veelgebruikte zoekvelden (email, categorie, status)
- Triggers voor voorraadbeheer bij bestellingen
- Tabel voor klantbetalingen toevoegen indien nodig
Dit model volgt de 3e normaalvorm en zorgt voor efficiënte data-opslag zonder redundantie.