Professional Documents
Culture Documents
Ergasia GE3 2013 2014 Sol ORACLE
Ergasia GE3 2013 2014 Sol ORACLE
Ergasia GE3 2013 2014 Sol ORACLE
11 (2013-2014) - (3)
1 [10]
..
( ):
/* {} */
CREATE TABLE ""
("" INTEGER NOT NULL,
"" VARCHAR(60) NOT NULL,
"" VARCHAR(100) NOT NULL,
"" VARCHAR(15) NOT NULL,
EMAIL VARCHAR(50),
UNIQUE (EMAIL),
PRIMARY KEY(""));
/* {_} */
CREATE TABLE "_"
("" VARCHAR(10) NOT NULL,
"" VARCHAR(80) NOT NULL,
UNIQUE(""),
PRIMARY KEY (""));
/* {} */
CREATE TABLE ""
("" VARCHAR(10) NOT NULL,
"" VARCHAR(6) NOT NULL,
"" VARCHAR(30) NOT NULL,
"" VARCHAR(30) NOT NULL,
PRIMARY KEY (""));
/* {} */
CREATE TABLE ""
("" INTEGER NOT NULL,
"" DATE NOT NULL,
"" NUMBER(7,2) NOT NULL,
"" INTEGER NOT NULL,
"" VARCHAR(10) NOT NULL,
FOREIGN KEY ("") REFERENCES "" (""),
FOREIGN KEY ("") REFERENCES "_" (""),
PRIMARY KEY (""));
/* {} */
CREATE TABLE ""
("" VARCHAR(10) NOT NULL,
"" NUMBER(7,2) NOT NULL,
/* {} */
CREATE TABLE ""
("" VARCHAR(10) NOT NULL,
"" DATE NOT NULL,
"" INTEGER NOT NULL,
FOREIGN KEY ("") REFERENCES "" (""),
PRIMARY KEY ("", ""));
/* {} */
CREATE TABLE ""
("" VARCHAR(10) NOT NULL,
"" NUMBER(7,2) NOT NULL,
FOREIGN KEY ("") REFERENCES "" (""),
PRIMARY KEY (""));
/* {} */
CREATE TABLE ""
("" VARCHAR(10) NOT NULL,
"" INTEGER NOT NULL,
"" INTEGER NOT NULL,
FOREIGN KEY ("") REFERENCES "" (""),
PRIMARY KEY (""));
/* {} */
INSERT INTO "" VALUES (11, ' ', ' 3 ', '2103434454', 'gnik@gmail.com');
INSERT INTO "" VALUES (22, ' ', ' 5 ', '2651038674', 'npetrop@yahoo.gr');
INSERT INTO "" VALUES (44, ' ..', ' 243 ', '2103376002', null);
INSERT INTO "" VALUES (55, ' ', '. 5 ', '6978989898', 'vanast@otenet.gr');
INSERT INTO "" VALUES (66, ' ', '. 4 ','2132323455', 'avar@hotmail.com');
INSERT INTO "" VALUES (77, ' ', ' 12 ','2310343456', 'sgran@hol.gr');
INSERT INTO "" VALUES (88, ' ', ' 25 ', '2310456456', 'ahan@gmail.com');
INSERT INTO "" VALUES (99, ' ', '. 38 ', '2385039393', 'vpred@forthnet.gr');
INSERT INTO "" VALUES (111, ' ', '. 39 ', '2310202020', 'thtsen@hotmail.com');
INSERT INTO "" VALUES (222, ' ', '. 134 ','2101234563', 'thprit@yahoo.gr');
INSERT INTO "" VALUES (333, ' ', '. 98 ', '2810939393', 'nkaram@hol.gr');
INSERT INTO "" VALUES (444, ' ', ' 74 ', '2610343456', 'mnikol@otenet.gr');
INSERT INTO "" VALUES (555, ' ', ' 29 ', '2103030303', 'fdren@gmail.com');
INSERT INTO "" VALUES (777, ' ', ' 3 ', '2310304677', 'kpap@yahoo.gr');
INSERT INTO "" VALUES (5555, ' ', ' 121 ', '2610313131', null);
INSERT INTO "" VALUES (6666, ' ', ' 21 ', '2104334498', null);
INSERT INTO "" VALUES (8888, ' ', ' 230 ', '2105555555', null);
INSERT INTO "" VALUES (9999, ' ', ' 103 ', '2106021633', null);
INSERT INTO "" VALUES (1010, ' ', '. 39 ', '2331030300', null);
INSERT INTO "" VALUES (77777, ' ', ' 58 ', '2310228290', null);
INSERT INTO "" VALUES (444444, ' ', '. 80 ', '2510393939', null);
INSERT INTO "" VALUES (222222, ' ', '. 120 ', '2551020202', null);
INSERT INTO "" VALUES (3333, ' ', '. 2 ', '2810999999', null);
/* {_} */
/* {} */
/* {} */
INSERT INTO "" VALUES (1, TO_DATE('11/10/2012 14:00','DD/MM/YYYY HH24:MI'), 132.50, 11, '001');
INSERT INTO "" VALUES (2, TO_DATE('11/10/2012 14:20', 'DD/MM/YYYY HH24:MI'), 44, 22, '002');
INSERT INTO "" VALUES (3, TO_DATE('11/10/2012 14:30','DD/MM/YYYY HH24:MI'), 60, 44, '003');
INSERT INTO "" VALUES (4, TO_DATE('12/10/2012 08:00','DD/MM/YYYY HH24:MI'), 100, 44, '002');
INSERT INTO "" VALUES (5, TO_DATE('12/10/2012 02:00','DD/MM/YYYY HH24:MI'), 12, 55, '002');
INSERT INTO "" VALUES (6, TO_DATE('13/10/2012 22:00','DD/MM/YYYY HH24:MI'), 45, 66, '002');
INSERT INTO "" VALUES (7, TO_DATE('14/10/2012 14:00','DD/MM/YYYY HH24:MI'), 200, 77, '002');
INSERT INTO "" VALUES (8, TO_DATE('15/10/2012 14:00','DD/MM/YYYY HH24:MI'), 45, 333, '003');
INSERT INTO "" VALUES (9, TO_DATE('16/10/2012 14:05','DD/MM/YYYY HH24:MI'), 12, 99, '004');
INSERT INTO "" VALUES (10, TO_DATE('17/10/2012 01:06','DD/MM/YYYY HH24:MI'), 12, 111, '002');
INSERT INTO "" VALUES (11, TO_DATE('17/10/2012 14:05','DD/MM/YYYY HH24:MI'), 45, 22, '001');
INSERT INTO "" VALUES (12, TO_DATE('17/10/2012 14:00','DD/MM/YYYY HH24:MI'), 45, 333, '002');
INSERT INTO "" VALUES (13, TO_DATE('17/10/2012 11:05','DD/MM/YYYY HH24:MI'), 200, 44, '003');
INSERT INTO "" VALUES (14, TO_DATE('18/10/2012 11:00','DD/MM/YYYY HH24:MI'), 45, 555, '004');
/* {} */
INSERT INTO "" VALUES ('001', 0.5, ' 15:00', 1, 111, TO_DATE('12/10/2012','DD/MM/YYYY'), 'G397');
INSERT INTO "" VALUES ('002', 5, '', 1, 3333, null, null);
INSERT INTO "" VALUES ('003', 1, '', 2, 6666, null, null);
INSERT INTO "" VALUES ('004', 0.1, ' 15:00', 3, 77777, null, null);
INSERT INTO "" VALUES ('005', 6, '', 3, 444444,null, null);
INSERT INTO "" VALUES ('006', 2, null, 4, 111, TO_DATE('12/10/2012','DD/MM/YYYY'), 'G397');
INSERT INTO "" VALUES ('007', 6, null, 4, 111, TO_DATE('13/10/2012','DD/MM/YYYY'), 'G31012');
INSERT INTO "" VALUES ('008', 0.1, null, 5, 111, TO_DATE('12/10/2012','DD/MM/YYYY'), 'G397');
INSERT INTO "" VALUES ('009', 1, null, 6, 9999, TO_DATE('14/10/2012','DD/MM/YYYY'), 'G391');
INSERT INTO "" VALUES ('010', 10, '', 7, 8888 , null, null);
INSERT INTO "" VALUES ('011', 10, '', 7, 9999, null, null);
INSERT INTO "" VALUES ('012', 0.1, null, 8, 6666, TO_DATE('16/10/2012','DD/MM/YYYY'), 'G396');
INSERT INTO "" VALUES ('013', 0.1, null, 8, 6666, TO_DATE('16/10/2012','DD/MM/YYYY'), 'G396');
INSERT INTO "" VALUES ('014', 0.1, null, 8, 6666, TO_DATE('16/10/2012','DD/MM/YYYY'), 'G396');
INSERT INTO "" VALUES ('015', 0.1, null, 8, 6666, TO_DATE('16/10/2012','DD/MM/YYYY'), 'G396');
INSERT INTO "" VALUES ('016', 0.1, null, 9, 222222, TO_DATE('17/10/2012','DD/MM/YYYY'), 'F3301');
/* {} */
/* {} */
/* {} */
2 [45] SQL
I. ( )
3
0.2m .
0.2
.
, , , where,
inner joins ( ).
1_V1.
SELECT DISTINCT "".""
FROM "" INNER JOIN "" ON
("".""=""."")
INNER JOIN "" ON ("".""=""."")
INNER JOIN "" ON ("".""=""."")
WHERE ""."" > 0.2;
1_V2.
SELECT DISTINCT "".""
FROM "", "", "", ""
WHERE "".""="".""
AND "".""="".""
AND "".""="".""
AND ""."" > 0.2;
..
II. ( ) e-mail,
Internet.
Internet
( ). ,
Internet ,
e-mail, NULL.
, where, inner joins.
2_V1.
SELECT DISTINCT ""."", "".""
FROM ""
INNER JOIN ""
ON ("".""=""."")
INNER JOIN "_"
ON ("_".""=""."")
WHERE ""."EMAIL" IS NULL AND "_".""='Internet';
44 ..
III. 50 15
2012.
( COUNT)
( DISTINCT)
. 01/10/2012 15/10/2012
( 15 ),
50 .
TO_DATE(),
>= <= BETWEEN (
). :
( ).
.
3_V1.
SELECT COUNT(DISTINCT ""."") AS " "
FROM "", ""
WHERE "".""="".""
AND ""."" BETWEEN TO_DATE ('01/10/2012', 'dd/mm/yyyy')
AND TO_DATE ('15/10/2012', 'dd/mm/yyyy')
AND ""."" > 50;
3_V2.
SELECT COUNT(DISTINCT ""."") AS " "
FROM "", ""
WHERE "".""="".""
AND ""."" >= TO_DATE ('01/10/2012', 'dd/mm/yyyy')
AND ""."" <= TO_DATE ('15/10/2012', 'dd/mm/yyyy')
AND ""."" > 50;
IV. .
( ,
).
( )
.
LIKE. ,
COUNT().
where inner join.
4_V1.
SELECT COUNT(""."") AS "_"
FROM ""
INNER JOIN ""
ON ("".""=""."")
WHERE ""."" LIKE '%';
4_V2.
SELECT COUNT(""."") AS "_"
FROM "", ""
WHERE "".""="".""
AND ""."" LIKE '%';
_
6
V. .
,
.
( ) ,
AVG(). ,
( IN) (join)
.
5_V1.
SELECT AVG(""."") AS " "
FROM ""
WHERE ""."" IN
(SELECT ""."" FROM "");
5_V2.
SELECT AVG(""."") AS " "
FROM "", ""
WHERE "".""=""."";
11.6
VI. ()
() ().
SUM().
(
) , .
(.. LIKE) .
: ()
.
where,
inner join. : DISTINCT
( ).
6_V2.
SELECT SUM(""."") AS "H "
FROM ""
WHERE ""."" IN
(SELECT DISTINCT "".""
FROM "", ""
WHERE "".""="".""
AND ("".""=''
OR "".""=''));
H
436.5
VII. 8
(: SQL).
SQL
8
UNION
8 .
(UNION) (join) . :
UNION (
). II.
7_V1
SELECT ' ' AS "_8",
COUNT(""."") AS "_"
FROM "" INNER JOIN "" ON
"".""="".""
INNER JOIN "" ON "".""="".""
WHERE "".""=8
UNION
SELECT ' ' AS "_8",
COUNT(""."") AS "_"
FROM "" INNER JOIN "" ON
"".""="".""
INNER JOIN "" ON "".""="".""
WHERE "".""=8;
_ 8 _
0
4
(
),
SELECT (
) ( ).
. : DISTINCT
( ).
8_V1.
SELECT "", "" FROM ""
WHERE "" IN (SELECT DISTINCT "" FROM "")
AND "" IN (SELECT DISTINCT "" FROM "");
8_V2.
SELECT DISTINCT ""."", ""
FROM "" INNER JOIN ""
ON "".""="".""
INTERSECT
SELECT DISTINCT ""."", ""
FROM "" INNER JOIN ""
ON "".""=""."";
55
111
IX. ( )
( ) .
,
.
(WHERE .=1)
.
: .
II. DISTINCT
(
). () .
9_V1.
SELECT DISTINCT "".""
FROM "" INNER JOIN ""
ON "".""="".""
INNER JOIN "" ON "".""="".""
WHERE "".""=1 AND ""."" IN
(SELECT DISTINCT ""
FROM ""
WHERE "" NOT IN
(SELECT ""
FROM ""
WHERE ""=1));
14
8
X.
( ) .
("
")
( ) "
" ( "
").
() (, ,
), () (
/ / ) ()
, MAX() ALL (
). .
10_V1.
SELECT ""."", ROUND (("".""-
"".""), 3) AS " "
FROM "" INNER JOIN ""
ON "".""="".""
INNER JOIN "" ON "".""="".""
WHERE "".""=1
AND "".""-""."" =
(SELECT MAX("".""-""."")
FROM "" INNER JOIN ""
ON "".""="".""
INNER JOIN "" ON "".""="".""
WHERE "".""=1);
10_V2
SELECT ""."", ROUND (("".""-
"".""), 3) AS " "
FROM "" INNER JOIN ""
ON "".""="".""
INNER JOIN "" ON "".""="".""
WHERE "".""=1
AND "".""-""."" >= ALL
(SELECT "".""-"".""
FROM "" INNER JOIN ""
ON "".""="".""
INNER JOIN "" ON "".""="".""
WHERE "".""=1);
4 3.333
1: (
)
,
2: ,
, ( -
.. / SYSDATE)
(
=1 -:
).
XI. ( )
( ).
,
.
( )
GROUP BY ( )
COUNT. (
) _. (
.. . . ) ,
.
11_V1.
SELECT "", COUNT("") AS "_"
FROM ""
GROUP BY ""
11_V2.
SELECT "_"."", COUNT("") AS "_"
FROM "", "_"
WHERE "".""="_".""
GROUP BY "_".""
: (
( )
(_ = 0) .
(. ,
),
(right outer join ) :
XII. ( ), ,
() .
, .
2 . SUM()
GROUP BY .
GROUP BY HAVING WHERE.
12_V1.
SELECT ""."" AS "",
SUM(""."") AS ""
FROM ""
INNER JOIN ""
ON ("".""=""."")
GROUP BY "".""
HAVING COUNT("".) > 1;
12_V2.
SELECT ""."" AS "",
SUM(""."") AS ""
FROM "", ""
WHERE "".""="".""
GROUP BY "".""
HAVING COUNT(""."") > 1;
89
.. 360
90
(COUNT()) ,
MAX() ( ALL)
.
( ), .
, ALL
(MAX(COUNT())
Oracle. : .
II.
13_V1.
SELECT ""."", COUNT(""."") AS "_"
FROM "" INNER JOIN ""
ON "".""="".""
GROUP BY "".""
HAVING COUNT(""."") =
(SELECT MAX(COUNT("".""))
FROM "" INNER JOIN ""
ON "".""="".""
GROUP BY ""."");
13_V2.
SELECT ""."", COUNT(""."") AS "_"
FROM "" INNER JOIN ""
ON "".""="".""
GROUP BY "".""
HAVING COUNT(""."") >= ALL
(SELECT COUNT(""."")
FROM "" INNER JOIN ""
ON "".""="".""
GROUP BY ""."");
_
14 4
8 4
XIV. ( , , ) ,
/ .
.
,
GROUP BY COUNT().
,
where clause ( ). ,
(
0), (left outer join
) (inner join). ,
(inner join),
UNION ( ).
_
G392 0
L456 0
F3201 1
C701 0
G3777 0
G397 4
G395 0
G390 0
G3101 0
G31012 1
C702 0
XV. ( , )
( ). [
].
( )
( GROUP BY)
( ). (group by)
. , ALL
(MAX(COUNT()).
15_V1.
SELECT ""."", ""."", COUNT(*)
FROM ""
GROUP BY ""."", "".""
HAVING COUNT(*) >= ALL (SELECT COUNT(*) FROM ""
GROUP BY ""."", ""."");
15_V2.
SELECT ""."", ""."", COUNT(*)
FROM ""
GROUP BY ""."", "".""
HAVING COUNT(*) = (SELECT MAX(COUNT(*)) FROM ""
GROUP BY ""."", ""."");
C OU N T(*)
4
4
C OU N T(*)
5
3 [15]
I.
< , , >
.
. [3]
_
997.5
( ROUND
):
SQL :
_ _
002 Internet 45.91
003 SMS 30.58
001 17.79
004 5.71
: (
)
.
(. ,
),
(left outer join ), :
_ _
002 Internet 45.91
003 SMS 30.58
001 17.79
004 5.71
005 0
II. < , ,
> .
. [4]
[ -
-
.]
_
555 3
11 1
44 4
77 2
_
22 2
555 1
SQL :
_ _
11 1 1
22 2 -
44 1 4
55 1 -
66 1 -
77 - 2
99 1 -
111 1 -
333 5 -
555 1 3
,
(77) :
_ _
555 1 3
11 1 1
44 1 4
111 1 -
99 1 -
22 2 -
55 1 -
, INNER JOIN ()
. :
,
:
_ _
555 1 3
11 1 1
44 1 4
III.
5 1 dm3 ( )
2 1 cm2 ( ),
< , >
()
.
. m3
. . cm. [4]
[ -
- .]
(1 m3 = 1000 dm3):
_ _
38
_ _
49
SQL :
_ _ _ _
38 49
IV. SQL
, SQL
, (
) . [4]
5 12
10 12
6 45
8 45
13 200
1 132.5
SQL
:
SQL :
.
606.5
SQL :
SU M(" ")
693.5
SQL :
87
693.5 87 = 606.5,
.
4 [30]
I.
. [3]
UPDATE [SET
"" = ("" * 1000)].
( ).
[IN (SELECT)] WHERE clause.
UPDATE ""
SET "" = ("" * 1000)
WHERE "" IN (SELECT "" FROM "");
O I, II II
, .
II.
( ) . [3]
UPDATE [SET
"" = ] [= (select]
( )
.
1 RDBMS DATE.
UPDATE ""
SET "" =
(SELECT "" + 1 FROM ""
WHERE ""."" = ""."")
WHERE "" IS NULL;
O I, II II
, .
III. (
)
.
( ) (
).
( , ). [:
||]. [4]
/ (
) ( ) (
), <"" LIKE '%' || "">
<"" LIKE '%' || "">.
( )
,
. "" LIKE '%'". ||
(concatenation) ( ).
UPDATE ""
SET "" =
(SELECT MAX("")
FROM "", "", "" "", "" ""
WHERE ""."" = "".""
AND ""."" = "".""
AND ""."" = "".""
AND ""."" LIKE '%' || ""
AND ""."" LIKE '%' || "")
WHERE "" IS NULL;
( ||) CONCAT() (.
http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions026.htm).
|| ( CONCAT())
.
, :
001 500 15:00 1 111 12-OCT-12 G397
002 5 1 3333 12-OCT-12 G395
003 1000 2 6666 12-OCT-12 C700
004 100 15:00 3 77777 12-OCT-12 G397
005 6 3 444444 12-OCT-12 G31012
006 2 - 4 111 12-OCT-12 G397
007 6 - 4 111 13-OCT-12 G31012
008 100 - 5 111 12-OCT-12 G397
009 1000 - 6 9999 14-OCT-12 G391
010 10 7 8888 15-OCT-12 G398
011 10 7 9999 15-OCT-12 G398
012 100 - 8 6666 16-OCT-12 G396
013 100 - 8 6666 16-OCT-12 G396
014 100 - 8 6666 16-OCT-12 G396
015 100 - 8 6666 16-OCT-12 G396
016 100 - 9 222222 17-OCT-12 F3301
017 100 - 10 55 18-OCT-12 G398
018 1000 - 11 77777 18-OCT-12 C698
019 1000 - 12 8888 18-OCT-12 G396
020 20 - 13 77777 17-OCT-12 G397
021 40 - 14 222222 18-OCT-12 F3201
022 8 - 14 222222 19-OCT-12 L456
023 9 - 14 222222 19-OCT-12 L456
024 200 - 14 222222 19-OCT-12 L456
1
.
IV.
( ).
-
-
. , ( INSERT)
. [4]
() CREATE
K
.
insert (INSERT INTO SELECT ), SELECT statement
(..
).
: (
)
( ),
.
55 1
111 4
3333 1
6666 5
8888 2
9999 2
77777 3
222222 5
444444 1
V.
. [3]
(
),
DELETE
: DISTINCT .
.
EM AIL
222 . 134 2101234563 thprit@yahoo.gr
88 25 2310456456 ahan@gmail.com
777 3 2610304677 kpap@yahoo.gr
1010 . 39 2331030300 -
VI. ,
. [3]
()
1 (
), () DELETE
0 (
)
( ).
003 11-OCT-12 0
006 14-OCT-12 0
006 12-OCT-12 0
, . ,
UPDATE [UPDATE "" SET "" = '' ''],
EXISTS / NOT EXISTS (
1 ). ,
(
) .
UPDATE ""
SET "" = ''
WHERE NOT EXISTS
(SELECT * FROM ""
WHERE "".""="".""
AND "" NOT IN (SELECT "" FROM ""
WHERE "" = 1));
UPDATE ""
SET "" = ''
WHERE EXISTS
(SELECT * FROM ""
WHERE "".""="".""
AND "" NOT IN (SELECT "" FROM ""
WHERE "" = 1));
: ,
DEFAULT '' ( ALTER)
( ).
EXISTS / NOT EXISTS (
).
UPDATE ""
SET "" =
(SELECT COUNT("") FROM ""
WHERE "".""="".""
AND "" NOT IN (SELECT "" FROM ""
WHERE "" = 1));
2 11-OCT-12 44 22 002 0
3 11-OCT-12 60 44 003 0
5 12-OCT-12 12 55 002 0
6 13-OCT-12 45 66 002 0
9 16-OCT-12 12 99 004 0
VIII.
(
,
) .
. [5]
(.. )
( )
().
ALTER.
, UPDATE
WHERE clause.
( ALTER)
(, , ).
(
),
UPDATE [.. SET "" = ]
[= (select] [..
]. () (
NULL) (
NOT NULL), () ( DROP)
.
UPDATE ""
SET "" = ''
WHERE "" IN (SELECT "" FROM "");
UPDATE ""
SET "" = ''
WHERE "" IN (SELECT "" FROM "");
UPDATE ""
SET "" = (SELECT "" FROM ""
WHERE ""."" = ""."");
UPDATE ""
SET "" = (SELECT "" FROM ""
WHERE ""."" = ""."");
: NOT NULL . ,
( NOT NULL)
/ ( ,
null ).
, ,
MODIFY.
DEFAULT ALTER
NOT NULL ( ) (.. DEFAULT )
.
8 (
/ ,,):
001 500 1 111 20 30 -
002 5 1 3333 - - .3
010 10 7 8888 - - .2
011 10 7 9999 - - .2
017 100 10 55 10 20 -
020 20 13 77777 - - .3
021 40 14 222222 - - .4
022 8 14 222222 - - .1
023 9 14 222222 - - .2
5 [10] - .. ( )
(*)
11 ()
( BD-normalization.pdf).
, ,
:
_(_, _, _,
_, _, _,
_, _, __,
__, __)
_
(
) .
, , _ :
(1). _, _, __ _,
__
(2). _ _, _,
_
(3). _ _, _
(4). _, _ __
() ,
_ <_,
_, __>. 2 [3]
[: = {_, _,
__} _,
: ,
. ,
.]
(2):
(2). _ _, _,
_
(5). _, _, __ _,
_, _, _,
__
, (3):
(3). _ _, _
(6). _, _, __ _,
_, _, __
, (1):
(1). _, _, __ _,
__
(7). _, _, __ _,
__, _, _,
__
, (7) :
(8). _, _, __ _,
_
2
()
:
) ( , Y R Y X,
: Y),
) ( , , R
, : ),
) ( , , R
, : ), ,
) ( , , R
, : ).
) ( , , R
, : Z Z).
, (8) (4):
(8). _, _, __ _,
_
(4). _, _ __
(9). _, _, __ __
(1). _, _, __ _,
__
(5). _, _, __ _,
_, _, _,
__
(6). _, _, __ _,
_, _, __
(9). _, _, __ __
(10). _, _, __ _,
_, __, _, __,
_, _, _,
_, _, __
_
<_, _, __>.
, _
,
( )
_ :
,
. , <_, _,
__> .
, ,
,
(10).
() -
( <_-
, _, __>),
_ 1, 2 3 . [4]
(1NF):
(. 11
[ BD-normalization.pdf])
1NF . ,
,
1NF.
(2NF):
. (. 14
) 2NF )
, , )
.
_
<_, _, __>
(2) "_ ..." (3)
"_ ..." . , 2NF.
(3NF):
(. 15
) 3NF )
, , ) -
. _
.
(II) ,
_
Boyce-Codd (BCNF). [3]
_ ,
Boyce-Codd (BCNF).
, (. 18
), R Boyce-Codd (BCNF) )
) R,
, .
_
:
(1). _, _, __ _,
__
(2). _ _, _,
_
(3). _ _, _
(4). _, _ __
.
23-24 .
, : ,
.
, ( ) ,
. , ,
:
(_, _, _,
_)
(_, _, _)
(_, _, __)
(_, _, __, _,
__)
,
. ,
BCNF.
, BCNF
.