Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
java_dzienna_15_09
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
java_dzienna_15_09
Commits
398cd873
Commit
398cd873
authored
Sep 29, 2022
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rozszerzona wersja skryptów SQL
parent
9f432933
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
159 additions
and
24 deletions
+159
-24
create.sql
PC26-SklepWeb/sql/create.sql
+46
-20
create_wersja_uproszczona.sql
PC26-SklepWeb/sql/create_wersja_uproszczona.sql
+45
-0
drop.sql
PC26-SklepWeb/sql/drop.sql
+4
-0
insert.sql
PC26-SklepWeb/sql/insert.sql
+64
-4
No files found.
PC26-SklepWeb/sql/create.sql
View file @
398cd873
-- numery 1-10 zostawiam na przykładowe produkty, a dopiero od 11 będzie automatyczna numeracja
CREATE
SEQUENCE
products_seq
START
11
;
CREATE
TABLE
products
(
CREATE
TABLE
products
(
product_id
SERIAL
PRIMARY
KEY
,
product_id
INTEGER
DEFAULT
nextval
(
'products_seq'
)
,
product_name
VARCHAR
(
100
)
NOT
NULL
,
-- tekst o dł maksymalnie 100 znaków
product_name
VARCHAR
(
100
)
NOT
NULL
,
-- tekst o dł maksymalnie 100 znaków
price
NUMERIC
(
10
,
2
)
NOT
NULL
,
-- max 10 cyfr, z czego 2 to cyfry po przecinku
price
NUMERIC
(
10
,
2
)
NOT
NULL
,
-- max 10 cyfr, z czego 2 to cyfry po przecinku
vat
NUMERIC
(
2
,
2
),
-- wartości do 0.99
vat
NUMERIC
(
2
,
2
),
-- wartości do 0.99
description
TEXT
-- w PostgreSQL TEXT, a w Oracle CLOB to są "duże fragmenty tekstu"
description
TEXT
,
-- w PostgreSQL TEXT, a w Oracle CLOB to są "duże fragmenty tekstu"
PRIMARY
KEY
(
product_id
),
CHECK
(
price
>
0
),
CHECK
(
vat
>=
0
)
);
);
-- W celach dydaktycznych: kluczem nie musi być liczba, może być tekst
-- W celach dydaktycznych: kluczem nie musi być liczba, może być tekst
CREATE
TABLE
customers
(
CREATE
TABLE
customers
(
customer_email
VARCHAR
(
100
)
PRIMARY
KEY
,
customer_email
VARCHAR
(
100
),
customer_name
VARCHAR
(
100
)
NOT
NULL
,
customer_name
VARCHAR
(
100
)
NOT
NULL
,
phone_number
VARCHAR
(
20
),
phone_number
VARCHAR
(
20
),
address
VARCHAR
(
200
),
address
VARCHAR
(
200
),
postal_code
CHAR
(
6
),
postal_code
CHAR
(
6
),
city
VARCHAR
(
100
)
city
VARCHAR
(
100
),
PRIMARY
KEY
(
customer_email
)
);
);
CREATE
TYPE
order_status
AS
ENUM
(
'NEW'
,
'CONFIRMED'
,
'SHIPPED'
,
'CLOSED'
,
'RETURNED'
);
CREATE
SEQUENCE
orders_seq
START
101
;
-- REFERENCES oznacza "klucz obcy", za pomocą tej wartości wskazujemy klienta, który złożył zamówienie
-- REFERENCES oznacza "klucz obcy", za pomocą tej wartości wskazujemy klienta, który złożył zamówienie
-- technicznie: do pola orders.customer_email można wpisać tylko taką wartość, która wystepuje gdzieś w customers.customer_email
-- technicznie: do pola orders.customer_email można wpisać tylko taką wartość, która wystepuje gdzieś w customers.customer_email
CREATE
TABLE
orders
(
CREATE
TABLE
orders
(
order_id
SERIAL
PRIMARY
KEY
,
order_id
INTEGER
DEFAULT
nextval
(
'orders_seq'
),
customer_email
VARCHAR
(
100
)
NOT
NULL
REFERENCES
customers
(
customer_email
),
customer_email
VARCHAR
(
100
)
NOT
NULL
,
status
VARCHAR
(
10
)
NOT
NULL
,
status
order_status
DEFAULT
'NEW'
NOT
NULL
,
order_date
TIMESTAMP
NOT
NULL
,
order_date
TIMESTAMP
DEFAULT
current_timestamp
NOT
NULL
,
delivery_date
DATE
delivery_date
DATE
,
PRIMARY
KEY
(
order_id
),
FOREIGN
KEY
(
customer_email
)
REFERENCES
customers
(
customer_email
)
);
);
-- Tabela łączy zamówienia z produktami.
/* Tabela łączy zamówienia z produktami..
-- Jeśli w tej tabeli istnieje wpis z order_id=X i product_id=Y,
W jednym zamówieniu mogą być różne produkty.
-- to znaczy, że w zamówieniu X wystepuje produkt Y
Ten sam produkt może występować w różnych zamówieniach.
-- Dodatkowo zaposujemy informację o liczbie sztuk i cenie, po której towar był kupowany.
To jest związaek "wiele do wielu".
-- W tej tabeli mamy też dwukolumnowy klucz główny - unikalna jest para order_id×product_id
Jeśli w tej tabeli istnieje wpis z order_id=X i product_id=Y,
to znaczy, że w zamówieniu X występuje produkt Y
Dodatkowo zaposujemy informację o liczbie sztuk i cenie, po której towar był kupowany.
W tej tabeli mamy też dwukolumnowy klucz główny, bo kombinacja order_id×product_id
musi być unikalna.
*/
CREATE
TABLE
order_products
(
CREATE
TABLE
order_products
(
order_id
INTEGER
NOT
NULL
REFERENCES
orders
(
order_id
),
order_id
INTEGER
NOT
NULL
,
product_id
INTEGER
NOT
NULL
REFERENCES
products
(
product_id
),
product_id
INTEGER
NOT
NULL
,
quantity
SMALLINT
NOT
NULL
,
quantity
SMALLINT
DEFAULT
1
NOT
NULL
,
actual_price
NUMERIC
(
10
,
2
)
NOT
NULL
,
actual_price
NUMERIC
(
10
,
2
)
NOT
NULL
,
PRIMARY
KEY
(
order_id
,
product_id
)
PRIMARY
KEY
(
order_id
,
product_id
),
FOREIGN
KEY
(
order_id
)
REFERENCES
orders
(
order_id
),
FOREIGN
KEY
(
product_id
)
REFERENCES
products
(
product_id
),
CHECK
(
quantity
>
0
)
);
);
PC26-SklepWeb/sql/create_wersja_uproszczona.sql
0 → 100644
View file @
398cd873
CREATE
TABLE
products
(
product_id
SERIAL
PRIMARY
KEY
,
product_name
VARCHAR
(
100
)
NOT
NULL
,
-- tekst o dł maksymalnie 100 znaków
price
NUMERIC
(
10
,
2
)
NOT
NULL
,
-- max 10 cyfr, z czego 2 to cyfry po przecinku
vat
NUMERIC
(
2
,
2
),
-- wartości do 0.99
description
TEXT
-- w PostgreSQL TEXT, a w Oracle CLOB to są "duże fragmenty tekstu"
);
-- W celach dydaktycznych: kluczem nie musi być liczba, może być tekst
CREATE
TABLE
customers
(
customer_email
VARCHAR
(
100
)
PRIMARY
KEY
,
customer_name
VARCHAR
(
100
)
NOT
NULL
,
phone_number
VARCHAR
(
20
),
address
VARCHAR
(
200
),
postal_code
CHAR
(
6
),
city
VARCHAR
(
100
)
);
-- REFERENCES oznacza "klucz obcy", za pomocą tej wartości wskazujemy klienta, który złożył zamówienie
-- technicznie: do pola orders.customer_email można wpisać tylko taką wartość, która wystepuje gdzieś w customers.customer_email
CREATE
TABLE
orders
(
order_id
SERIAL
PRIMARY
KEY
,
customer_email
VARCHAR
(
100
)
NOT
NULL
REFERENCES
customers
(
customer_email
),
status
VARCHAR
(
10
)
NOT
NULL
,
order_date
TIMESTAMP
NOT
NULL
,
delivery_date
DATE
);
-- Tabela łączy zamówienia z produktami.
-- Jeśli w tej tabeli istnieje wpis z order_id=X i product_id=Y,
-- to znaczy, że w zamówieniu X wystepuje produkt Y
-- Dodatkowo zaposujemy informację o liczbie sztuk i cenie, po której towar był kupowany.
-- W tej tabeli mamy też dwukolumnowy klucz główny - unikalna jest para order_id×product_id
CREATE
TABLE
order_products
(
order_id
INTEGER
NOT
NULL
REFERENCES
orders
(
order_id
),
product_id
INTEGER
NOT
NULL
REFERENCES
products
(
product_id
),
quantity
SMALLINT
NOT
NULL
,
actual_price
NUMERIC
(
10
,
2
)
NOT
NULL
,
PRIMARY
KEY
(
order_id
,
product_id
)
);
PC26-SklepWeb/sql/drop.sql
View file @
398cd873
...
@@ -2,3 +2,7 @@ DROP TABLE order_products;
...
@@ -2,3 +2,7 @@ DROP TABLE order_products;
DROP
TABLE
orders
;
DROP
TABLE
orders
;
DROP
TABLE
customers
;
DROP
TABLE
customers
;
DROP
TABLE
products
;
DROP
TABLE
products
;
DROP
SEQUENCE
orders_seq
;
DROP
SEQUENCE
products_seq
;
DROP
TYPE
order_status
;
PC26-SklepWeb/sql/insert.sql
View file @
398cd873
INSERT
INTO
products
(
product_name
,
price
,
vat
,
description
)
INSERT
INTO
products
(
product_
id
,
product_
name
,
price
,
vat
,
description
)
VALUES
(
'pralka'
,
2300
,
0
.
23
,
'Pralka oszczędna i szybka.
'
);
VALUES
(
1
,
'pralka'
,
2900
.
00
,
0
.
23
,
'Pralka szybkoobrotowa
'
);
INSERT
INTO
products
(
product_
name
,
price
,
vat
)
INSERT
INTO
products
(
product_
id
,
product_name
,
price
,
vat
,
description
)
VALUES
(
'odkurzacz'
,
333
.
33
,
0
.
23
);
VALUES
(
2
,
'odkurzacz'
,
800
.
00
,
0
.
23
,
'Odkurzacz automatyczny'
);
INSERT
INTO
products
(
product_id
,
product_name
,
price
,
vat
,
description
)
VALUES
(
3
,
'telewizor 55"'
,
3300
.
00
,
0
.
23
,
'Telewizor 55 cali 4K'
);
INSERT
INTO
products
(
product_id
,
product_name
,
price
,
vat
,
description
)
VALUES
(
4
,
'telewizor 40"'
,
2200
.
00
,
0
.
23
,
'Telewizor 40 Full HD'
);
INSERT
INTO
products
(
product_id
,
product_name
,
price
,
vat
)
VALUES
(
5
,
'myszka gejmerska'
,
444
.
00
,
0
.
23
);
INSERT
INTO
products
(
product_id
,
product_name
,
price
,
vat
)
VALUES
(
6
,
'myszka zwykła'
,
50
,
0
.
23
);
INSERT
INTO
products
(
product_id
,
product_name
,
price
,
vat
)
VALUES
(
7
,
'ubezpieczenie'
,
100
.
00
,
NULL
);
INSERT
INTO
products
(
product_id
,
product_name
,
price
,
vat
)
VALUES
(
8
,
'usługa montażu'
,
1200
,
0
.
08
);
INSERT
INTO
customers
(
customer_email
,
phone_number
,
customer_name
,
address
,
postal_code
,
city
)
VALUES
(
'ala@example.com'
,
'123123123'
,
'Ala Kowalska'
,
'Jasna 14/16'
,
'01-234'
,
'Warszawa'
);
INSERT
INTO
customers
(
customer_email
,
phone_number
,
customer_name
,
address
,
postal_code
,
city
)
VALUES
(
'ola@example.com'
,
'321321321'
,
'Ola Malinowska'
,
'Ciemna 133'
,
'99-999'
,
'Pcim'
);
INSERT
INTO
orders
(
order_id
,
customer_email
,
order_date
,
status
)
VALUES
(
1
,
'ala@example.com'
,
'2022-06-20 12:30:00'
,
'CONFIRMED'
);
INSERT
INTO
orders
(
order_id
,
customer_email
,
order_date
,
status
)
VALUES
(
2
,
'ola@example.com'
,
'2022-06-18 10:00:00'
,
'SHIPPED'
);
INSERT
INTO
orders
(
order_id
,
customer_email
)
VALUES
(
3
,
'ala@example.com'
);
INSERT
INTO
order_products
(
order_id
,
product_id
,
quantity
,
actual_price
)
VALUES
(
1
,
1
,
1
,
2900
.
00
);
INSERT
INTO
order_products
(
order_id
,
product_id
,
quantity
,
actual_price
)
VALUES
(
1
,
2
,
3
,
2400
.
00
);
INSERT
INTO
order_products
(
order_id
,
product_id
,
quantity
,
actual_price
)
VALUES
(
2
,
2
,
1
,
800
.
00
);
INSERT
INTO
order_products
(
order_id
,
product_id
,
quantity
,
actual_price
)
VALUES
(
3
,
4
,
1
,
2200
.
00
);
INSERT
INTO
order_products
(
order_id
,
product_id
,
quantity
,
actual_price
)
VALUES
(
3
,
3
,
1
,
300
.
00
);
INSERT
INTO
order_products
(
order_id
,
product_id
,
quantity
,
actual_price
)
VALUES
(
3
,
5
,
1
,
1000
.
00
);
/*
SELECT * FROM products ORDER BY product_id;
SELECT * FROM customers
LEFT JOIN orders USING(customer_email)
LEFT JOIN order_products USING(order_id)
LEFT JOIN products USING(product_id)
ORDER BY customer_email, order_id, product_id;
*/
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment