Relational Model
History and Basics, Constraints, SQL DDL
Relational Model
Inventor
Edgar Frank “Ted” Codd (1923–2003)
“A Relational Model of Data for Large Shared Data Banks” Communications of the ACM 13 (6): 377–387, June 1970
Relational Model
MusID | Name | HomePhone | DoB |
1224 | Tom Morello | 7577777777 | 30/05/1964 |
6719 | Zack de la Rocha | 8044444444 | 12/01/1970 |
2743 | Brad Wilk | 9199999999 | 05/09/1968 |
MUSICIAN
Relation (table)
Tuples (rows/records)
Attributes (columns/fields)
Attributes
Database Schema
Simple Relational Notation
Database Instance/State
r1_1 = { v1, v2, v3, …, vn }
r1_2 = { v1, v2, v3, …, vn }
…
rk_n = { v1, v2, v3, …, vn }
…
Database Instance/State
Constraints
Constraints
Model-based constraints
Keys
Integrity Constraints
Foreign Keys
Referential Integrity
Data Definition Language (DDL)
CREATE SCHEMA
CREATE or DROP TABLE
DROP TABLE IF EXISTS `elkadima`.`PERSON` ;
CREATE TABLE IF NOT EXISTS `elkadima`.`PERSON` (
`PersonID` INT NOT NULL,
`TEAM_TeamName` VARCHAR(45) NOT NULL,
`PersonType` INT NOT NULL);
PRIMARY KEY constraint
CREATE TABLE IF NOT EXISTS `elkadima`.`GAME` (
`VisitorTeam` VARCHAR(45) NOT NULL,
`HomeTeam` VARCHAR(45) NOT NULL,
`GameDateTime` DATETIME NOT NULL,
`VisitorGoals` INT NULL,
`HomeGoals` INT NULL,
PRIMARY KEY (`VisitorTeam`, `HomeTeam`, `GameDateTime`));
FOREIGN KEY constraints
CREATE TABLE IF NOT EXISTS `elkadima`.`GAME` (
`VisitorTeam` VARCHAR(45) NOT NULL,
`HomeTeam` VARCHAR(45) NOT NULL,
`GameDateTime` DATETIME NOT NULL,
`VisitorGoals` INT NULL,
`HomeGoals` INT NULL,
PRIMARY KEY (`VisitorTeam`, `HomeTeam`, `GameDateTime`),
CONSTRAINT `fk_GAME_TEAM`
FOREIGN KEY (`HomeTeam`)
REFERENCES `elkadima`.`TEAM` (`TeamName`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_GAME_TEAM1`
FOREIGN KEY (`VisitorTeam`)
REFERENCES `elkadima`.`TEAM` (`TeamName`)
ON DELETE NO ACTION
ON UPDATE NO ACTION));
Foreign key constraints
CHECK constraints
CREATE TABLE t1
(
CHECK (c1 <> c2),
c1 INT CHECK (c1 > 10),
c2 INT CONSTRAINT c2_positive CHECK (c2 > 0),
c3 INT CHECK (c3 < 100),
CONSTRAINT c1_nonzero CHECK (c1 <> 0),
CHECK (c1 > c3)
);
ALTER TABLE
alter table CO_DEPENDENT
drop foreign key `fk_DEPENDENT_EMPLOYEE1`;
alter table CO_DEPENDENT
add CONSTRAINT `fk_DEPENDENT_EMPLOYEE1`
FOREIGN KEY (`ESSN`)
REFERENCES `EmployeeDB`.`CO_EMPLOYEE` (`SSN`)
ON DELETE CASCADE
ON UPDATE NO ACTION;
Issues with constraints