Slide 1

Slide 1 text

Databases Getting Started with Data

Slide 2

Slide 2 text

•Community Engineer at Engine Yard •Author of Zend PHP 5 Certification Study Guide, Sitepoints PHP Anthology: 101 Essential Tips, Tricks & Hacks & PHP Master: Write Cutting Edge Code •A contributor to Zend Framework, phpdoc, FRAPI and PHP internals •@dshafik Davey Shafik

Slide 3

Slide 3 text

About These Slides

Slide 4

Slide 4 text

About These Slides • Two slides per “slide” • Title Slide (for when I’m talking) • Details slide (for later) • Nobody likes it when you can read the slide just as well as the speaker can • I like slides that are useful 4

Slide 5

Slide 5 text

What is a Database?

Slide 6

Slide 6 text

What is a Database? A database is an organized collection of data. The data is typically organized to model relevant aspects of reality, in a way that supports processes requiring this information. “ ” Source: Wikipedia (Emphasis Mine)

Slide 7

Slide 7 text

Types of Database

Slide 8

Slide 8 text

SQL (Relational)

Slide 9

Slide 9 text

SQL (Relational) • Highly Structured Data • Using Tables, Columns and Rows • One or more relationships exist between datas • Constraints • Primary Keys (a unique row identifier) • Unique Keys (one or more columns that must have unique values, either individually, or as a group) • Foreign Keys (a column value that must be derived from a column value in another table) • Indexes • A lookup for one, or multiple columns aggregate data 9

Slide 10

Slide 10 text

NoSQL (Document/Key-Value/Graph)

Slide 11

Slide 11 text

NoSQL (Document/Key-Value/Graph) • Sometimes called “Not Only SQL” because some NoSQL DBs have a SQL-like query language • Not always non-relational • Always unstructured • Intended to provide higher scalability and higher availability • Looser consistency models 11

Slide 12

Slide 12 text

Non-Relational Document Stores / Key-Value Stores

Slide 13

Slide 13 text

NoSQL (Document/Key-Value/Graph) • NoSQL is non-relational • Document Stores • Centers around the concept of a document, and it’s related meta-data • Collections of documents • Hierarchies of documents • Examples: Couchbase Server, CouchDB, MongoDB, Amazon SimpleDB, Oracle NoSQL DB • Key-Value Stores • Data stored and accessible directly by a unique key • Examples: Memcache, MongoDB, Couchbase Server, Cassandra, Riak, Amazon DynamoDB, Redis, Oracle NoSQL DB 13

Slide 14

Slide 14 text

Relational Graph Databases

Slide 15

Slide 15 text

NoSQL (Document/Key-Value/Graph) • NoSQL is relational (say what?!) • Graph Databases • All data is related to N other data • Relationships are in the data, not indexes • Examples: OQGraph for MySQL • Example Implementation: Facebook’s Graph API 15

Slide 16

Slide 16 text

Relational Concepts

Slide 17

Slide 17 text

Relational Concepts • Schema • Tables • Indexes • Relationships • Stored Procedures • Triggers 17

Slide 18

Slide 18 text

A Note about MySQL

Slide 19

Slide 19 text

A Note on MySQL • MySQL supports multiple drivers (called engines) for it’s tables. • These engine provide different features. • The two most common are InnoDB (default since MySQL 5.5) and MyISAM (previously the default). • InnoDB has far more features, and is recommended for almost all situations • We will assume InnoDB for all MySQL examples 19

Slide 20

Slide 20 text

Data Types

Slide 21

Slide 21 text

Name What Notes int exact whole numbers Signed or unsigned decimal exact decimal numbers (fixed length) Signed or unsigned float approximate decimal number (variable length) Signed or unsigned char strings (fixed length) Max size: 255 bytes varchar strings (variable length) Max size: 255 bytes text strings (variable length) Max size: 255 bytes - 4GB blob binary strings (variable length) Max size: 255 Bytes - 4GB date dates (no time) Any date is valid datetime dates (with time) Any date/time is valid timestamp timestamp UNIX timestamp, must be > 1/1/1970 NULL Null values Does not equal anything, even NULL

Slide 22

Slide 22 text

Exercise One Create a Users Table

Slide 23

Slide 23 text

Exercise One: Users Table • Unique Identifier • Username • Password • Email Address • Name or First Name/Last Name 23 Consider: • Column Names • Column Types • Column Lengths

Slide 24

Slide 24 text

Exercise One: Users Table 24 Users Users id int username varchar(20) password varchar(60) email varchar(150) first_name varchar(45) last_name varchar(55)

Slide 25

Slide 25 text

Exercise One: Users Table (Schema) CREATE TABLE users ( id INT, username VARCHAR(20), password VARCHAR(60), email VARCHAR(150), first_name VARCHAR(45), last_name VARCHAR(55) );

Slide 26

Slide 26 text

SQL Structured Query Language

Slide 27

Slide 27 text

SQL • INSERT — Create Data • UPDATE — Update Existing Data • SELECT — Fetch Data • DELETE — Delete Data 27 Four Main Queries

Slide 28

Slide 28 text

CRUD Also Known As:

Slide 29

Slide 29 text

CRUD 29 Create INSERT R etrieve SELECT Update UPDATE Delete DELETE

Slide 30

Slide 30 text

Conditions

Slide 31

Slide 31 text

Conditions • Used with: • SELECT • UDPATE • DELETE • JOINs • Preceded by the WHERE, ON, or USING keyword 31

Slide 32

Slide 32 text

Operators 32 Operator = Equality <>, != Inequality < Less Than <= Less Than or Equal To > Greater Than >= Greater Than or Equal To IS NULL NULL Equality IS NOT NULL NULL Inequality AND Boolean AND OR Boolean OR BETWEEN Range Equality

Slide 33

Slide 33 text

INSERT

Slide 34

Slide 34 text

INSERT INSERT INTO table name ( list, of, columns ) VALUES ( "list", "of", "values" ); 34

Slide 35

Slide 35 text

INSERT INSERT INTO users ( id, username, password, email, first_name, last_name ) VALUES ( 1, "dshafik", "$2y$10$Ol/KS4/Bhs5ENUh7OpIDL.Gs1SIWDG.rPaBkPAjjQ2UTITI60YDmG ", "[email protected]", "Davey", "Shafik" ); 35

Slide 36

Slide 36 text

UPDATE

Slide 37

Slide 37 text

UPDATE UPDATE table name SET column = "some", name = "value" WHERE some condition;

Slide 38

Slide 38 text

WARNING: Don’t forget your conditions! Otherwise you update every row in the table!

Slide 39

Slide 39 text

UPDATE UPDATE users SET username = "davey", email = "[email protected]" WHERE id = 1;

Slide 40

Slide 40 text

SELECT

Slide 41

Slide 41 text

SELECT SELECT list, of, columns FROM table WHERE column = "some" AND name = "value" OR other_column = "other value" ORDER BY some, columns LIMIT start, end;

Slide 42

Slide 42 text

SELECT SELECT  * FROM  users WHERE  username  =  "davey"  AND  password  =  "$2y$10$Ol..." LIMIT  1;

Slide 43

Slide 43 text

SELECT SELECT first_name, last_name, email FROM users ORDER BY first_name, last_name LIMIT 0, 10;

Slide 44

Slide 44 text

SELECT SELECT first_name, last_name, email FROM users ORDER BY first_name, last_name LIMIT 10, 20;

Slide 45

Slide 45 text

DELETE

Slide 46

Slide 46 text

DELETE DELETE FROM table WHERE column = "some" AND name = "value" OR other_column = "other value" ORDER BY some, columns LIMIT number;

Slide 47

Slide 47 text

DELETE DELETE FROM users;

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

DELETE DELETE FROM users WHERE id = 1;

Slide 50

Slide 50 text

Constraints

Slide 51

Slide 51 text

Constraints: Users Table • IDs should be unique • Usernames should be unique • Passwords should not be unique • Email Address should be unique • First Name should not be unique • Last Name should not be unique • All column should not be NULL 51

Slide 52

Slide 52 text

Constraints: Users Table 52 Users Users Constraints id int unique, not null username varchar(20) unique, not null password varchar(60) not null email varchar(150) unique, not null first_name varchar(45) not null last_name varchar(55) not null

Slide 53

Slide 53 text

Constraints: Users Table Schema CREATE TABLE users ( id INT NOT NULL, username VARCHAR(20) NOT NULL, password VARCHAR(60) NOT NULL, email VARCHAR(150) NOT NULL, first_name VARCHAR(45) NOT NULL, last_name VARCHAR(55) NOT NULL, UNIQUE INDEX id_UNIQUE (id), UNIQUE INDEX username_UNIQUE (username), UNIQUE INDEX email_UNIQUE (email) );

Slide 54

Slide 54 text

Features

Slide 55

Slide 55 text

Name What Notes Auto Increment (auto_increment) Automatically inserts the (last row)+1 value when inserting • Column must be set as PRIMARY KEY • One Per Table Signed/Unsigned Sets Numeric columns to signed (may be positive or negative) or unsigned (must be positive) Unsigned numbers start at 0 and allow for much larger numbers. Zero Fill (zerofill) Left Pads numeric values to the column size Only applied on retrieval (i.e. it’s not stored this way)

Slide 56

Slide 56 text

Features: Users Table •ID should be auto increment •ID should be the Primary Key •ID should be unsigned 56

Slide 57

Slide 57 text

Features: Users Table Schema CREATE TABLE users ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(20) NOT NULL, password VARCHAR(60) NOT NULL, email VARCHAR(150) NOT NULL, first_name VARCHAR(45) NOT NULL, last_name VARCHAR(55) NOT NULL, UNIQUE INDEX username_UNIQUE (username), UNIQUE INDEX email_UNIQUE (email), PRIMARY KEY (id) );

Slide 58

Slide 58 text

Indexes

Slide 59

Slide 59 text

Indexes 59 Name Constraints Notes Index None May have NULL values Unique Unique May have NULL values Primary Key Unique Must NOT have NULL values. May auto_increment. There can only be one. Foreign Key Must match data in linked table May have NULL values

Slide 60

Slide 60 text

INDEX, UNIQUE, & PRIMARY KEY

Slide 61

Slide 61 text

INDEX, UNIQUE, & PRIMARY KEY • Can be added during table creation: • CREATE TABLE foo ( column_name TYPE, INDEX name (column, list), UNIQUE name (column, list), PRIMARY KEY (column) ); • Index/Unique can have multiple columns • Can be added after table creation: • CREATE INDEX name ON table_name (column, list); ALTER TABLE table name ADD INDEX (column, list); CREATE UNIQUE INDEX name ON table (column, list); ALTER TABLE table name ADD UNIQUE (column, list); ALTER TABLE table name ADD PRIMARY KEY (column); • Must be added with caution! 61

Slide 62

Slide 62 text

Foreign Keys

Slide 63

Slide 63 text

Foreign Keys • Used to create inter-table relationships • Value must be in the foreign table or NULL • Can update when the foreign table updates • Can delete when the foreign table deletes • Can be set to NULL when the foreign table deletes 63

Slide 64

Slide 64 text

Exercise Two Profiles & Foreign Keys

Slide 65

Slide 65 text

Exercise Two: Profiles Table • Unique Identifier • Short Introductory Summary • Full Biography • Location 65 Consider: • Must link to the Users table • One Profile per User

Slide 66

Slide 66 text

Exercise Two: Profiles Table Profiles Profiles Constraints id int UNSIGNED primary key, auto_increment, not null users_id int UNSIGNED unique, foreign key -> users.id, not null summary varchar(200) none bio TEXT none location varchar(100) none

Slide 67

Slide 67 text

Exercise Two: Profiles Table Schema CREATE TABLE profiles ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, users_id INT UNSIGNED NOT NULL, summary VARCHAR(200) NOT NULL, bio TEXT NULL, location VARCHAR(150) NULL, PRIMARY KEY (id), UNIQUE INDEX users_id_UNIQUE (users_id), CONSTRAINT FOREIGN KEY (users_id) REFERENCES users (id) ON DELETE CASCADE );

Slide 68

Slide 68 text

INSERT INSERT INTO profiles ( users_id, summary, bio, location ) VALUES ( 1, "Community Engineer at Engine Yard", NULL, "Florida, USA" );

Slide 69

Slide 69 text

Indexing Your Data

Slide 70

Slide 70 text

No content

Slide 71

Slide 71 text

Indexing Your Data • Indexes make writes slower, and reads (much faster). The more indexes, the slower your writes. • The creation of indexes should be determined by the SELECT queries being run upon the data. Nothing else. • For example, if you run a query that SELECTs using two WHERE criteria with an AND condition, that is probably a good combination index. • MySQL can only use one index [per table] at a time and will (generally) pick the best option based on the query • Indexes cannot be used with LIKE if starting with a wildcard (e.g. %foo%) 71

Slide 72

Slide 72 text

Exercise Three Indexes

Slide 73

Slide 73 text

Exercise Three: Indexes • Add Indexes to the users table • Remember we already have a PRIMARY KEY and UNIQUE indexes • Example queries we will perform against it: 73 SELECT  *  FROM  users WHERE  username  =  "davey"  AND  password  =  "$2y$10$Ol..."; SELECT  *  FROM  users   WHERE  email  =  "[email protected]"; SELECT  *  FROM  users      WHERE  first_name  LIKE  "%Dave%";

Slide 74

Slide 74 text

Exercise Three: Indexes 74 Users Users Key Type id PRIMARY KEY username UNIQUE username, password UNIQUE email UNIQUE

Slide 75

Slide 75 text

JOINs Connecting Tables

Slide 76

Slide 76 text

JOINs • Used to JOIN multiple tables • INNER JOIN • LEFT or RIGHT OUTER JOIN 76

Slide 77

Slide 77 text

INNER JOIN Get the intersection of two tables Users Profiles Users with Profiles

Slide 78

Slide 78 text

OUTER JOIN For when one side or the other doesn’t match

Slide 79

Slide 79 text

LEFT OUTER JOIN For when one side or the other doesn’t match Users Users with Profiles Profiles

Slide 80

Slide 80 text

RIGHT OUTER JOIN Users Profiles with Users Profiles

Slide 81

Slide 81 text

SELECT... INNER JOIN SELECT * FROM users INNER JOIN profiles ON ( profiles.user_id = users.id ) WHERE profiles.location LIKE '%Dallas%' ORDER BY users.first_name, users.last_name;

Slide 82

Slide 82 text

SELECT... LEFT OUTER JOIN SELECT * FROM users LEFT OUTER JOIN profiles ON ( profiles.user_id = users.id ) WHERE users.id = 1;

Slide 83

Slide 83 text

SELECT... RIGHT OUTER JOIN SELECT * FROM users RIGHT OUTER JOIN profiles ON ( profiles.user_id = users.id ) WHERE profiles.bio LIKE '%PHP%';

Slide 84

Slide 84 text

Databases and PHP

Slide 85

Slide 85 text

Connecting to Databases Using PDO

Slide 86

Slide 86 text

Connecting to Databases • PDO • MySQL • PostgreSQL • MSSQL • Oracle • SQLite • ODBC and DB2 • Firebird • DSN — Data Source Name • Driver Name • Hostname & Port • or • Unix Socket • Username 86

Slide 87

Slide 87 text

Connecting to MySQL

Slide 88

Slide 88 text

Querying Data

Slide 89

Slide 89 text

Executing Queries prepare( "SELECT * FROM user WHERE id = :id" ); $conditions = array( ':id' => 1 ); $result = $query->execute($conditions); ?>

Slide 90

Slide 90 text

Handling Results

Slide 91

Slide 91 text

Handling Results execute($conditions); if ($result) {    echo  "Results  Found:  "  .$query-­‐>rowCount(); while ($row = $query->fetch()) { echo "" .$row['first_name']. ' ' . $row['last_name'] .''; } }

Slide 92

Slide 92 text

Handling Results as Objects execute($conditions); if ($result) { echo  "Results  Found:  "  .$query-­‐>rowCount(); while ($row = $query->fetchObject()) { echo "" .$row->first_name. ' ' . $row->last_name .''; } }

Slide 93

Slide 93 text

Handling Results as Custom Objects class User { function getName() { return $this->first_name . ' ' . $this->last_name; } } if ($result) { echo  "Results  Found:  "  .$query-­‐>rowCount(); while ($row = $query->fetchObject("User")) { echo "" .$row->getName(). ''; } }

Slide 94

Slide 94 text

Thank You Feedback: http://joind.in/8703 Twitter: @dshafik Email: [email protected] Slides: http://daveyshafik.com/slides