Die Beispiel-Shopdatenbank
Alle Beispiele laufen auf derselben Webshop-Datenbank mit Kunden, Produktkatalog, Bestellungen und Personal. Sie enthält etwa 50.000 Zeilen, sodass sich Gruppierungen und Indizes unter realistischen Bedingungen beobachten lassen.
Nutzen Sie diese Seite, um beim Schreiben von Abfragen Tabellen und Spalten nachzuschlagen.
Die folgenden Angaben werden direkt aus der Beispieldatei gelesen und entsprechen der Datenbank, die Sie in der App öffnen.
Spaltennamen in Festbreitenschrift sind die, die Sie tippen. Die Spalte "Hinweise" zeigt, was die Datenbank über die jeweilige Spalte weiß:
- Primärschlüssel – identifiziert die Zeile. Kommt nie doppelt vor und ist nie leer.
- Pflichtfeld – die Spalte darf nicht leer bleiben (NOT NULL). Alles ohne diese Markierung darf NULL enthalten, und darum geht es in der Lektion zum Filtern.
- → tabelle.spalte – ein Fremdschlüssel: Diese Spalte enthält einen Wert aus jener anderen Tabelle. Joins folgen genau diesen Verweisen.
- eindeutig – keine zwei Zeilen dürfen denselben Wert haben. Ein Upsert erkennt daran den Konflikt.
- indiziert – die Datenbank hält eine sortierte Kopie dieser Spalte vor, deshalb sind Filtern und Sortieren darauf schnell. Die letzte Lektion erklärt, was das heißt.
Katalog
categories 33 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
name | TEXT | Pflichtfeld, eindeutig |
description | TEXT | |
parent_id | INTEGER | → categories.id, indiziert |
sort_order | INTEGER | Pflichtfeld, Standard 0 |
is_active | INTEGER | Pflichtfeld, Standard 1 |
products 400 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
category_id | INTEGER | → categories.id, Pflichtfeld, indiziert |
name | TEXT | Pflichtfeld |
description | TEXT | |
sku | TEXT | Pflichtfeld, eindeutig |
price | REAL | Pflichtfeld, indiziert, Standard 0 |
cost | REAL | Pflichtfeld, Standard 0 |
stock_quantity | INTEGER | Pflichtfeld, Standard 0 |
weight_kg | REAL | |
attributes | TEXT | |
is_active | INTEGER | Pflichtfeld, Standard 1 |
created_at | TEXT | Pflichtfeld |
updated_at | TEXT | Pflichtfeld |
product_images 1.024 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
product_id | INTEGER | → products.id, Pflichtfeld, indiziert |
url | TEXT | Pflichtfeld |
alt_text | TEXT | |
sort_order | INTEGER | Pflichtfeld, Standard 0 |
is_primary | INTEGER | Pflichtfeld, Standard 0 |
tags 15 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
name | TEXT | Pflichtfeld, eindeutig |
product_tags 624 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
product_id | INTEGER | Primärschlüssel, → products.id |
tag_id | INTEGER | Primärschlüssel, → tags.id |
suppliers 12 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
name | TEXT | Pflichtfeld |
contact_name | TEXT | |
email | TEXT | |
phone | TEXT | |
country | TEXT | |
rating | REAL | |
is_active | INTEGER | Pflichtfeld, Standard 1 |
product_suppliers 579 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
product_id | INTEGER | Primärschlüssel, → products.id |
supplier_id | INTEGER | Primärschlüssel, → suppliers.id |
supplier_sku | TEXT | |
unit_cost | REAL | Pflichtfeld |
lead_time_days | INTEGER | Pflichtfeld, Standard 7 |
inventory_logs 11.547 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
product_id | INTEGER | → products.id, Pflichtfeld, indiziert |
change_qty | INTEGER | Pflichtfeld |
reason | TEXT | Pflichtfeld |
reference | TEXT | |
employee_id | INTEGER | → employees.id |
logged_at | TEXT | Pflichtfeld, indiziert |
Kunden
customers 1.500 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
first_name | TEXT | Pflichtfeld, indiziert |
last_name | TEXT | Pflichtfeld, indiziert |
email | TEXT | Pflichtfeld, eindeutig |
phone | TEXT | |
birth_date | TEXT | |
country | TEXT | Pflichtfeld, indiziert, Standard 'US' |
marketing_opt_in | INTEGER | Pflichtfeld, Standard 0 |
loyalty_points | INTEGER | Pflichtfeld, Standard 0 |
created_at | TEXT | Pflichtfeld |
updated_at | TEXT | Pflichtfeld |
addresses 1.959 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
customer_id | INTEGER | → customers.id, Pflichtfeld, indiziert |
label | TEXT | Pflichtfeld, Standard 'home' |
line1 | TEXT | Pflichtfeld |
line2 | TEXT | |
city | TEXT | Pflichtfeld |
postal_code | TEXT | |
country | TEXT | Pflichtfeld |
is_default | INTEGER | Pflichtfeld, Standard 0 |
wishlists 2.493 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
customer_id | INTEGER | Primärschlüssel, → customers.id |
product_id | INTEGER | Primärschlüssel, → products.id |
added_at | TEXT | Pflichtfeld |
reviews 2.992 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
product_id | INTEGER | → products.id, Pflichtfeld, eindeutig |
customer_id | INTEGER | → customers.id, Pflichtfeld, eindeutig |
rating | INTEGER | Pflichtfeld |
title | TEXT | |
body | TEXT | |
is_verified | INTEGER | Pflichtfeld, Standard 0 |
helpful_votes | INTEGER | Pflichtfeld, Standard 0 |
created_at | TEXT | Pflichtfeld |
notifications 3.000 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
customer_id | INTEGER | → customers.id, Pflichtfeld, indiziert |
type | TEXT | Pflichtfeld |
title | TEXT | Pflichtfeld |
body | TEXT | |
is_read | INTEGER | Pflichtfeld, indiziert, Standard 0 |
created_at | TEXT | Pflichtfeld |
Bestellungen
orders 4.000 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
order_number | TEXT | Pflichtfeld, eindeutig |
customer_id | INTEGER | → customers.id, Pflichtfeld, indiziert |
address_id | INTEGER | → addresses.id |
shipping_method_id | INTEGER | → shipping_methods.id |
coupon_id | INTEGER | → coupons.id |
status | TEXT | Pflichtfeld, indiziert |
subtotal | REAL | Pflichtfeld, Standard 0 |
discount | REAL | Pflichtfeld, Standard 0 |
shipping_cost | REAL | Pflichtfeld, Standard 0 |
total | REAL | Pflichtfeld, Standard 0 |
notes | TEXT | |
ordered_at | TEXT | Pflichtfeld, indiziert |
updated_at | TEXT | Pflichtfeld |
order_items 12.091 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
order_id | INTEGER | → orders.id, Pflichtfeld, eindeutig |
product_id | INTEGER | → products.id, Pflichtfeld, eindeutig |
quantity | INTEGER | Pflichtfeld |
unit_price | REAL | Pflichtfeld |
payments 3.651 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
order_id | INTEGER | → orders.id, Pflichtfeld, indiziert |
method | TEXT | Pflichtfeld |
amount | REAL | Pflichtfeld |
currency | TEXT | Pflichtfeld, Standard 'USD' |
status | TEXT | Pflichtfeld |
transaction_ref | TEXT | |
paid_at | TEXT |
shipments 2.319 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
order_id | INTEGER | → orders.id, Pflichtfeld, indiziert |
carrier | TEXT | Pflichtfeld |
tracking_number | TEXT | |
shipped_at | TEXT | |
delivered_at | TEXT |
shipping_methods 5 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
name | TEXT | Pflichtfeld, eindeutig |
base_cost | REAL | Pflichtfeld |
est_days | INTEGER | Pflichtfeld |
is_active | INTEGER | Pflichtfeld, Standard 1 |
coupons 10 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
code | TEXT | Pflichtfeld, eindeutig |
discount_type | TEXT | Pflichtfeld |
discount_value | REAL | Pflichtfeld |
min_order | REAL | Pflichtfeld, Standard 0 |
starts_at | TEXT | Pflichtfeld |
ends_at | TEXT | Pflichtfeld |
max_uses | INTEGER | |
used_count | INTEGER | Pflichtfeld, Standard 0 |
Personal
departments 10 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
name | TEXT | Pflichtfeld, eindeutig |
description | TEXT | |
created_at | TEXT | Pflichtfeld |
employees 120 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
department_id | INTEGER | → departments.id, Pflichtfeld, indiziert |
manager_id | INTEGER | → employees.id, indiziert |
first_name | TEXT | Pflichtfeld |
last_name | TEXT | Pflichtfeld |
email | TEXT | Pflichtfeld, eindeutig |
phone | TEXT | |
hire_date | TEXT | Pflichtfeld |
salary | REAL | Pflichtfeld, Standard 0 |
position | TEXT | |
is_active | INTEGER | Pflichtfeld, Standard 1 |
audit_logs 2.000 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | Primärschlüssel |
employee_id | INTEGER | → employees.id |
action | TEXT | Pflichtfeld |
table_name | TEXT | Pflichtfeld, indiziert |
record_id | INTEGER | indiziert |
old_values | TEXT | |
new_values | TEXT | |
ip_address | TEXT | |
created_at | TEXT | Pflichtfeld |
Einstellungen
settings 8 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
key | TEXT | Primärschlüssel |
value | TEXT | Pflichtfeld |
description | TEXT | |
updated_at | TEXT | Pflichtfeld |
Sichten
Eine Sicht ist eine gespeicherte Abfrage, die sich wie eine Tabelle verhält: Sie können sie mit SELECT lesen, aber eigene Zeilen liegen nirgends gespeichert. Diese vier fassen die Tabellen oben zusammen.
v_customer_lifetime 1.500 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
customer_id | INTEGER | |
customer | TEXT | |
country | TEXT | |
orders | TEXT | |
revenue | TEXT | |
first_order | TEXT | |
last_order | TEXT |
v_low_stock 44 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
id | INTEGER | |
sku | TEXT | |
name | TEXT | |
stock_quantity | INTEGER | |
category | TEXT |
v_order_summary 4.000 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
order_id | INTEGER | |
order_number | TEXT | |
status | TEXT | |
ordered_at | TEXT | |
customer | TEXT | |
country | TEXT | |
items | TEXT | |
total | REAL |
v_product_sales 400 Zeilen
| Spalte | Typ | Hinweise |
|---|---|---|
product_id | INTEGER | |
name | TEXT | |
sku | TEXT | |
category | TEXT | |
units_sold | TEXT | |
revenue | TEXT | |
avg_rating | TEXT | |
review_count | TEXT |