La base de démonstration
Tous les exemples utilisent la même base : une boutique en ligne, avec ses clients, son catalogue, ses commandes et son personnel. Ses quelque 50 000 lignes suffisent pour observer le comportement des regroupements et des index.
Gardez cette page à portée de main. Elle permet de vérifier les colonnes disponibles quand vous commencez à écrire vos propres requêtes.
Les informations ci-dessous sont lues dans le fichier de la base : elles correspondent donc à la base ouverte dans les exemples.
Les noms de colonnes en police à chasse fixe sont ceux que vous taperez. La colonne des remarques indique ce que la base sait de chacune :
- clé primaire — identifie la ligne. Jamais répétée, jamais vide.
- obligatoire — la colonne ne peut pas rester vide (NOT NULL). Tout ce qui n’a pas cette mention peut contenir NULL, et c’est le sujet de la leçon sur le filtrage.
- → table.colonne — une clé étrangère : cette colonne contient une valeur venant de cette autre table. Les jointures suivent ces liens.
- unique — deux lignes ne peuvent pas partager cette valeur. C’est là-dessus qu’un upsert détecte un conflit.
- indexée — la base conserve une copie triée de cette colonne, ce qui rend le filtrage et le tri rapides. La dernière leçon explique ce que cela signifie.
Catalogue
categories 33 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
name | TEXT | obligatoire, unique |
description | TEXT | |
parent_id | INTEGER | → categories.id, indexée |
sort_order | INTEGER | obligatoire, défaut 0 |
is_active | INTEGER | obligatoire, défaut 1 |
products 400 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
category_id | INTEGER | → categories.id, obligatoire, indexée |
name | TEXT | obligatoire |
description | TEXT | |
sku | TEXT | obligatoire, unique |
price | REAL | obligatoire, indexée, défaut 0 |
cost | REAL | obligatoire, défaut 0 |
stock_quantity | INTEGER | obligatoire, défaut 0 |
weight_kg | REAL | |
attributes | TEXT | |
is_active | INTEGER | obligatoire, défaut 1 |
created_at | TEXT | obligatoire |
updated_at | TEXT | obligatoire |
product_images 1 024 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
product_id | INTEGER | → products.id, obligatoire, indexée |
url | TEXT | obligatoire |
alt_text | TEXT | |
sort_order | INTEGER | obligatoire, défaut 0 |
is_primary | INTEGER | obligatoire, défaut 0 |
tags 15 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
name | TEXT | obligatoire, unique |
product_tags 624 lignes
| Colonne | Type | Remarques |
|---|---|---|
product_id | INTEGER | clé primaire, → products.id |
tag_id | INTEGER | clé primaire, → tags.id |
suppliers 12 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
name | TEXT | obligatoire |
contact_name | TEXT | |
email | TEXT | |
phone | TEXT | |
country | TEXT | |
rating | REAL | |
is_active | INTEGER | obligatoire, défaut 1 |
product_suppliers 579 lignes
| Colonne | Type | Remarques |
|---|---|---|
product_id | INTEGER | clé primaire, → products.id |
supplier_id | INTEGER | clé primaire, → suppliers.id |
supplier_sku | TEXT | |
unit_cost | REAL | obligatoire |
lead_time_days | INTEGER | obligatoire, défaut 7 |
inventory_logs 11 547 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
product_id | INTEGER | → products.id, obligatoire, indexée |
change_qty | INTEGER | obligatoire |
reason | TEXT | obligatoire |
reference | TEXT | |
employee_id | INTEGER | → employees.id |
logged_at | TEXT | obligatoire, indexée |
Clients
customers 1 500 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
first_name | TEXT | obligatoire, indexée |
last_name | TEXT | obligatoire, indexée |
email | TEXT | obligatoire, unique |
phone | TEXT | |
birth_date | TEXT | |
country | TEXT | obligatoire, indexée, défaut 'US' |
marketing_opt_in | INTEGER | obligatoire, défaut 0 |
loyalty_points | INTEGER | obligatoire, défaut 0 |
created_at | TEXT | obligatoire |
updated_at | TEXT | obligatoire |
addresses 1 959 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
customer_id | INTEGER | → customers.id, obligatoire, indexée |
label | TEXT | obligatoire, défaut 'home' |
line1 | TEXT | obligatoire |
line2 | TEXT | |
city | TEXT | obligatoire |
postal_code | TEXT | |
country | TEXT | obligatoire |
is_default | INTEGER | obligatoire, défaut 0 |
wishlists 2 493 lignes
| Colonne | Type | Remarques |
|---|---|---|
customer_id | INTEGER | clé primaire, → customers.id |
product_id | INTEGER | clé primaire, → products.id |
added_at | TEXT | obligatoire |
reviews 2 992 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
product_id | INTEGER | → products.id, obligatoire, unique |
customer_id | INTEGER | → customers.id, obligatoire, unique |
rating | INTEGER | obligatoire |
title | TEXT | |
body | TEXT | |
is_verified | INTEGER | obligatoire, défaut 0 |
helpful_votes | INTEGER | obligatoire, défaut 0 |
created_at | TEXT | obligatoire |
notifications 3 000 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
customer_id | INTEGER | → customers.id, obligatoire, indexée |
type | TEXT | obligatoire |
title | TEXT | obligatoire |
body | TEXT | |
is_read | INTEGER | obligatoire, indexée, défaut 0 |
created_at | TEXT | obligatoire |
Commandes
orders 4 000 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
order_number | TEXT | obligatoire, unique |
customer_id | INTEGER | → customers.id, obligatoire, indexée |
address_id | INTEGER | → addresses.id |
shipping_method_id | INTEGER | → shipping_methods.id |
coupon_id | INTEGER | → coupons.id |
status | TEXT | obligatoire, indexée |
subtotal | REAL | obligatoire, défaut 0 |
discount | REAL | obligatoire, défaut 0 |
shipping_cost | REAL | obligatoire, défaut 0 |
total | REAL | obligatoire, défaut 0 |
notes | TEXT | |
ordered_at | TEXT | obligatoire, indexée |
updated_at | TEXT | obligatoire |
order_items 12 091 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
order_id | INTEGER | → orders.id, obligatoire, unique |
product_id | INTEGER | → products.id, obligatoire, unique |
quantity | INTEGER | obligatoire |
unit_price | REAL | obligatoire |
payments 3 651 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
order_id | INTEGER | → orders.id, obligatoire, indexée |
method | TEXT | obligatoire |
amount | REAL | obligatoire |
currency | TEXT | obligatoire, défaut 'USD' |
status | TEXT | obligatoire |
transaction_ref | TEXT | |
paid_at | TEXT |
shipments 2 319 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
order_id | INTEGER | → orders.id, obligatoire, indexée |
carrier | TEXT | obligatoire |
tracking_number | TEXT | |
shipped_at | TEXT | |
delivered_at | TEXT |
shipping_methods 5 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
name | TEXT | obligatoire, unique |
base_cost | REAL | obligatoire |
est_days | INTEGER | obligatoire |
is_active | INTEGER | obligatoire, défaut 1 |
coupons 10 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
code | TEXT | obligatoire, unique |
discount_type | TEXT | obligatoire |
discount_value | REAL | obligatoire |
min_order | REAL | obligatoire, défaut 0 |
starts_at | TEXT | obligatoire |
ends_at | TEXT | obligatoire |
max_uses | INTEGER | |
used_count | INTEGER | obligatoire, défaut 0 |
Personnel
departments 10 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
name | TEXT | obligatoire, unique |
description | TEXT | |
created_at | TEXT | obligatoire |
employees 120 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
department_id | INTEGER | → departments.id, obligatoire, indexée |
manager_id | INTEGER | → employees.id, indexée |
first_name | TEXT | obligatoire |
last_name | TEXT | obligatoire |
email | TEXT | obligatoire, unique |
phone | TEXT | |
hire_date | TEXT | obligatoire |
salary | REAL | obligatoire, défaut 0 |
position | TEXT | |
is_active | INTEGER | obligatoire, défaut 1 |
audit_logs 2 000 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | clé primaire |
employee_id | INTEGER | → employees.id |
action | TEXT | obligatoire |
table_name | TEXT | obligatoire, indexée |
record_id | INTEGER | indexée |
old_values | TEXT | |
new_values | TEXT | |
ip_address | TEXT | |
created_at | TEXT | obligatoire |
Paramètres
settings 8 lignes
| Colonne | Type | Remarques |
|---|---|---|
key | TEXT | clé primaire |
value | TEXT | obligatoire |
description | TEXT | |
updated_at | TEXT | obligatoire |
Vues
Une vue est une requête enregistrée qui se comporte comme une table : vous pouvez faire un SELECT dessus, mais aucune ligne ne lui appartient en propre. Ces quatre-là résument les tables ci-dessus.
v_customer_lifetime 1 500 lignes
| Colonne | Type | Remarques |
|---|---|---|
customer_id | INTEGER | |
customer | TEXT | |
country | TEXT | |
orders | TEXT | |
revenue | TEXT | |
first_order | TEXT | |
last_order | TEXT |
v_low_stock 44 lignes
| Colonne | Type | Remarques |
|---|---|---|
id | INTEGER | |
sku | TEXT | |
name | TEXT | |
stock_quantity | INTEGER | |
category | TEXT |
v_order_summary 4 000 lignes
| Colonne | Type | Remarques |
|---|---|---|
order_id | INTEGER | |
order_number | TEXT | |
status | TEXT | |
ordered_at | TEXT | |
customer | TEXT | |
country | TEXT | |
items | TEXT | |
total | REAL |
v_product_sales 400 lignes
| Colonne | Type | Remarques |
|---|---|---|
product_id | INTEGER | |
name | TEXT | |
sku | TEXT | |
category | TEXT | |
units_sold | TEXT | |
revenue | TEXT | |
avg_rating | TEXT | |
review_count | TEXT |