You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: Week3/README.md
+80-35Lines changed: 80 additions & 35 deletions
Original file line number
Diff line number
Diff line change
@@ -1,37 +1,96 @@
1
-
# Lesson 3: Data Models, Relationships, and Schemas
1
+
# Lesson 3: Database design, normal forms, SQL injection
2
2
3
-
In the final week, additional theory will be covered to discuss more complex relational data. Students will learn about entity relationship modelling and how to convert these models to a database schema using normalisation and foreign-key constraints. Non-relational data will also be considered, as well as the benefits and drawbacks of relational and non-relational models.
4
-
5
-
Objective: Students should be able to create an entity relationship diagram based on a qualatative description of data requirements, and translate that into a MySQL database schema. Students should also be able to compare and contrast relational (like MySQL) and NoSQL databases (considering their benefits and drawbacks).
3
+
Objective: This class invites students to discuss Entity Relationship Diagram (ERD).
4
+
Students should be able to explain their choices of entities, relationships, attributes etc.
5
+
SQL injection should be explained with a demonstration (with a simple JS client).
6
+
Concepts of database transaction, ACID properties, normal forms should be introduced with
7
+
examples / live coding (creating a transaction, committing and rollback-ing).
6
8
7
9
## Pre-Class Readings
8
10
9
11
Before arriving to class on Sunday, please watch all of the videos in [this video playlist](https://www.lynda.com/SharedPlaylist/ae29ea2f495c432793abc220da47baa6) on Lynda.
10
-
- Choosing Primary Keys
11
-
- Defining One-to-Many Relationships
12
-
- Exploring One-to-One Relationships
13
-
- Exploring Many-to-Many Relationships
14
-
- Understanding Relationship Rules and Referential Integrity
15
-
- Defining Table Relationships
16
-
- NoSQL databases
17
-
- GraphQL: Introduction and History
18
-
- Why use GraphQL?
19
12
20
13
Also, please read the following page that explains database foreign keys.
21
14
-[What is a Database Foreign Key](http://databases.about.com/cs/specificproducts/g/foreignkey.htm)
22
15
23
-
## Main Topics
16
+
## Topics to be covered
24
17
25
-
- More complex entity relationship diagrams
18
+
### Entity Relationship Diagrams
26
19
- Associative entities from many-to-many relationships
27
-
- Introduction to normalisation
28
-
- Foreign key constraints
29
-
- Complicated values to store in MySQL
20
+
- Boolean attribute instead of a table
21
+
22
+
### Normalization
23
+
Database Design following normal forms as a convention.
24
+
These normal forms build incrementally.
25
+
E.g. The database is in 3NF if it is already in 2NF and satisfied the
26
+
rules for 3rd normal form.
27
+
28
+
#### 1NF (4 rules)
29
+
* Rule 1 : Single valued attributes (each column should have atomic value, no multiple values)
30
+
* Rule 2 : Attribute domain should not change
31
+
* Rule 3 : Unique names for attributes / columns
32
+
* Rule 4 : Order does not matter
33
+
#### 2NF
34
+
No partial dependency. (i.e. no field should depend on part of the primary key)
No transitive dependency (i.e. no field should depend on non-key attributes).
42
+
43
+
#### Boyce Codd Normal Form (3.5 NF)
44
+
for any dependency A → B, A should be a super key.
45
+
46
+
#### 4NF
47
+
No multi-value dependency.
48
+
49
+
### Complicated values to store in MySQL
30
50
- Storing prices (floating point errors)
31
51
- Storing dates (datetime vs. timestamp)
32
-
- CREATE TABLE syntax
33
-
- Brief introduction to non-relational data
34
-
- Scaffolding and application generators
52
+
- datetime : fixed value (joining date of employee): has a calendar date and a wall clock time
53
+
- timestamp : unix timestamp, seconds elapsed from 1 Jan 1970 00:00 in UTC (takes timezone into consideration)
54
+
55
+
### Database transactions
56
+
- A transaction is a set of commands that you want to treat as "one command." It has to either happen in full or not at all.
57
+
58
+
- A classical example is transferring money from one bank account to another. To do that you have first to withdraw the amount from the source account, and then deposit it to the destination account. The operation has to succeed in full. If you stop halfway, the money will be lost, and that is Very Bad.
59
+
60
+
### ACID properties
61
+
62
+
-**Atomicity** : states that database modifications must follow an “all or nothing” rule.
63
+
Each transaction is said to be “atomic.”
64
+
If one part of the transaction fails, the entire transaction fails.
65
+
-**Consistency** : states that only valid data will be written to the database. If, for some reason, a transaction is executed that violates the database’s consistency rules, the entire transaction will be rolled back, and the database will be restored to a state consistent with those rules.
66
+
-**Isolation** : requires that multiple transactions occurring at the same time not impact each other’s execution.
67
+
-**Dependency** : ensures that any transaction committed to the database will not be lost. Durability is ensured through the use of database backups and transaction logs that facilitate the restoration of committed transactions in spite of any subsequent software or hardware failures.
68
+
69
+
### SQL injection
70
+
71
+
Some SQL clients accept input from user to fabricate the queries.
72
+
A malicious user can tweak the input so as to acquire more information from the database or
73
+
to destroy the database (literally!). Demo program `sql-injection.js` is in the `Week3` folder.
74
+
75
+
Consider the following query `SELECT name, salary FROM employees where id = X`.
76
+
77
+
#### Injection to get more information
78
+
```
79
+
If X is `101 OR 1=1`, then the query returns all records because 1=1 is always true
80
+
SELECT name, salary FROM employees where id = 101 OR 1=1;
81
+
```
82
+
83
+
#### Injection to destroy the database
84
+
```
85
+
If X is `101; DROP database mydb`, then the query will delete the entire database
86
+
SELECT name, salary FROM employees where id = 101; DROP database mydb;
87
+
```
88
+
mysqljs prevents the second injection by not allowing multiple SQL statements
89
+
to be executed at once.
90
+
91
+
### Understanding the asynchronous nature of database queries
92
+
@Jim wrote these [excellent demo programs] (https://github.com/remarcmij/database_examples)
93
+
for better understanding. Do check them out.
35
94
36
95
## Reference Material
37
96
@@ -41,17 +100,3 @@ Also, please read the following page that explains database foreign keys.
41
100
-[Yeoman](http://yeoman.io) - General framework for creating and scaffolding all types of projects
42
101
-[Sails](http://sails.js) - Lightweight framework for generating APIs and web server apps in Node
43
102
-[Loopback](http://loopback.io/) - A more "enterprise-ready" framework for generating and managing APIs.
44
-
-[Rewatch the previously recorded session](https://www.youtube.com/watch?v=ZNLhHUDj6jo)
45
-
46
-
## Homework
47
-
48
-
For this week's homework:
49
-
50
-
Using an entity relationship diagram, design the data model for an application of your choice; this could be anything, but previous students have used a small business (with staff, offices, and job titles), a library (with books, genres, racks, members, and a borrowing log), or a farm (with animals, barns, and farmers). Your application must include at least one many-to-many relationship and any supporting tables (associative entities) that are needed. The entity relationship diagram must describe what tables you will need, the columns in these tables, which column is the primary key, and the relationships between tables.
51
-
52
-
Next, using the entity relationship diagram as a starting point, write all the necessary `CREATE TABLE` statements to create all tables and relationships (foreign key constraints) for this data model.
53
-
54
-
Submit an image or PDF of your entity relationship diagram, and a `.sql` file with the `CREATE TABLE` statements.
55
-
56
-
## Check out the React repo [here](https://github.com/HackYourFuture/React)
57
-
And find out how you can prepare for the first React lecture :dancers:
0 commit comments