Creating Tables 1
Download
Report
Transcript Creating Tables 1
Creating Database
Tables
CS 320
Review: Levels of data models
Conceptual: describes WHAT data the
system contains
2. Logical: describes HOW the database will
be structured, regardless of the DBMS
3. Physical: describes HOW the database will
be implemented using a specific DBMS
1.
Required Software
MySQL DBMS
MySQL Workbench SQL editor (or another
command-line SQL query editor)
Review: Web/Database Architecture
2. Request for Web page
that requires database data
1. Request for Web page that
requires database data
Network
5. Web page HTML file
containing database data
downloaded to client
Web server
3. Runs a program
that makes a data
request
4. Data
response
Database server
6. Web page HTML file
downloaded to client
Web browser
MySQL Workbench Architecture
2. SQL command
1. SQL command
Network
3. Response (error
or confirmation)
Database server
4. Response (error
or confirmation)
Client running
Workbench
Workbench uses:
Running
commands to create tables (only way)
Testing queries to use in PHP pages (later)
MySQL Database Structure
A MySQL database consists of multiple user
accounts
Also called database schemas
MySQL databases in general:
A user account can contains different
databases
UWEC MySQL database:
In our configuration, you can't create new
databases
All of your tables are in the same database
MySQL Database Structure
UWEC MySQL database:
In our configuration, you can't create new databases
All of your tables are in the same database
Issues?
All tables must have a unique name
For your projects, you'll use a group database
account
SQL Command Types
Data Definition Language (DDL)
Used to create and modify database objects
Data Manipulation Language (DML)
Used to insert, update, delete, and view the
data in database objects
DDL Commands
Used to create and modify database
objects
CREATE
ALTER
DROP
DDL commands execute as soon as
they are issued, and do not need to be
explicitly saved
Creating a New Database
CREATE DATABASE database_name
- General syntax
CREATE DATABASE candy
- Specific example
**You won't do this with the UWEC MySQL database
Specifying Which Database to
Use For Creating Tables
USE database_name
USE candy
You'll need to specify to USE your database:
USE morrisjp;
Creating a Database Table
CREATE TABLE table_name
(field1_name datatype size,
field2_name datatype size,
…)
CREATE TABLE candy_product
(prod_id BIGINT,
prod_desc VARCHAR(30),
prod_cost DECIMAL(5,2),
prod_price DECIMAL(5,2))
General Notes on SQL
Commands
Not case-sensitive
Can span multiple lines in a text editor
To run multiple statements in the editor
window, separate each statement with ;
To "comment out" (not execute) a
statement, enclose it in /* … */
Naming Tables and Fields
Database table and field name rules
1 to 64 characters long
Can contain letters, numbers, or underscores
Can't contain certain characters (/ \ ,) or characters not
permitted in file names
Every table in your database must have a unique
name
Every field in a table must have a unique name
Good* Table Naming Practices
Name every table using a combination of 2
words, separated by an underscore
This approach avoids using reserved words
Use the same descriptive first word for all tables
in a related database
*Required in this class
Good* Field Naming Practices
Name every field using a
combination of 2 words, with
the first word indicating the
table name
Avoids
creating homonyms
What about foreign keys?
Use
the name that is in the
parent table
*Required in this class
Database Field Data Types
Specify:
Type
of data the field stores
Maximum data size
Purpose:
Specify
internal encoding
Optimize internal storage use
Provide error checking
Main Data Types
Text data types
CHAR
VARCHAR
Number data types
Integers:
INT and variations
Floating point numbers: DECIMAL, FLOAT
Dates & times
DATE,
TIME, and variations
CHAR Data Type
For fixed-width character fields (1-255
characters)
Fields
in which you know the exact number of
characters
Pads out the remaining characters with blank
spaces
Removes the trailing blank spaces when data is
retrieved
fieldname CHAR(size)
cust_type CHAR(1)
VARCHAR Data Type
For variable-width character fields (1-255
characters)
Number
of characters varies for individual
data values
Values are not padded with blank spaces
fieldname VARCHAR(maxsize)
cust_name VARCHAR(30)
MySQL Number Data Types:
Integers
TINYINT
SMALLINT
Signed: -32768 to 32767
Unsigned: 0 to 65535
INT
Signed: -128 to 127
Unsigned: 0 to 255
Signed: -2147483648 to 2147483647
Unsigned: 0 to 4294967295
BIGINT
Signed: -9223372036854775808 to 9223372036854775807
Unsigned: 0 to 18446744073709551615
Integer Data Type Usage
Choose the "smallest" integer type
(SMALLINT, INT, BIGINT) that is big
enough to hold the largest possible value
Question: Why not just always use
BIGINT?
Integer Data Type Examples
fieldname integer_data_type
prod_id TINYINT
cust_id INT
purch_id BIGINT
MySQL Numeric Data Types:
Floating Point Numbers
For values that have a decimal portion
DOUBLE or FLOAT:
very large or very small values
that have an indeterminate number of decimal places
DOUBLE: takes more space, but is extremely accurate (15 decimal
places)
FLOAT: takes less space, use when extreme accuracy isn't
required
DECIMAL: for values that have a predetermined
number of decimal places
Floating Point Examples
fieldname FLOAT
fieldname DOUBLE
fieldname DECIMAL(precision, scale)
pounds FLOAT
prod_cost DECIMAL(5,2)
Why not just omit the precision and scale? It defaults to the
Maximum allowed by your hardware…
Think critically:
Why not just declare all numeric values
using the DOUBLE data type? That will
take care of all cases.
This doesn't make use of error checking
This doesn't optimize use of data storage
capacity
Character and Numeric Data Type
Usage
Numeric
Surrogate keys (primary key ID values)
All numeric data you might use in a calculation
(prices, quantities, etc.)
Character: Use an appropriate character data type for
all fields that are not numbers or dates
Names, addresses, etc.
Postal codes, telephone numbers, social security
numbers
MySQL Date and Time Data Types
DATE
Dates
ranging from 1000-01-01 to 9999-12-31
Display in the format YYYY-MM-DD
TIME
Times
ranging from is -838:59:59 to 838:59:59
Can also be used to represent elapsed time intervals
Display
in the format HH:MI:SS
MySQL Date and Time Data Types
(continued)
DATETIME
Used
to store both a date and time
component ranging from 1000-01-01 00:00:00 to
9999-12-31 23:59:59
Displays in the format YYYY-MM-DD HH:MI:SS
YEAR
Can
store either a 2-digit or 4-digit year
4-digit range: 1901 to 2155
2-digit
range: 70 to 69 (1970 – 2069)
Review: Creating a Database
Table
CREATE TABLE table_name
(field1_name datatype size,
field2_name datatype size,
…)
CREATE TABLE candy_purchase(
purch_id INT,
prod_id INT,
cust_id INT,
purch_date DATE,
purch_delivery_date DATE,
purch_pounds FLOAT,
purch_status VARCHAR(10))
Scripts
Text files that contain a series of SQL commands
Each command separated by ;
Purpose:
Write a series of commands and then execute them all at once
Create all tables in a database
Insert a set of test records into the tables
Issue with a script that creates all of the tables in a database:
You can't create two tables with the same name in the same
database
In a script file, you always need to (try to) DROP all tables first
before you create them
Dropping a Database Table
DROP TABLE table_name
DROP TABLE IF EXISTS table_name
Use IF EXISTS in a script to avoid error
messages
Example DROP TABLE
Commands in a Script
/*commands
DROP TABLE
DROP TABLE
DROP TABLE
DROP TABLE
to
IF
IF
IF
IF
drop all tables */
EXISTS candy_purchase;
EXISTS candy_customer;
EXISTS candy_cust_type;
EXISTS candy_product;
/*commands to create tables */
CREATE TABLE candy_cust_type (…
Creating Tables in the MySQL
Visual Environment
Generates the SQL command to create
the table
Doesn't save the command or generate a
script
Test Yourself: What data type declaration
would you use to create a database field
that stores part descriptions
(DESCRIPTION) in the Premiere Products
PART table?
a.
b.
c.
d.
e.
VARCHAR(30)
CHAR(30)
VARCHAR(10)
CHAR(10)
None of the above
Test Yourself: What data type would you
use to create a database field that stores
part quantities on hand (ON_HAND) in the
Premiere Products PARTS table?
a.
b.
c.
d.
e.
INT
SMALLINT
BIGINT
DECIMAL
Either a or b
ON_HAND
50
45
32
21
8
12
22
12
8
9
Test Yourself: What data type declaration
would you use to create a database field
that stores part prices (PRICE) in the
Premiere Products PARTS table?
a.
b.
c.
d.
e.
VARCHAR(10)
DECIMAL(4,2)
DECIMAL(5,2)
DOUBLE
None of the above
PRICE
$24.95
$794.95
$165.00
$129.95
$495.00
$399.99
$159.95
$349.95
$595.00
$1390.00
Test Yourself: What data type would
you use to store ZIP code (ZIP) values
in the Premiere Products REP table?
a.
b.
c.
d.
e.
CHAR(5)
TINYINT
DECIMAL(5,0)
VARCHAR(10)
None of the above
ZIP
33321
33553
33336