SQL Notes PDF

Download as pdf or txt
Download as pdf or txt
You are on page 1of 42

1) Intro

2) Tables & Keys (23:12)

3) SQL Basics (43:32)

4) MySQL Installation - Windows (52:26)

5) MySQL Installation - Mac (1:02:00)

6) Creating Tables (1:15:50)

7) Inserting Data (1:31:05)

8) Updating & Deleting Data (1:48:11)

9) Basic Queries (1:56:11)

10) Company Database Intro (2:08:37)

11) Creating Company Database (2:17:06)

12) More Basic Queries (2:30:28)

13) Functions (2:36:25)

14) Wildcards (2:45:15)

15) Union (2:53:55)

16) Joins (3:01:37)

17) Nested Queries (3:11:51)

18) On Delete (3:21:53)

19) Triggers (3:30:05)

20) ER Diagrams Info (3:42:15)

21) Designing an ER Diagram (3:53:53)

22) Converting ER Diagrams to Schemas (4:08:34)

[ 1. Intro ]
1–1. What is database?
Database is a collection of related information that can be stored in different
ways.

Computers are great at keeping track of large amounts of information.

Database Management Systems (DBMS) is a special software program that


helps users create & maintain a database.

We can interact with a DBMS to Create, Read, Update, and Delete information.

There are two types of databases :

1) Relational Databases (SQL)

: Organize data into one or more tables

- Each table has columns & rows.

- A unique key identifies each row.2) Non-Relational Databases (No


SQL)

: Organize data in anything but a traditional table.

- Key-Value stores

- Documents (JSON, XML, etc)

- Graphs

- Flexible tables

1–2. Relational Database


Relational Database Management Systems (RDBMS) helps users create & maintain a
relational database. (e.g., MySQL, PostgreSQL, etc)

Structured Query Language (SQL):

Standard language for interacting with RDBMS.


Used to perform C.R.U.D. operations as well as other administrative tasks (user
management, security, backup, etc).
Used to define tables(rows, columns) & structures.
SQL code used on one RDMBS is NOT always portable to another RDMBS without
modification.

1–3. Non-Relational Database


Any non-relational database falls under this category. So, there’s no set language
standard.

E.g., Document(e.g., JSON), Graph, Key-Value Hash(Keys are mapped to


values(e.g., JSON))

Non-Relational Database Management Systems (NRDBMS) helps users create &


maintain a relational database. (e.g., MongoDB, DynamoDB, etc)

Most NRDBMS will use their own language for performing C.R.U.D. and
administrative operations on database.

1–4. Database Queries


Queries are requests made to the database management system for specific
information.

As database’s structures become more and more complex, it becomes more difficult to get
specific pieces of information we want. A google search is a query.

[ 2. Tables & Keys (23:12) ]

2–1. Primary Key


When we make a table in a relational database, we need a special column called
“primary key”, which uniquely defines the row in the database.
2018 ©️FreeCodeCamp

> Student ID 2 and Student ID 4 are different people.

There are two types of primary keys.

“Surrogate Key” is an artificially generated key with the sole purpose of


uniquely identifying a row (StackOverflow).

2018 ©️FreeCodeCamp

“Natural key” is a primary key made up of real world data.

2018 ©️FreeCodeCamp

“Composite Key” is “a combination of two or more columns in a table that can be used to
uniquely identify each row in the table. Uniqueness is only guaranteed when the columns
are combined; when taken individually the columns do not guarantee uniqueness.”
(Techopedia)

2–2. Foreign Key


“Foreign Key” is a key used to link two tables together.

2018 ©️FreeCodeCamp

2018 ©️FreeCodeCamp

A foreign key in a table is a primary key in another table.


There could be more than one foreign key.

[ 3. SQL Basics (43:32) ]


3–1. What is SQL?
SQL is a Structured Query Language used for interacting with a RDBMS.

It is actually a hybrid language. It’s basically 4 types of languages in one.

Data Query Language (DQL) : Used to query the database for information. Can get
information that’s already stored in the database.
Data Definition Language (DDL) : Used for defining database schemas.
Data Control Language (DCL) : Used for controlling access to data in the database.
Handles user & permissions management.
Data Manipulation Language (DML) : Used for inserting, updating, and deleting data
from the database.

In short, we can do the following things with SQL:

Create, Read, Update, and Delete data


Create & Manage databases
Design & Create database tables
Perform administrative tasks (security, user management, import/export, etc)

3–2. Queries
A Query is a set of instructions given to the RDMBS (written in SQL) that tell
the RDMBS what information a developer wants it to retrieve for the
developer.

SELECT employee.name, employee.age

FROM employee

WHERE employee.salary > 30000;

[ 4. MySQL Installation — Windows (52:26) ]


[ 5. MySQL Installation — Mac (1:02:00) ]
5–1. Install & Log into MySQL
Download macOS DMG Archive at MySQL Community Server & install it.

Let’s make our terminal to recognize MySQL commands.

Let’s connect to the MySQL server.

mysql -u root -p

To change my password, type ALTER USER ‘root’@‘localhost’ IDENTIFIED BY


‘<enter a new password>’ in terminal.

To exit, type exit in terminal.

Create a database by running create database <database name>; in terminal.

5–2. Install & Log into PopSQL / MySQL WorkBench


I will use MySQL Workbench instead.

[ 6. Creating Tables (1:15:50) ]


6–1. Types
-INT : Whole numbers

- DECIMAL(M, N) : Decimal numbers (M: total decimals, N: decimals after


the decimal point)

- VARCHAR(1) : string of text of length 1

- BLOB : storage for large data

- DATE : 'YYYY-MM-DD'

- TIMESTAMP : 'YYYY-MM-DD HH:MM:SS'

6–2. Create/Delete/Update a table


Create a table called “student” :

CREATE TABLE IF NOT EXISTS student(

student_id INT PRIMARY KEY,

name VARCHAR(20),

major VARCHAR(40)

);
View the table : DESCRIBE student;

Delete a table : DROP TABLE student;

Add a table : ALTER TABLE student ADD gpa DECIMAL(3,2);

Delete a column : ALTER TABLE student DROP gpa;

Delete a row : DELETE FROM student WHERE student_id = 1

[ 7. Inserting Data (1:31:05) ]


7–1. Insert data
INSERT INTO student VALUES(1, ‘Jack’, ‘Biology’);

INSERT INTO student VALUES(2, 'Katie', 'Sociology');

INSERT INTO student VALUES(3, 'James', 'Computer Engineering');

7–2. View all data


SELECT * FROM student;

7–3. What if we don’t know a student’s major?


INSERT INTO student(student_id, name) VALUES(4, 'Kyle');

> The unfilled value is set as “null”.

7–4. Not null, Unique, Primary key


CREATE TABLE IF NOT EXISTS student(

student_id INT PRIMARY KEY,

name VARCHAR(20) NOT NULL,

major VARCHAR(40) UNIQUE

);

NOT NULL : “Name” cannot be filled with NULL.


UNIQUE : A value of “Major” cannot be duplicated.
PRIMARY KEY : NOT NULL + UNIQUE

7–5. Default value


CREATE TABLE IF NOT EXISTS student(

student_id INT PRIMARY KEY,

name VARCHAR(20),

major VARCHAR(40) DEFAULT 'undecided',

);

7–6. Increment a primary key automatically.


CREATE TABLE IF NOT EXISTS student(

student_id INT AUTO_INCREMENT,

name VARCHAR(20),

major VARCHAR(40) DEFAULT 'undecided',

PRIMARY KEY(student_id)

);INSERT INTO student(name, major) VALUES(‘Jack’, ‘Biology’);

INSERT INTO student(name, major) VALUES('Katie', 'Sociology');

INSERT INTO student(name, major) VALUES('James', 'Computer


Engineering');

[ 8. Updating & Deleting Data (1:48:11) ]


8–1. Delete multiple rows
DELETE FROM student WHERE student_id IN (4,5,6,7,8);
8-2. Change values that match a condition
UPDATE student

SET major = 'Bio'

WHERE major = 'Biology';

> If you get this error, Run the following: SET SQL_SAFE_UPDATES = 0;

> You can reset the safe mode with SET SQL_SAFE_UPDATES = 1;

UPDATE student

SET major = 'Graphic Design'

WHERE student_id = 9;

UPDATE student

SET major = 'MIS'

WHERE major = 'Sociology' OR major = 'Graphic Design';

UPDATE student

SET name = 'Julia', major = 'undecided'

WHERE student_id = 1;
[ 9. Basic Queries (1:56:11) ]
SELECT name

FROM tutorial.student;

SELECT name

FROM tutorial.student

ORDER BY name;

SELECT name

FROM tutorial.student

ORDER BY name DESC;

SELECT *

FROM tutorial.student

ORDER BY major, student_id DESC;

SELECT *

FROM tutorial.student

LIMIT 2;
SELECT *

FROM tutorial.student

WHERE major = 'MIS' OR name = 'Julia';

SELECT *

FROM tutorial.student

WHERE student_id <=3 AND name <> 'Katie';

<> : not equal to

SELECT *

FROM tutorial.student

WHERE name IN ('Julia', 'Katie', 'Amy');

[ 10. Company Database Intro (2:08:37) ]


2017 © M
️ ike Dane

2017 © M
️ ike Dane

[ 11. Creating Company Database (2:17:06) ]


To start, delete “student” table : DROP TABLE student;

11–1. Make tables.


[STEP 1] Create “employ” table.

2017 © M
️ ike Dane

CREATE TABLE employee (

emp_id INT PRIMARY KEY,

first_name VARCHAR(40),

last_name VARCHAR(40),

birth_day DATE,

sex VARCHAR(1),

salary INT,

super_id INT,

branch_id INT

);
[STEP 2] Create “branch” table & add a foreign key.

2017 © M
️ ike Dane

CREATE TABLE branch (

branch_id INT PRIMARY KEY,

branch_name VARCHAR(40),

mgr_id INT,

mgr_start_date DATE,

FOREIGN KEY(mgr_id) REFERENCES employee(emp_id) ON DELETE SET NULL

);

> ON DELETE SET NULL : “It specifies that the child data is set to NULL when the parent
data is deleted. The child data is NOT deleted.” (Tech on the Net)

[STEP 3] Add foreign keys to “employ” table.

2017 © M
️ ike Dane

ALTER TABLE employee

ADD FOREIGN KEY(super_id)

REFERENCES employee(emp_id)

ON DELETE SET NULL;ALTER TABLE employee

ADD FOREIGN KEY(branch_id)

REFERENCES branch(branch_id)

ON DELETE SET NULL;

[STEP 4] Create “client” table & add a foreign key.

2017 © M
️ ike Dane
CREATE TABLE client (

client_id INT PRIMARY KEY,

client_name VARCHAR(40),

branch_id INT,

FOREIGN KEY(branch_id) REFERENCES branch(branch_id) ON DELETE SET NULL

);

[STEP 5] Create “works_with” table with composite keys

2017 © M
️ ike Dane

CREATE TABLE works_with (

emp_id INT,

client_id INT,

total_sales INT,

PRIMARY KEY(emp_id, client_id),

FOREIGN KEY(emp_id) REFERENCES employee(emp_id) ON DELETE CASCADE,

FOREIGN KEY(client_id) REFERENCES client(client_id) ON DELETE CASCADE

);

[STEP 6] Create “branch_supplier” table with composite keys

2017 © M
️ ike Dane

CREATE TABLE branch_supplier (

branch_id INT,

supplier_name VARCHAR(40),

supply_type VARCHAR(40),

PRIMARY KEY(branch_id, supplier_name),

FOREIGN KEY(branch_id) REFERENCES branch(branch_id) ON DELETE CASCADE

);

To make composite keys, assign more than one key as primary keys.
ON DELETE CASCADE : “It specifies that the child data is deleted when the parent
data is deleted.” (Tech on the Net)
11–2. Insert data.
[STEP 1] Insert data of “Corporate” branch.

2017 © M
️ ike Dane

INSERT INTO employee VALUES(100, 'David', 'Wallace', '1967-11-17', 'M',


250000, NULL, NULL);INSERT INTO branch VALUES(1, 'Corporate', 100,
'2006-02-09');UPDATE employee

SET branch_id = 1

WHERE emp_id = 100;INSERT INTO employee VALUES(101, 'Jan', 'Levinson',


'1961-05-11', 'F', 110000, 100, 1);

[STEP 2] Insert data of “Scranton” branch.

2017 © M
️ ike Dane

INSERT INTO employee VALUES(102, 'Michael', 'Scott', '1964-03-15', 'M',


75000, 100, NULL);INSERT INTO branch VALUES(2, 'Scranton', 102, '1992-
04-06');UPDATE employee

SET branch_id = 2

WHERE emp_id = 102;INSERT INTO employee VALUES(103, 'Angela', 'Martin',


'1971-06-25', 'F', 63000, 102, 2);

INSERT INTO employee VALUES(104, 'Kelly', 'Kapoor', '1980-02-05', 'F',


55000, 102, 2);

INSERT INTO employee VALUES(105, 'Stanley', 'Hudson', '1958-02-19', 'M',


69000, 102, 2);

[STEP 3] Insert data of “Stamford” branch.


2017 © M
️ ike Dane

INSERT INTO employee VALUES(106, 'Josh', 'Porter', '1969-09-05', 'M',


78000, 100, NULL);INSERT INTO branch VALUES(3, 'Stamford', 106, '1998-
02-13');UPDATE employee

SET branch_id = 3

WHERE emp_id = 106;INSERT INTO employee VALUES(107, 'Andy', 'Bernard',


'1973-07-22', 'M', 65000, 106, 3);

INSERT INTO employee VALUES(108, 'Jim', 'Halpert', '1978-10-01', 'M',


71000, 106, 3);

[STEP 4] Insert data to the “branch supplier” table.

2017 © M
️ ike Dane

INSERT INTO branch_supplier VALUES(2, 'Hammer Mill', 'Paper');

INSERT INTO branch_supplier VALUES(2, 'Uni-ball', 'Writing Utensils');

INSERT INTO branch_supplier VALUES(3, 'Patriot Paper', 'Paper');

INSERT INTO branch_supplier VALUES(2, 'J.T. Forms & Labels', 'Custom


Forms');

INSERT INTO branch_supplier VALUES(3, 'Uni-ball', 'Writing Utensils');

INSERT INTO branch_supplier VALUES(3, 'Hammer Mill', 'Paper');

INSERT INTO branch_supplier VALUES(3, 'Stamford Lables', 'Custom


Forms');

[STEP 5] Insert data to the “client” table.

2017 © M
️ ike Dane
INSERT INTO client VALUES(400, 'Dunmore Highschool', 2);

INSERT INTO client VALUES(401, 'Lackawana Country', 2);

INSERT INTO client VALUES(402, 'FedEx', 3);

INSERT INTO client VALUES(403, 'John Daly Law, LLC', 3);

INSERT INTO client VALUES(404, 'Scranton Whitepages', 2);

INSERT INTO client VALUES(405, 'Times Newspaper', 3);

INSERT INTO client VALUES(406, 'FedEx', 2);

[STEP 6] Insert data to the “works_with” table.

2017 © M
️ ike Dane

INSERT INTO works_with VALUES(105, 400, 55000);

INSERT INTO works_with VALUES(102, 401, 267000);

INSERT INTO works_with VALUES(108, 402, 22500);

INSERT INTO works_with VALUES(107, 403, 5000);

INSERT INTO works_with VALUES(108, 403, 12000);

INSERT INTO works_with VALUES(105, 404, 33000);

INSERT INTO works_with VALUES(107, 405, 26000);

INSERT INTO works_with VALUES(102, 406, 15000);

INSERT INTO works_with VALUES(105, 406, 130000);

[ 12. More Basic Queries (2:30:28) ]


12–1. Display different column titles.
SELECT first_name AS given_name, last_name AS surname

FROM employee;

12–2. Find out all branch IDs.

SELECT DISTINCT branch_id

FROM employee;

[ 13. Functions (2:36:25) ]


13–1. Find the number of employees with supervisors.

SELECT COUNT(super_id)

FROM employee;

13–2. Find the number of female employees born after


1970.

SELECT COUNT(emp_id)

FROM employee

WHERE sex = 'F' AND birth_day > '1970-01-01';

13–3. Find the average of all employees’ salaries.

SELECT AVG(salary)

FROM employee;

13–4. Find out how many males & females there are.
SELECT COUNT(sex), sex

FROM employee

GROUP BY sex;

13–5. Find the total sales of each sales person.

SELECT COUNT(total_sales), emp_id

FROM works_with

GROUP BY emp_id;

[ 14. Wildcards (2:45:15) ]

©️W3Schools

14–1. Find any client who are LLC.

SELECT *

FROM client

WHERE client_name LIKE '%LLC';

14–2. Find branch suppliers who are in the “label”


business.

SELECT *

FROM branch_supplier

WHERE supplier_name LIKE '% Label%';

14–3. Find any employee born in October.

The tutorial showed a way to find any employee born in October with the following query:

SELECT *

FROM employee

WHERE birth_day LIKE '____-10%';

However, I got the following response : Error Code : Incorrect DATE value:
‘____-10%’.

So, I tried the following query and worked!

SELECT *

FROM employee

WHERE MONTH(birth_day) IN(10);

[ 15. Union (2:53:55) ]

Ex) Find a list of all clients & branch suppliers’ names.

Clients : ~ FedEx | Suppliers : Hammer Mill ~

SELECT client_name AS clients_and_suppliers, client.branch_id

FROM client

UNION

SELECT supplier_name, branch_supplier.branch_id

FROM branch_supplier;

[ 16. Joins (3:01:37) ]


Let’s add a branch : INSERT INTO branch VALUES(4, ‘Buffalo’, NULL, NULL);

16–1. Types of Joins

©️SQL Joins Explained

©️SQL Joins Explained

16–2. Inner Join


Find all branches & names of their managers.
SELECT employee.emp_id, employee.first_name, branch.branch_name

FROM employee

JOIN branch

ON employee.emp_id = branch.mgr_id;

16–3. Left Join

SELECT employee.emp_id, employee.first_name, branch.branch_name

FROM employee

LEFT JOIN branch

ON employee.emp_id = branch.mgr_id;

16–4. Right Join

SELECT employee.emp_id, employee.first_name, branch.branch_name

FROM employee

RIGHT JOIN branch

ON employee.emp_id = branch.mgr_id;

16–5. Full Join


MySQL lacks support for Full Outer Join. We can emulate it by combining Left Join
and Right Join with Union.
(SELECT employee.emp_id, employee.first_name, branch.branch_name

FROM employee

LEFT JOIN branch

ON employee.emp_id = branch.mgr_id)UNION(SELECT employee.emp_id,


employee.first_name, branch.branch_name

FROM employee

RIGHT JOIN branch

ON employee.emp_id = branch.mgr_id);

[ 17. Nested Queries (3:11:51)]

17–1. Find names of employees who sold over $50,000


to a single client.
# Step 1 : Get employee IDs that match the criteria.

SELECT works_with.emp_id

FROM works_with

WHERE works_with.total_sales > 30000;

# Step 2 : Get names of employees that match the criteria.

SELECT employee.first_name, employee.last_name

FROM employee

WHERE employee.emp_id IN(

SELECT works_with.emp_id

FROM works_with

WHERE works_with.total_sales > 30000

);
17–2. Find all clients handled by a branch that Michael
Scott manages when you know his ID.
# Step 1 : Find out the branch ID.

SELECT branch.branch_id

FROM branch

WHERE branch.mgr_id = 102;

# Step 2 : Get names of branches that matches the criteria.

SELECT client.client_name

FROM client

WHERE client.branch_id = (

SELECT branch.branch_id

FROM branch

WHERE branch.mgr_id = 102

LIMIT 1

);

[ 18. On Delete (3:21:53) ]

18–1. On Delete Set Null


ON DELETE SET NULL : “It specifies that the child data is set to NULL when
the parent data is deleted. The child data is NOT deleted.” (Tech on the Net)

Let’s delete Michael Scott(ID: 102)’s information. When we created the branch table,
we set mgr_id that referenced emp_id in the employee table as ON DELETE SET NULL.

CREATE TABLE branch (

branch_id INT PRIMARY KEY,

branch_name VARCHAR(40),

mgr_id INT,

mgr_start_date DATE,

FOREIGN KEY(mgr_id) REFERENCES employee(emp_id) ON DELETE SET NULL

);
DELETE FROM employee

WHERE emp_id = 102;SELECT * from branch;

> Data associated with mgr_id =102 is expressed as “Null”.

18–2. On Delete Cascade


ON DELETE CASCADE : “It specifies that the child data is deleted when the
parent data is deleted.” (Tech on the Net)

Let’s delete the Scranton branch(ID : #2)’s information. When we created the
branch_supplier table, we set branch_id that referenced branch_id in the branch table
as ON DELETE CASCADE.

CREATE TABLE branch_supplier (

branch_id INT,

supplier_name VARCHAR(40),

supply_type VARCHAR(40),

PRIMARY KEY(branch_id, supplier_name),

FOREIGN KEY(branch_id) REFERENCES branch(branch_id) ON DELETE CASCADE

);

DELETE FROM branch

WHERE branch_id = 2;SELECT * from branch_supplier;


> All data associated with branch_id = 2 are gone.

18–3. When to use “On Delete Set Null” and “On Delete
Cascade”

For the branch table, we used “ON DELETE SET NULL". It was okay to do that, because
the mgr_id in the branch table is just a foreign key. It’s not a primary key, which means
that mgr_id is not essential for the branch table.

However, in the branch_supplier table, the branch_id is a foreign key and one of primary
keys. That means that branch_id is crucial for the branch_supplier table. Because a
primary key can NOT have a null value, we should delete data when associated
branch_id is deleted.

[ 19. Triggers (3:30:05) ]


Let’s create a table called “trigger_test”.

CREATE TABLE trigger_test(

message VARCHAR(100)

);

19–1. Insert a sentence to a table when a new employee


is added.
I entered the following code at MySQLWorkbench.
DELIMITER $

CREATE

TRIGGER my_trigger BEFORE INSERT

ON employee

FOR EACH ROW BEGIN

INSERT INTO trigger_test VALUES('added new employee');

END$

DELIMITER ;

We used “$” to start and end trigger commands.


Before anything gets inserted into the “employee” table, we’ll insert “added new
employee” into the “trigger_test” table for each item gets inserted in.
At the end, we changed the delimiter back to semicolon(;).

This worked for me. But, if you’re using ‘PopSQL’, this might not work. In that
case, enter the following code in terminal.

Type mysql -u root -p in terminal and enter your password.

> “tutorial” is the name of the database I created to follow this tutorial.

After that, enter the code block above in terminal.

Let’s add a new employee!

INSERT INTO employee

VALUES(109, 'Oscar', 'Martinez', '1980-03-20', 'M', 69000, 106, 3);

19–2. Insert an added value to a table when a new


employee is added.
DELIMITER $

CREATE

TRIGGER my_trigger2 BEFORE INSERT

ON employee

FOR EACH ROW BEGIN

INSERT INTO trigger_test VALUES(NEW.first_name);

END$

DELIMITER ;
Let’s add a new employee!

19–3. Insert a conditional statement to a table when a


new employee is added.
DELIMITER $

CREATE

TRIGGER my_trigger10 BEFORE INSERT

ON employee

FOR EACH ROW BEGIN

IF NEW.sex = 'M' THEN

INSERT INTO trigger_test2 VALUES('added male employee');

ELSEIF NEW.sex = 'F' THEN

INSERT INTO trigger_test2 VALUES('added female employee');

ELSE

INSERT INTO trigger_test2 VALUES('added other employee');

END IF;

END$

DELIMITER ;

Let’s add a new employee!

19–4. Drop a trigger.


DROP TRIGGER my_trigger6;

[ 20. Entity Relationship(ER) Diagram Info (3:42:15) ]


20–1. Entity
Entity : An object we want to model & store information about
2018 © M
️ ike Dane

20–2. Attributes
Attributes : Specific pieces of information about an entity

2018 © M
️ ike Dane

20–3. Primary Key


Primary Key : Attribute(s) that uniquely identify an entry in a database table

2018 © M
️ ike Dane

20–4. Composite Attribute


Composite Attribute : An attribute that can be broken up into sub-attributes
2018 © M
️ ike Dane

20–5. Multi-valued Attribute


Multi-valued Attribute : An attribute that can have more than one value

2018 © M
️ ike Dane

20–6. Derived Attribute


Derived Attribute : An attribute that can be derived from other attributes.

2018 © M
️ ike Dane

20–7. Multiple Entities


Multiple Entities : You can define more than one entity in a diagram

2018 © M
️ ike Dane

2018 © M
️ ike Dane

20–8. Relationships
Relationship : defines a relationship between two entities

Total Relationship : All members must participate in the relationship

2018 © M
️ ike Dane

20–9. Relationship Attribute


Relationship Attribute : An attribute about the relationship
2018 © M
️ ike Dane

20–10. Relationship Cardinality


Relationship Cardinality : The number of instances of an entity from a relationship
that can be associated with the relation

Types : 1 : 1, 1 : N, N : M

2018 © M
️ ike Dane

> N : M : Students can take multiple classes.

20–11. Weak Entity & Identifying Relationship


Weak Entity : An entity that can NOT be uniquely identified by its attributes alone

Identifying Relationship : A relationship that serves to uniquely identify the weak


entity. (* Must be N : M relationship cardinality)

2018 © M
️ ike Dane

20–12. Final Student ER Digram


2018 © M
️ ike Dane

20–13. ER Diagram Template

2018 © M
️ ike Dane

[ 21. Designing an ER Diagram (3:53:53) ]

21–1. Company Data Requirements


# Step 1

2018 ©️Mike Dane


The company is organized into branches. Each branch has a unique number, a name,
and a particular employee who manages it.

# Step 2

2018 ©️Mike Dane

The company makes it’s money by selling to clients. Each client has a name and a
unique number to identify it.

# Step 3

2018 ©️Mike Dane

The foundation of the company is it’s employees. Each employee has a name, birthday,
sex, salary and a unique number.

# Step 4

2018 ©️Mike Dane

An employee can work for one branch at a time.


1 : N : A branch can have any number of employees.
Total Participation : A branch must have employees working at the branch.

# Step 5

2018 ©️Mike Dane

Each branch will be managed by one of the employees that work there. We’ll also want to
keep track of when the current manager started as manager.

1 : 1 : A branch is managed by one employee.


Total Participation : All branches must be managed by an employee.
Partial Participation : Not all employees need to be a manager of a branch.

# Step 6

2018 ©️Mike Dane

An employee can act as a supervisor for other employees at the branch, an employee
may also act as the supervisor for employees at other branches. An employee can have at
most one supervisor.

# Step 7
2018 ©️Mike Dane

A branch may handle a number of clients, with each client having a name and a unique
number to identify it. A single client may only be handled by one branch at a time.

1 : N : A branch can have any number of clients.


Partial Participation : Not all branches need to have a client.
Total Participation : A client must be handled by a branch.

# Step 8

2018 ©️Mike Dane

Employees can work with clients controlled by their branch to sell them stuff. If necessary,
multiple employees can work with the same client. We’ll want to keep track of how many
dollars worth of stuff each employee sells to each client they work with.

N : M : A client can work with any number of employees and vice versa.
Partial Participation : Not all employees need to have a client.
Total Participation : A client must be handled by a employee.

# Step 9
2018 ©️Mike Dane

Many branches will need to work with suppliers to buy inventory. For each supplier we’ll
keep track of their name and the type of product they’re selling the branch. A single
supplier may supply products to multiple branches.

Weak Entity : An entity that can NOT be uniquely identified by its attributes alone
Identifying Relationship : A relationship that serves to uniquely identify the
weak entity. (* Must be N : M relationship cardinality)

21–2. Final Company ER Diagram

2017 © M
️ ike Dane

[ 22. Converting ER Diagrams to Schemas (4:08:34) ]

# Step 1 : Mapping of Regular Entity Types


2017 © M
️ ike Dane

For each regular entity type, create a relation(table) that includes all simple attributes of
that entity.

2018 ©️Mike Dane

# Step 2 : Mapping of Weak Entity Types

2018 ©️Mike Dane


For each weak entity type, create a relation(table) that includes all simple attributes of
the weak entity.

> The primary key of the new relation should be the partial key of the weak entity plus
the primary key of its owner.

2018 ©️Mike Dane

# Step 3 : Mapping of Binary 1 : 1 Relationship Types

2018 ©️Mike Dane

Include one side of the relationship as a foreign key in the other. Also, let’s favor total
participation.

2018 ©️Mike Dane

# Step 4 : Mapping of Binary 1:N Relationship Types


2018 ©️Mike Dane

Include one side’s primary key as a foreign key on the N side relation(table).

2018 ©️Mike Dane

# Step 5 : Mapping of Binary M:N Relationship Types

2018 ©️Mike Dane

Create a new relation(table), which a primary key is a combination of both entities’


primary keys. Also, let’s include any relationship attributes.
2018 ©️Mike Dane

# Final : Company Database Schema

2018 ©️Mike Dane

# Result
2017 © M
️ ike Dane

2017 © M
️ ike Dane

Thanks for reading! 🎵 If you like this blog post, please clap👏

You might also like