List of commits:
Subject Hash Author Date (UTC)
Working on solutions for problems in Chapter 3. 0da378f97cea97fa2b3614f1b611a3b5bdf42632 aubert@math.cnrs.fr 2019-02-26 19:56:23
Forgot one exercise in exam. 611bbe4cc68f802bfffd7bdfc70c3433a70eceb5 aubert@math.cnrs.fr 2019-02-22 20:39:07
Quick fix c22751b88c377a40dd2c037a706409aa29ef3ce2 aubert@math.cnrs.fr 2019-02-22 20:37:21
Various editing, fixing some of the solutions in Chapter 3 and some of the exercises in Chapter 4. 1e1d8dd576329b20aa3b7f9344aaecb9d11fc6f4 aubert@math.cnrs.fr 2019-02-22 20:22:09
Added the rest of the first exam for Fall 2019. 0d5a839282b1ae6e6c07e7b12a74ff2f0f2f3b86 aubert@math.cnrs.fr 2019-02-22 20:03:02
Adding a problem and its solution, in the SQL chapter. d5bfcbb949a6acac68156a8b37d6f8d23375b1cb aubert@math.cnrs.fr 2019-02-19 19:53:27
Adding second quiz, and fixing some exercises and problems in Chapter 3. 062c9b46fad52848efbf61e08c91103c0bae4127 aubert@math.cnrs.fr 2019-02-06 20:04:16
Clarification on SQL constraints. 70e26a02aa344cc1bf009a089623be6baac79ba7 aubert@math.cnrs.fr 2019-01-29 22:46:26
Adding some minor SQL remarks + code for HW_FACULTY. 1d1b74302d29fb63c3c2bacca30533283f720997 aubert@math.cnrs.fr 2019-01-25 17:24:16
fixing small typo. 0feeb8df61e05d6d0990120628303cf31108f100 aubert@math.cnrs.fr 2019-01-22 18:23:34
Quick fix + adding macOS install instructions. ea3063e4e9225c8ce66838c8bfddb9a34aadacf8 aubert@math.cnrs.fr 2019-01-16 15:59:38
Fixing a few typos and adding a drawing. b335800d4129c8e29763a6c1d564243d485fa51b aubert@math.cnrs.fr 2019-01-15 19:03:38
Fixing first homework 3eeb05a78235274a330c780f4f26b5fed1a01aef aubert@math.cnrs.fr 2019-01-08 19:50:29
Added content of various exam, fixed intro, added references, solutions, fixed types. a8e9d2d4856133d68d882403cde42dfcc2f5cc69 aubert@math.cnrs.fr 2019-01-07 16:47:02
Cleaning files and makefile 7605a6530505ad69042413dd995d77f1814c2f30 au 2018-12-24 14:25:31
Fixed margin for PDF, added a couple of SVG images, fixed some problems, added some code. eb83d9f07d738df7ab2515b768d6165a3b7e5ca3 au 2018-12-24 02:28:36
Working on rel_mod for Prof_Department_Extended. 2b1eff83797fbda620189f014043d648c884e887 au 2018-12-23 22:38:07
Working on FD and various figures. 8fd7f8322e70ae252596aa9cb88918ac40d5aa84 au 2018-12-23 20:25:19
Added first drawing for fd. 2a0e4fc716d91c23c81346a0e3b568f7132284c9 au 2018-12-23 05:23:29
Cleaned latex code. 1cf04e85915d24fc0208b407eb0166803b2369cf au 2018-12-23 04:27:41
Commit 0da378f97cea97fa2b3614f1b611a3b5bdf42632 - Working on solutions for problems in Chapter 3.
Author: aubert@math.cnrs.fr
Author date (UTC): 2019-02-26 19:56
Committer name: aubert@math.cnrs.fr
Committer date (UTC): 2019-02-26 19:56
Parent(s): 611bbe4cc68f802bfffd7bdfc70c3433a70eceb5
Signing key:
Tree: 570d7d73bac81f5c6fb217d0a739887e25a3adf5
File Lines added Lines deleted
notes/code/sql/HW_DB_COFFEE.sql 26 3
notes/code/sql/TRAIN.sql 27 10
notes/fig/rel_mod/COFFEE.tex 43 0
notes/lectures_notes.md 12 1
File notes/code/sql/HW_DB_COFFEE.sql changed (mode: 100644) (index a9a270f..d0b3691)
1 1 /* code/sql/HW_DB_COFEE.sql */ /* code/sql/HW_DB_COFEE.sql */
2 2
3 DROP SCHEMA HW_DB_COFFEE;
3 /*
4 * Setting up the data
5 */
6
7 --DROP SCHEMA HW_DB_COFFEE;
4 8
5 9 CREATE SCHEMA HW_DB_COFFEE; CREATE SCHEMA HW_DB_COFFEE;
6 10 USE HW_DB_COFFEE; USE HW_DB_COFFEE;
 
... ... INSERT INTO SUPPLY VALUES
48 52 ('Coffee Unl.', 121), ('Coffee Unl.', 121),
49 53 ('Coffee Exp.', 311), ('Coffee Exp.', 311),
50 54 ('Johns & Co.', 221); ('Johns & Co.', 221);
51
55
56 -- Question 2:
52 57 START TRANSACTION; START TRANSACTION;
58
53 59 INSERT INTO CUSTOMER VALUES(005, Bob Hill, NULL, 001); INSERT INTO CUSTOMER VALUES(005, Bob Hill, NULL, 001);
60
54 61 INSERT INTO COFFEE VALUES(002, "Peru", "Decaf", 3.00); INSERT INTO COFFEE VALUES(002, "Peru", "Decaf", 3.00);
62
55 63 INSERT INTO PROVIDER VALUES(NULL, "contact@localcof.com"); -- ERROR 1048 (23000): Column 'Name' cannot be null INSERT INTO PROVIDER VALUES(NULL, "contact@localcof.com"); -- ERROR 1048 (23000): Column 'Name' cannot be null
64
56 65 INSERT INTO SUPPLY VALUES("Johns & Co.", 121); INSERT INTO SUPPLY VALUES("Johns & Co.", 121);
66
57 67 INSERT INTO SUPPLY VALUES("Coffee Unl.", 311, 221); -- ERROR 1136 (21S01): Column count doesn't match value count at row 1 INSERT INTO SUPPLY VALUES("Coffee Unl.", 311, 221); -- ERROR 1136 (21S01): Column count doesn't match value count at row 1
58 68
59 69 --COMMIT; --COMMIT;
60 70 -- Rest the changes: -- Rest the changes:
61 71 ROLLBACK; ROLLBACK;
62 72
73 -- Question 3:
63 74
64 75 START TRANSACTION; START TRANSACTION;
65 76 UPDATE CUSTOMER SET FavCoffee = 001 WHERE CardNo = 001; -- Rows matched: 1 Changed: 1 Warnings: 0 UPDATE CUSTOMER SET FavCoffee = 001 WHERE CardNo = 001; -- Rows matched: 1 Changed: 1 Warnings: 0
 
... ... UPDATE COFFEE SET PricePerPound = 10.00 WHERE PricePerPound > 10.00; -- Rows mat
82 93 SELECT * FROM COFFEE; SELECT * FROM COFFEE;
83 94 ROLLBACK; ROLLBACK;
84 95
96 -- Question 4:
97
85 98 START TRANSACTION; START TRANSACTION;
86 99 DELETE FROM CUSTOMER WHERE Name LIKE '%S%'; -- Query OK, 2 rows affected (0.01 sec) DELETE FROM CUSTOMER WHERE Name LIKE '%S%'; -- Query OK, 2 rows affected (0.01 sec)
87 100 SELECT * FROM CUSTOMER; SELECT * FROM CUSTOMER;
 
... ... SELECT * FROM PROVIDER;
104 117 SELECT * FROM SUPPLY; SELECT * FROM SUPPLY;
105 118 ROLLBACK; ROLLBACK;
106 119
120 -- Question 5:
121
122 -- 1.
107 123 SELECT Origin FROM COFFEE WHERE TypeOfRoast = 'Dark'; SELECT Origin FROM COFFEE WHERE TypeOfRoast = 'Dark';
124
125 -- 2.
108 126 SELECT FavCoffee FROM CUSTOMER WHERE Name LIKE 'Bob%'; SELECT FavCoffee FROM CUSTOMER WHERE Name LIKE 'Bob%';
127
128 -- 3.
109 129 SELECT Name FROM PROVIDER WHERE Email IS NULL; SELECT Name FROM PROVIDER WHERE Email IS NULL;
130
131 -- 4.
110 132 SELECT COUNT(*) FROM SUPPLY WHERE Provider = 'Johns & Co.'; SELECT COUNT(*) FROM SUPPLY WHERE Provider = 'Johns & Co.';
133
134 -- 5.
111 135 SELECT Provider FROM COFFEE, SUPPLY WHERE TypeOfRoast = 'Dark' AND Coffee = Ref; SELECT Provider FROM COFFEE, SUPPLY WHERE TypeOfRoast = 'Dark' AND Coffee = Ref;
File notes/code/sql/TRAIN.sql changed (mode: 100644) (index de04ee4..ab5ea8c)
1 1 /* code/sql/TRAIN.sql */ /* code/sql/TRAIN.sql */
2 2
3 -- Question 1:
4
3 5 CREATE TABLE TRAIN( CREATE TABLE TRAIN(
4 Id VARCHAR(30) PRIMARY KEY,
6 Id VARCHAR(30) PRIMARY KEY, -- This line was changed.
5 7 Model VARCHAR(30), Model VARCHAR(30),
6 8 ConstructionYear YEAR(4) ConstructionYear YEAR(4)
7 9 ); );
8 10
11 -- Question 2 :
12
9 13 CREATE TABLE CONDUCTOR( CREATE TABLE CONDUCTOR(
10 14 Id VARCHAR(20), Id VARCHAR(20),
11 15 Name VARCHAR(20), Name VARCHAR(20),
12 16 ExperienceLevel VARCHAR(20) ExperienceLevel VARCHAR(20)
13 17 ); );
14 18
15 ALTER TABLE CONDUCTOR ADD PRIMARY KEY (Id);
19 ALTER TABLE CONDUCTOR
20 ADD PRIMARY KEY (Id);
21
22 -- Question 3
16 23
17 24 CREATE TABLE ASSIGNED_TO( CREATE TABLE ASSIGNED_TO(
18 25 TrainId VARCHAR(20), TrainId VARCHAR(20),
19 26 ConductorId VARCHAR(20), ConductorId VARCHAR(20),
20 27 Day DATE, Day DATE,
21 28 PRIMARY KEY(TrainId, ConductorId), PRIMARY KEY(TrainId, ConductorId),
22 FOREIGN KEY (TrainId) REFERENCES TRAIN(Id),
23 FOREIGN KEY (ConductorId) REFERENCES CONDUCTOR(Id)
29 FOREIGN KEY (TrainId) REFERENCES TRAIN(Id), -- This line was changed
30 FOREIGN KEY (ConductorId) REFERENCES CONDUCTOR(Id) -- This line was changed
24 31 ); );
25 32
33 -- Question 4:
34
35 /*
36 * We insert more than one tuple, to make
37 * the SELECT statements that follow easier
38 * to test and debug.
39 */
40
26 41 INSERT INTO TRAIN VALUES ('K-13', 'SurfLiner', 2019), ('K-12', 'Regina', 2015); INSERT INTO TRAIN VALUES ('K-13', 'SurfLiner', 2019), ('K-12', 'Regina', 2015);
27 42 INSERT INTO CONDUCTOR VALUES ('GP1029', 'Bill', 'Junior'), ('GP1030', 'Sandrine', 'Junior'); INSERT INTO CONDUCTOR VALUES ('GP1029', 'Bill', 'Junior'), ('GP1030', 'Sandrine', 'Junior');
28 43 INSERT INTO ASSIGNED_TO VALUES ('K-13', 'GP1029', DATE'2015/12/14'), ('K-12', 'GP1030', '20120909'); INSERT INTO ASSIGNED_TO VALUES ('K-13', 'GP1029', DATE'2015/12/14'), ('K-12', 'GP1030', '20120909');
29 44
45 -- Question 5:
46
30 47 UPDATE CONDUCTOR SET ExperienceLevel = 'Senior' WHERE Id = 'GP1029'; UPDATE CONDUCTOR SET ExperienceLevel = 'Senior' WHERE Id = 'GP1029';
31 48
49 -- Question 6:
50 -- 1.
32 51 SELECT Id FROM TRAIN; SELECT Id FROM TRAIN;
33 52
53 -- 2.
34 54 SELECT Name FROM CONDUCTOR WHERE ExperienceLevel = 'Senior'; SELECT Name FROM CONDUCTOR WHERE ExperienceLevel = 'Senior';
35 55
56 -- 3.
36 57 SELECT ConstructionYear FROM TRAIN WHERE Model='SurfLiner' OR Model='Regina'; SELECT ConstructionYear FROM TRAIN WHERE Model='SurfLiner' OR Model='Regina';
37 58
59 --4.
38 60 SELECT ConductorId FROM ASSIGNED_TO WHERE TrainId = 'K-13' AND Day='2015/12/14'; SELECT ConductorId FROM ASSIGNED_TO WHERE TrainId = 'K-13' AND Day='2015/12/14';
39 61
62 --5.
40 63 SELECT Model FROM TRAIN, ASSIGNED_TO WHERE ConductorID = 'GP1029' AND TrainId = TRAIN.ID; SELECT Model FROM TRAIN, ASSIGNED_TO WHERE ConductorID = 'GP1029' AND TrainId = TRAIN.ID;
41
42 /*
43 SELECT CONDUCTOR.Id
44 FROM ASSIGNED_TO, CONDUCTOR, TRAIN
45 WHERE date=20190101 AND Model = 'sdw' AND ASSIGNED_TO.ConductorID = CONDUCTOR.ConductorID;
46 */
File notes/fig/rel_mod/COFFEE.tex added (mode: 100644) (index 0000000..5ba9129)
1 \documentclass[border=20pt]{standalone}
2 \input{template.def}
3
4 % COFFEE (Ref (PK), Origin, TypeOfRoast, PricePerPound)
5 % CUSTOMER (CardNo (PK), Name, Email, FavCoffee (FK to COFFEE.Ref))
6 % SUPPLY (Provider (PK, FK to PROVIDEV.Id), Coffee (PK, FK to COFEE.Ref))
7 % PROVIDER (Name (PK), Email)
8
9 \Frame(0,0){1}[COFFEE]{
10 Ref/PK,
11 Origin/A,
12 TypeOfRoast/A,
13 PricePerPound/A};
14
15 \Frame(0,-2.5){2}[CUSTOMER]{
16 CardNo/PK,
17 Name/A,
18 Email/A,
19 FavCoffee/A};
20
21 \Frame(8,0){3}[SUPPLY]{
22 Coffee/PK,
23 Provider/PK};
24
25 \Frame(8,-2.5){4}[PROVIDER]{
26 Name/PK,
27 Email/A};
28
29 \draw[FK] % From SUPPLY.Provider to COFFEE.Ref
30 (Ref1)++(0.1,0) -- ++(0,-.55) coordinate (inter)
31 -- (Coffee3 |- inter) --++(0, 0.5);
32
33 \draw[FK] % From SUPPLY.Coffee to PROVIDER.Name
34 (Name4) -- ++(0,-.55) -- ++(2, 0.0) -- ++(0, 2.5) --
35 coordinate (inter) (Provider3|- inter) --++(0, 0.5);
36
37 \draw[FK] % From CUSTOMER.CardNo to COFFEE.Ref
38 (Ref1)++(-0.1,0) -- ++(0, -0.55) -- ++(-1, 0) -- ++(0, -2.5)
39 coordinate (inter) -- (FavCoffee2|- inter) --++(0, 0.5);
40
41
42 \end{tikzpicture}
43 \end{document}
File notes/lectures_notes.md changed (mode: 100644) (index afe4e1d..30bfe9d)
... ... Solution to [%D %n (%T)](#problem:train)
3462 3462 Solution to [%D %n (%T)](#problem:coffee) Solution to [%D %n (%T)](#problem:coffee)
3463 3463 ~ ~
3464 3464
3465 Here is some code, commented.
3465 For question 1, we have:
3466
3467 ![
3468 COFFEE (Ref (PK), Origin, TypeOfRoast, PricePerPound)
3469 CUSTOMER (CardNo (PK), Name, Email, FavCoffee (FK to COFFEE.Ref))
3470 SUPPLY (Provider (PK, FK to PROVIDEV.Id), Coffee (PK, FK to COFEE.Ref))
3471 PROVIDER (Name (PK), Email)
3472 ](fig/rel_mod/COFFEE)
3473 \
3474
3475
3476 The answer to the other questions can be read from the following code:
3466 3477
3467 3478 ```{.sqlmysql .numberLines include=code/sql/HW_DB_COFFEE.sql} ```{.sqlmysql .numberLines include=code/sql/HW_DB_COFFEE.sql}
3468 3479 ``` ```
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/caubert/CSCI_3410

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/caubert/CSCI_3410

Clone this repository using git:
git clone git://git.rocketgit.com/user/caubert/CSCI_3410

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main