Download - Courses - University of California, Berkeley

Document related concepts

Microsoft SQL Server wikipedia , lookup

SQL wikipedia , lookup

Open Database Connectivity wikipedia , lookup

Entity–attribute–value model wikipedia , lookup

Microsoft Jet Database Engine wikipedia , lookup

Database wikipedia , lookup

Clusterpoint wikipedia , lookup

Extensible Storage Engine wikipedia , lookup

Relational model wikipedia , lookup

Database model wikipedia , lookup

Transcript
Physical Database Design
University of California, Berkeley
School of Information
I 257: Database Management
IS 257 – Fall 2014
2014-09-30 SLIDE 1
Lecture Outline
• Review
–Introduction to SQL
–SQLite
• Physical Database Design
• Access Methods
IS 257 – Fall 2014
2014-09-30 SLIDE 2
Lecture Outline
• Review
–Introduction to SQL
–SQLite
• Physical Database Design
• Access Methods
IS 257 – Fall 2014
2014-09-30 SLIDE 3
SQL - History
• Structured Query Language
• SEQUEL from IBM San Jose
• ANSI 1992 Standard is the version used
by most DBMS today (SQL92)
• Basic language is standardized across
relational DBMSs. Each system may have
proprietary extensions to standard.
IS 257 – Fall 2014
2014-09-30 SLIDE 4
SQL Uses
• Database Definition and Querying
– Can be used as an interactive query language
– Can be imbedded in programs
• Relational Calculus combines Select,
Project and Join operations in a single
command: SELECT
IS 257 – Fall 2014
2014-09-30 SLIDE 5
SELECT
• Syntax:
– SELECT [DISTINCT] attr1, attr2,…, attr3
FROM rel1 r1, rel2 r2,… rel3 r3 WHERE
condition1 {AND | OR} condition2 ORDER
BY attr1 [DESC], attr3 [DESC]
IS 257 – Fall 2014
2014-09-30 SLIDE 6
SELECT
• Syntax:
– SELECT a.author, b.title FROM authors a,
bibfile b, au_bib c WHERE a.AU_ID =
c.AU_ID and c.accno = b.accno ORDER BY
a.author ;
• Examples in Access...
IS 257 – Fall 2014
2014-09-30 SLIDE 7
SELECT Conditions
•
•
•
•
•
•
= equal to a particular value
>= greater than or equal to a particular value
> greater than a particular value
<= less than or equal to a particular value
<> not equal to a particular value
LIKE “*term*” (may be other wild cards in other
systems)
• IN (“opt1”, “opt2”,…,”optn”)
• BETWEEN val1 AND val2
• IS NULL
IS 257 – Fall 2014
2014-09-30 SLIDE 8
Using an Aggregate Function
• SELECT DIVECUST.Name, Sum([Price]*[qty]) AS Total
FROM (DIVECUST INNER JOIN DIVEORDS ON
DIVECUST.[Customer No] = DIVEORDS.[Customer No])
INNER JOIN DIVEITEM ON DIVEORDS.[Order No] =
DIVEITEM.[Order No]
GROUP BY DIVECUST.Name
HAVING (((DIVECUST.Name) Like "*Jazdzewski"));
IS 257 – Fall 2014
2014-09-30 SLIDE 9
Sorting
• SELECT BIOLIFE.[Common Name],
BIOLIFE.[Length (cm)]
FROM BIOLIFE
ORDER BY BIOLIFE.[Length (cm)] DESC;
Note: the square brackets are not part of the standard,
But are used in Access for names with embedded blanks
IS 257 – Fall 2014
2014-09-30 SLIDE 10
Subqueries
• SELECT SITES.[Site Name],
SITES.[Destination no]
FROM SITES
WHERE sites.[Destination no] IN
(SELECT [Destination no] from DEST
where [avg temp (f)] >= 78);
• Can be used as a form of JOIN.
IS 257 – Fall 2014
2014-09-30 SLIDE 11
Aggregate Functions
•
•
•
•
•
•
Count
Avg
SUM
MAX
MIN
Others may be available in different
systems
IS 257 – Fall 2014
2014-09-30 SLIDE 12
Using Aggregate functions
• SELECT attr1, Sum(attr2) AS name
FROM tab1, tab2 ...
GROUP BY attr1, attr3 HAVING condition;
IS 257 – Fall 2014
2014-09-30 SLIDE 13
GROUP BY
• SELECT DEST.[Destination Name],
Count(*) AS Expr1
FROM DEST INNER JOIN DIVEORDS
ON DEST.[Destination Name] =
DIVEORDS.Destination
GROUP BY DEST.[Destination Name]
HAVING ((Count(*))>1);
• Provides a list of Destinations with the
number of orders going to that destination
IS 257 – Fall 2014
2014-09-30 SLIDE 14
SQL Commands
• Data Definition Statements
– For creation of relations/tables…
IS 257 – Fall 2014
2014-09-30 SLIDE 15
Create Table
• CREATE TABLE table-name (attr1 attrtype PRIMARY KEY, attr2 attrtype,…,attrN attr-type);
• Adds a new table with the specified
attributes (and types) to the database.
IS 257 – Fall 2014
2014-09-30 SLIDE 16
INSERT
• INSERT INTO table-name (col1, col2,
col3, …, colN) VALUES (val1, val2,
val3,…, valN);
• INSERT INTO table-name (col1, col2,
col3, …, colN) SELECT…
• Column list is optional, if omitted assumes
all columns in table definition and order
IS 257 – Fall 2014
2014-09-30 SLIDE 17
Creating a new table from existing tables
• Access and PostgreSQL Syntax:
SELECT [DISTINCT] attr1, attr2,…, attr3 INTO
newtablename FROM rel1 r1, rel2 r2,… rel3
r3 WHERE condition1 {AND | OR} condition2
ORDER BY attr1 [DESC], attr3 [DESC]
IS 257 – Fall 2014
2014-09-30 SLIDE 18
How to do it in MySQL
mysql> SELECT * FROM foo;
+---+
|n|
+---+
|1|
+---+
mysql> CREATE TABLE bar (m INT AUTO_INCREMENT PRIMARY
KEY) AS SELECT DISTINCT n FROM foo;
Query OK, 1 row affected (0.02 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM bar;
+------+---+
|m |n|
+------+---+
| 1 |1|
+------+---+
IS 257 – Fall 2014
2014-09-30 SLIDE 19
SQLite3
• Light-weight implementation of a relational
DBMS (~340Kb)
– Includes most of the features of full DBMS
– Intended to be imbedded in programs
• Available on iSchool servers and for other
machines as open source
• Used as the data manager in iPhone apps
and Firefox (among many others)
• Databases are stored as files in the OS
IS 257 – Fall 2014
2014-09-30 SLIDE 20
SQLite3 Data types
• SQLite uses a more general dynamic type
system. In SQLite, the datatype of a value
is associated with the value itself, not with
its container
• Types are:
– NULL: The value is a NULL value.
– INTEGER: The value is a signed integer, stored in 1, 2, 3, 4, 6, or 8
bytes depending on the magnitude of the value
– REAL: The value is a floating point value, stored as an 8-byte IEEE
floating point number.
– TEXT. The value is a text string, stored using the database encoding
(UTF-8, UTF-16BE or UTF-16LE). (default max 1,000,000,000 chars)
– BLOB. The value is a blob of data, stored exactly as it was input.
IS 257 – Fall 2014
2014-09-30 SLIDE 21
SQLite3 Command line
[dhcp137:~] ray% sqlite3 test.db
SQLite version 3.6.22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
sqlite> create table stuff (id int, name varchar(30),address varchar(50));
sqlite> .tables
stuff
sqlite> insert into stuff values (1,'Jane Smith',"123 east st.");
sqlite> select * from stuff;
1|Jane Smith|123 east st.
sqlite> insert into stuff values (2, 'Bob Jones', '234 west st.');
sqlite> insert into stuff values (3, 'John Smith', '567 North st.');
sqlite> update stuff set address = "546 North st." where id = 1;
sqlite> select * from stuff;
1|Jane Smith|546 North st.
2|Bob Jones|234 west st.
3|John Smith|567 North st.
IS 257 – Fall 2014
2014-09-30 SLIDE 22
Wildcard searching
sqlite> select * from stuff where name like '%Smith%';
1|Jane Smith|546 North st.
3|John Smith|567 North st.
sqlite> select * from stuff where name like 'J%Smith%';
1|Jane Smith|546 North st.
3|John Smith|567 North st.
sqlite> select * from stuff where name like 'Ja%Smith%';
1|Jane Smith|546 North st.
sqlite> select * from stuff where name like 'Jones';
sqlite> select * from stuff where name like '%Jones';
2|Bob Jones|234 west st.
sqlite> select name from stuff
...> ;
Jane Smith
Bob Jones
John Smith
sqlite>
IS 257 – Fall 2014
2014-09-30 SLIDE 23
Create backups
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE stuff (id int, name varchar(30),address varchar(50));
INSERT INTO "stuff" VALUES(1,'Jane Smith','546 North st.');
INSERT INTO "stuff" VALUES(2,'Bob Jones','234 west st.');
INSERT INTO "stuff" VALUES(3,'John Smith','567 North st.');
COMMIT;
sqlite> .schema
CREATE TABLE stuff (id int, name varchar(30),address varchar(50));
IS 257 – Fall 2014
2014-09-30 SLIDE 24
Creating Tables from Tables
sqlite> create table names as select name, id from stuff;
sqlite> .schema
CREATE TABLE names(name TEXT,id INT);
CREATE TABLE stuff (id int, name varchar(30),address varchar(50));
sqlite> select * from names;
Jane Smith|1
Bob Jones|2
John Smith|3
sqlite> create table names2 as select name as xx, id as key from stuff;
sqlite> .schema
CREATE TABLE names(name TEXT,id INT);
CREATE TABLE names2(xx TEXT,"key" INT);
CREATE TABLE stuff (id int, name varchar(30),address varchar(50));
sqlite> drop table names2;
sqlite> .schema
CREATE TABLE names(name TEXT,id INT);
CREATE TABLE stuff (id int, name varchar(30),address varchar(50));
IS 257 – Fall 2014
2014-09-30 SLIDE 25
Using SQLite3 from Python
• SQLite is available as a loadable python
library
– You can use any SQL commands to create,
add data, search, update and delete
IS 257 – Fall 2014
2014-09-30 SLIDE 26
SQLite3 from Python
[dhcp137:~] ray% python
Python 2.5.1 (r251:54869, Apr 18 2007, 22:08:04)
[GCC 4.0.1 (Apple Computer, Inc. build 5367)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.version
'2.3.2’
>>> sqlite3.sqlite_version
'3.3.14'
>>>
IS 257 – Fall 2014
2014-09-30 SLIDE 27
SQLite3 from Python
[dhcp137:~] ray% python
Python 2.5.1 (r251:54869, Apr 18 2007, 22:08:04)
[GCC 4.0.1 (Apple Computer, Inc. build 5367)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3 as lite
>>> import sys
>>> con = None
>>> try:
... con = lite.connect('newtest.db')
... cur = con.cursor()
... cur.execute('SELECT SQLITE_VERSION()')
... data = cur.fetchone()
... print "SQLite version: %s" % data
... except lite.Error, e:
... print "Error %s:" % e.args[0]
... sys.exit(1)
... finally:
... if con:
...
con.close()
...
<sqlite3.Cursor object at 0x46eb90>
SQLite version: 3.3.14
>>>
IS 257 – Fall 2014
2014-09-30 SLIDE 28
SQLite3 from Python
#!/usr/bin/python2.7
# -*- coding: utf-8 -*import sqlite3 as lite
import sys
# our data is defined as a tuple of tuples…
cars = (
(1, 'Audi', 52642),
(2, 'Mercedes', 57127),
(3, 'Skoda', 9000),
(4, 'Volvo', 29000),
(5, 'Bentley', 350000),
(6, 'Hummer', 41400),
(7, 'Volkswagen', 21600)
)
con = lite.connect(’newtest.db')
with con:
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS Cars")
cur.execute("CREATE TABLE Cars(Id INT, Name TEXT, Price INT)")
cur.executemany("INSERT INTO Cars VALUES(?, ?, ?)", cars)
IS 257 – Fall 2014
2014-09-30 SLIDE 29
Another Example
#!/usr/bin/python
# -*- coding: utf-8 -*import sqlite3 as lite
import sys
con = lite.connect(':memory:')
with con:
cur = con.cursor()
cur.execute("CREATE TABLE Friends(Id INTEGER PRIMARY KEY,
Name TEXT);")
cur.execute("INSERT INTO Friends(Name) VALUES ('Tom');")
cur.execute("INSERT INTO Friends(Name) VALUES ('Rebecca');")
cur.execute("INSERT INTO Friends(Name) VALUES ('Jim');")
cur.execute("INSERT INTO Friends(Name) VALUES ('Robert');")
lid = cur.lastrowid
print "The last Id of the inserted row is %d" % lid
IS 257 – Fall 2014
2014-09-30 SLIDE 30
Retrieving Data
#!/usr/bin/python
# -*- coding: utf-8 -*import sqlite3 as lite
import sys
#connect to the cars database…
con = lite.connect(’newtest.db')
ray% python2.7 retrnewtest.py
(1, u'Audi', 52642)
(2, u'Mercedes', 57127)
(3, u'Skoda', 9000)
(4, u'Volvo', 29000)
(5, u'Bentley', 350000)
(6, u'Hummer', 41400)
(7, u'Volkswagen', 21600)
(8, u'Citroen', 21000)
ray%
with con:
cur = con.cursor()
cur.execute("SELECT * FROM Cars")
rows = cur.fetchall()
for row in rows:
print row
IS 257 – Fall 2014
2014-09-30 SLIDE 31
Updating data
cur.execute("UPDATE Cars set Price = 450000 where Name = 'Bentley'")
cur.execute("SELECT * FROM Cars")
rows = cur.fetchall()
for row in rows:
print row
IS 257 – Fall 2014
(1, u'Audi', 52642)
(2, u'Mercedes', 57127)
(3, u'Skoda', 9000)
(4, u'Volvo', 29000)
(5, u'Bentley', 450000)
(6, u'Hummer', 41400)
(7, u'Volkswagen', 21600)
(8, u'Citroen', 21000)
ray%
2014-09-30 SLIDE 32
Add another row…
[dhcp137:~] ray% python2.7
Python 2.7.2 (default, Oct 11 2012, 20:14:37)
[GCC 4.2.1 Compatible Apple Clang 4.0 …
>>> import sqlite3 as lite
>>> import sys
>>>
>>> con = lite.connect(’newtest.db')
>>>
>>> with con:
... cur = con.cursor()
... cur.execute("INSERT INTO Cars VALUES(8,'Citroen',21000)")
...
<sqlite3.Cursor object at 0x107fafc00>
>>>
IS 257 – Fall 2014
2014-09-30 SLIDE 33
From the SQLite3 command line
[dhcp137:~] ray% sqlite3 newtest.db
SQLite version 3.6.22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from cars;
1|Audi|52642
2|Mercedes|57127
3|Skoda|9000
4|Volvo|29000
5|Bentley|350000
6|Hummer|41400
7|Volkswagen|21600
8|Citroen|21000
sqlite>
IS 257 – Fall 2014
INSERT more data…
sqlite> select * from cars;
1|Audi|52642
2|Mercedes|57127
3|Skoda|9000
4|Volvo|29000
5|Bentley|450000
6|Hummer|41400
7|Volkswagen|21600
8|Citroen|21000
10|Audi|51000
11|Mercedes|55000
12|Mercedes|56300
13|Volvo|31500
14|Volvo|31000
15|Audi|52000
17|Hummer|42400
16|Hummer|42400
2014-09-30 SLIDE 34
Use Aggregates to summarize data
#!/usr/bin/python2.7
# -*- coding: utf-8 -*import sqlite3 as lite
import sys
ray% python2.7 aggnewtest.py
(u'Audi', 51880.666666666664)
(u'Bentley', 450000.0)
(u'Citroen', 21000.0)
(u'Hummer', 42066.666666666664)
(u'Mercedes', 56142.333333333336)
(u'Skoda', 9000.0)
(u'Volkswagen', 21600.0)
(u'Volvo', 30500.0)
con = lite.connect('newtest.db')
with con:
cur = con.cursor()
cur.execute("SELECT Name, AVG(Price)
FROM Cars GROUP BY Name")
rows = cur.fetchall()
for row in rows:
print row
IS 257 – Fall 2014
2014-09-30 SLIDE 35
Database Design Process
Application 1
External
Model
Application 2
Application 3
Application 4
External
Model
External
Model
External
Model
Application 1
Conceptual
requirements
Application 2
Conceptual
requirements
Application 3
Conceptual
requirements
Conceptual
Model
Logical
Model
Internal
Model
Application 4
Conceptual
requirements
IS 257 – Fall 2014
Physical
Design
2014-09-30 SLIDE 36
Physical Database Design
• Many physical database design decisions
are implicit in the technology adopted
– Also, organizations may have standards or an
“information architecture” that specifies
operating systems, DBMS, and data access
languages -- thus constraining the range of
possible physical implementations.
• We will be concerned with some of the
possible physical implementation issues
IS 257 – Fall 2014
2014-09-30 SLIDE 37
Physical Database Design
• The primary goal of physical database
design is data processing efficiency
• We will concentrate on choices often
available to optimize performance of
database services
• Physical Database Design requires
information gathered during earlier stages
of the design process
IS 257 – Fall 2014
2014-09-30 SLIDE 38
Physical Design Information
• Information needed for physical file and
database design includes:
– Normalized relations plus size estimates for them
– Definitions of each attribute
– Descriptions of where and when data are used
• entered, retrieved, deleted, updated, and how often
– Expectations and requirements for response time,
and data security, backup, recovery, retention and
integrity
– Descriptions of the technologies used to implement
the database
IS 257 – Fall 2014
2014-09-30 SLIDE 39
Physical Design Decisions
• There are several critical decisions that
will affect the integrity and performance of
the system
– Storage Format
– Physical record composition
– Data arrangement
– Indexes
– Query optimization and performance tuning
IS 257 – Fall 2014
2014-09-30 SLIDE 40
Storage Format
• Choosing the storage format of each field
(attribute). The DBMS provides some set
of data types that can be used for the
physical storage of fields in the database
• Data Type (format) is chosen to minimize
storage space and maximize data integrity
IS 257 – Fall 2014
2014-09-30 SLIDE 41
Objectives of data type selection
•
•
•
•
•
Minimize storage space
Represent all possible values
Improve data integrity
Support all data manipulations
The correct data type should, in minimal
space, represent every possible value (but
eliminate illegal values) for the associated
attribute and can support the required data
manipulations (e.g. numerical or string
operations)
IS 257 – Fall 2014
2014-09-30 SLIDE 42
Access Data Types (Not MySQL)
•
•
•
•
•
•
•
•
•
Numeric (1, 2, 4, 8 bytes, fixed or float)
Text (255 max)
Memo (64000 max)
Date/Time (8 bytes)
Currency (8 bytes, 15 digits + 4 digits decimal)
Autonumber (4 bytes)
Yes/No (1 bit)
OLE (limited only by disk space)
Hyperlinks (up to 64000 chars)
IS 257 – Fall 2014
2014-09-30 SLIDE 43
Access Numeric types
• Byte
– Stores numbers from 0 to 255 (no fractions). 1 byte
• Integer
– Stores numbers from –32,768 to 32,767 (no fractions) 2
bytes
• Long Integer (Default)
– Stores numbers from –2,147,483,648 to 2,147,483,647 (no
fractions). 4 bytes
• Single
– Stores numbers from -3.402823E38 to –1.401298E–45 for
negative values and from 1.401298E–45 to 3.402823E38
for positive values.
4 bytes
• Double
– Stores numbers from –1.79769313486231E308 to –
4.94065645841247E–324 for negative values and from
1.79769313486231E308 to 4.94065645841247E–324 for
positive values.
15
8 bytes
• Replication ID
– Globally unique identifier (GUID)
IS 257 – Fall 2014
N/A
16 bytes
2014-09-30 SLIDE 44
Oracle Data Types
•
•
•
•
CHAR (size) -- max 2000
VARCHAR2(size) -- up to 4000
DATE
DECIMAL, FLOAT, INTEGER, INTEGER(s),
SMALLINT, NUMBER, NUMBER(size,d)
– All numbers internally in same format…
• LONG, LONG RAW, LONG VARCHAR
– up to 2 Gb -- only one per table
• BLOB, CLOB, NCLOB -- up to 4 Gb
• BFILE -- file pointer to binary OS file
IS 257 – Fall 2014
2014-09-30 SLIDE 45
MySQL Data Types
• MySQL supports all of the standard SQL numeric data
types. These types include the exact numeric data types
(INTEGER, SMALLINT, DECIMAL, and NUMERIC), as
well as the approximate numeric data types (FLOAT,
REAL, and DOUBLE PRECISION). The keyword INT is
a synonym for INTEGER, and the keyword DEC is a
synonym for DECIMAL
• Numeric (can also be declared as UNSIGNED)
–
–
–
–
–
–
–
–
TINYINT (1 byte)
SMALLINT (2 bytes)
MEDIUMINT (3 bytes)
INT (4 bytes)
BIGINT (8 bytes)
NUMERIC or DECIMAL
FLOAT
DOUBLE (or DOUBLE PRECISION)
IS 257 – Fall 2014
2014-09-30 SLIDE 46
MySQL Data Types
• The date and time types for representing
temporal values are DATETIME, DATE,
TIMESTAMP, TIME, and YEAR. Each temporal
type has a range of legal values, as well as a
“zero” value that is used when you specify an
illegal value that MySQL cannot represent
–
–
–
–
–
–
DATETIME
'0000-00-00 00:00:00'
DATE '0000-00-00'
TIMESTAMP (4.1 and up) '0000-00-00 00:00:00'
TIMESTAMP (before 4.1) 00000000000000
TIME '00:00:00'
YEAR 0000
IS 257 – Fall 2014
2014-09-30 SLIDE 47
MySQL Data Types
• The string types are CHAR, VARCHAR,
BINARY, VARBINARY, BLOB, TEXT, ENUM,
and SET
• Maximum length for CHAR is 255 and for
VARCHAR is 65,535
Value
""
"ab"
"abcd"
"abcdefg"
CHAR(4) Storage VARCHAR(4) Storage
" "
4 ""
1
"ab "
4 "ab"
3
"abcd"
4 "abcd"
5
"abcd"
4 "abcd"
5
• VARCHAR uses 1 or 2 bytes for the length
• For longer things there is BLOB and TEXT
IS 257 – Fall 2014
2014-09-30 SLIDE 48
MySQL Data Types
• A BLOB is a binary large object that can hold a
variable amount of data.
• The four BLOB types are TINYBLOB, BLOB,
MEDIUMBLOB, and LONGBLOB. These differ
only in the maximum length of the values they
can hold
• The four TEXT types are TINYTEXT, TEXT,
MEDIUMTEXT, and LONGTEXT. These
correspond to the four BLOB types and have the
same maximum lengths and storage
requirements
• TINY=1byte, BLOB and TEXT=2bytes,
MEDIUM=3bytes, LONG=4bytes
IS 257 – Fall 2014
2014-09-30 SLIDE 49
MySQL Data Types
• BINARY and VARBINARY are like CHAR and
VARCHAR but are intended for binary data of 255 bytes
or less
• ENUM is a list of values that are stored as their
addresses in the list
– For example, a column specified as ENUM('one', 'two', 'three')
can have any of the values shown here. The index of each value
is also shown:
•
•
•
•
•
•
Value = Index
NULL = NULL
‘’
=
0
'one’ =
1
‘two’ =
2
‘three’ = 3
– An enumeration can have a maximum of 65,535 elements.
IS 257 – Fall 2014
2014-09-30 SLIDE 50
MySQL Data Types
• The final string type (for this version) is a SET
• A SET is a string object that can have zero or more
values, each of which must be chosen from a list of
allowed values specified when the table is created.
• SET column values that consist of multiple set members
are specified with members separated by commas (‘,’)
• For example, a column specified as SET('one', 'two')
NOT NULL can have any of these values:
–
–
–
–
''
'one'
'two'
'one,two‘
• A set can have up to 64 member values and is stored as
an 8byte number
IS 257 – Fall 2014
2014-09-30 SLIDE 51
Controlling Data Integrity
•
•
•
•
•
Default values
Range control
Null value control
Referential integrity (next time)
Handling missing data
IS 257 – Fall 2014
2014-09-30 SLIDE 52
Designing Physical Records
• A physical record is a group of fields
stored in adjacent memory locations and
retrieved together as a unit
• Fixed Length and variable fields
IS 257 – Fall 2014
2014-09-30 SLIDE 53
Designing Physical/Internal Model
• Overview
• terminology
• Access methods
IS 257 – Fall 2014
2014-09-30 SLIDE 54
Physical Design
• Internal Model/Physical Model
User request
Interface 1
External Model
DBMS
Internal Model
Access Methods
Interface 2
Operating
System
Access Methods
Interface 3
Data
Base
IS 257 – Fall 2014
2014-09-30 SLIDE 55
Physical Design
• Interface 1: User request to the DBMS.
The user presents a query, the DBMS
determines which physical DBs are
needed to resolve the query
• Interface 2: The DBMS uses an internal
model access method to access the data
stored in a logical database.
• Interface 3: The internal model access
methods and OS access methods access
the physical records of the database.
IS 257 – Fall 2014
2014-09-30 SLIDE 56
Physical File Design
• A Physical file is a portion of secondary storage
(disk space) allocated for the purpose of storing
physical records
• Pointers - a field of data that can be used to
locate a related field or record of data
• Access Methods - An operating system
algorithm for storing and locating data in
secondary storage
• Pages - The amount of data read or written in
one disk input or output operation
IS 257 – Fall 2014
2014-09-30 SLIDE 57
Lecture Outline
• Review
–Introduction to SQL
–SQLite
• Physical Database Design
• Access Methods
IS 257 – Fall 2014
2014-09-30 SLIDE 58
Internal Model Access Methods
• Many types of access methods:
– Physical Sequential
– Indexed Sequential
– Indexed Random
– Inverted
– Direct
– Hashed
• Differences in
– Access Efficiency
– Storage Efficiency
IS 257 – Fall 2014
2014-09-30 SLIDE 59
Physical Sequential
• Key values of the physical records are in
logical sequence
• Main use is for “dump” and “restore”
• Access method may be used for storage
as well as retrieval
• Storage Efficiency is near 100%
• Access Efficiency is poor (unless fixed
size physical records)
IS 257 – Fall 2014
2014-09-30 SLIDE 60
Indexed Sequential
• Key values of the physical records are in logical
sequence
• Access method may be used for storage and
retrieval
• Index of key values is maintained with entries for
the highest key values per block(s)
• Access Efficiency depends on the levels of
index, storage allocated for index, number of
database records, and amount of overflow
• Storage Efficiency depends on size of index and
volatility of database
IS 257 – Fall 2014
2014-09-30 SLIDE 61
Index Sequential
Data File
Actual
Value
IS 257 – Fall 2014
Address
Block
Number
Dumpling
1
Harty
2
Texaci
3
...
…
Adams
Becker
Dumpling
Block 1
Getta
Harty
Block 2
Mobile
Sunoci
Texaci
Block 3
2014-09-30 SLIDE 62
Indexed Sequential: Two Levels
Key
Value
Key
Value
Address
150
1
385
2
001
003
.
.
150
Address
385
7
678
8
805
9
…
Key
Value
Address
536
3
678
4
Key
Value
251
.
.
385
455
480
.
.
536
605
610
.
.
678
Address
785
5
805
6
791
.
.
805
IS 257 – Fall 2014
705
710
.
.
785
2014-09-30 SLIDE 63
Indexed Random
• Key values of the physical records are not
necessarily in logical sequence
• Index may be stored and accessed with Indexed
Sequential Access Method
• Index has an entry for every data base record.
These are in ascending order. The index keys
are in logical sequence. Database records are
not necessarily in ascending sequence.
• Access method may be used for storage and
retrieval
IS 257 – Fall 2014
2014-09-30 SLIDE 64
Indexed Random
Becker
Harty
Actual
Value
Address
Block
Number
Adams
2
Becker
1
Dumpling
3
Getta
2
Harty
1
Adams
Getta
Dumpling
IS 257 – Fall 2014
2014-09-30 SLIDE 65
Btree
F
B
||
D || F|
||
P || Z|
H ||
L || P|
R ||
S || Z|
Devils
Aces
Boilers
Cars
IS 257 – Fall 2014
Flyers
Hawkeyes
Hoosiers
Minors
Panthers
Seminoles
2014-09-30 SLIDE 66
Inverted
• Key values of the physical records are not
necessarily in logical sequence
• Access Method is better used for retrieval
• An index for every field to be inverted may
be built
• Access efficiency depends on number of
database records, levels of index, and
storage allocated for index
IS 257 – Fall 2014
2014-09-30 SLIDE 67
Inverted
Student
name
Course
Number
CH 145
101, 103,104
Actual
Value
Address
Block
Number
CH 145
1
CS 201
2
CS 623
3
PH 345
…
Adams
CH145
Becker
cs201
Dumpling ch145
CS 201
102
Getta
ch145
Harty
cs623
Mobile
cs623
CS 623
105, 106
IS 257 – Fall 2014
2014-09-30 SLIDE 68
Direct
• Key values of the physical records are not
necessarily in logical sequence
• There is a one-to-one correspondence
between a record key and the physical
address of the record
• May be used for storage and retrieval
• Access efficiency always 1
• Storage efficiency depends on density of
keys
• No duplicate keys permitted
IS 257 – Fall 2014
2014-09-30 SLIDE 69
Hashing
• Key values of the physical records are not
necessarily in logical sequence
• Many key values may share the same physical
address (block)
• May be used for storage and retrieval
• Access efficiency depends on distribution of
keys, algorithm for key transformation and space
allocated
• Storage efficiency depends on distibution of
keys and algorithm used for key transformation
IS 257 – Fall 2014
2014-09-30 SLIDE 70
Comparative Access Methods
Factor
Storage space
Sequential
retrieval on
primary key
Random Retr.
Multiple Key
Retr.
Deleting records
Sequential
No wasted space
Indexed
Hashed
No wasted
space for data
but extra space for index
more space needed for
addition and deletion of
records after initial load
Very fast
Moderately Fast
Impractical
Moderately Fast
Very fast with
multiple indexes
OK if dynamic
Very fast
OK if dynamic
very easy
Easy but requires
Maintenance of
indexes
very easy
Impractical
Possible but needs
a full scan
can create wasted
space
Adding records requires rewriting
file
Updating records usually requires
rewriting file
IS 257 – Fall 2014
Not possible
very easy
2014-09-30 SLIDE 71