Sunteți pe pagina 1din 71

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 attr-
type PRIMARY KEY, attr2 attr-type,
…,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 -*- ray% python2.7 retrnewtest.py
(1, u'Audi', 52642)
import sqlite3 as lite (2, u'Mercedes', 57127)
import sys (3, u'Skoda', 9000)
(4, u'Volvo', 29000)
#connect to the cars database… (5, u'Bentley', 350000)
con = lite.connect(’newtest.db') (6, u'Hummer', 41400)
(7, u'Volkswagen', 21600)
with con: (8, u'Citroen', 21000)
cur = con.cursor() ray%
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: (1, u'Audi', 52642)
print row (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%

IS 257 – Fall 2014 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 INSERT more data…
SQLite version 3.6.22 sqlite> select * from cars;
Enter ".help" for instructions 1|Audi|52642
2|Mercedes|57127
Enter SQL statements terminated with a ";" 3|Skoda|9000
sqlite> select * from cars; 4|Volvo|29000
1|Audi|52642 5|Bentley|450000
6|Hummer|41400
2|Mercedes|57127 7|Volkswagen|21600
3|Skoda|9000 8|Citroen|21000
4|Volvo|29000 10|Audi|51000
11|Mercedes|55000
5|Bentley|350000 12|Mercedes|56300
6|Hummer|41400 13|Volvo|31500
7|Volkswagen|21600 14|Volvo|31000
15|Audi|52000
8|Citroen|21000 17|Hummer|42400
sqlite> 16|Hummer|42400

IS 257 – Fall 2014 2014-09-30 SLIDE 34


Use Aggregates to summarize
data
ray% python2.7 aggnewtest.py
#!/usr/bin/python2.7 (u'Audi', 51880.666666666664)
# -*- coding: utf-8 -*- (u'Bentley', 450000.0)
import sqlite3 as lite (u'Citroen', 21000.0)
import sys (u'Hummer', 42066.666666666664)
(u'Mercedes', 56142.333333333336)
(u'Skoda', 9000.0)
con = lite.connect('newtest.db')(u'Volkswagen', 21600.0)
with con: (u'Volvo', 30500.0)
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 Application 2 Application 3 Application 4


External External External External
Model Model Model Model
Application 1
Conceptual
requirements
Application 2
Conceptual
requirements
Internal
Conceptual Logical Model
Application 3 Model Model
Conceptual
requirements
Application 4
Conceptual
requirements Physical
Design

IS 257 – Fall 2014 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) N/A 16 bytes

IS 257 – Fall 2014 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 CHAR(4) StorageVARCHAR(4) Storage
"" " " 4 "" 1
"ab" "ab " 4 "ab" 3
"abcd" "abcd" 4 "abcd" 5
"abcdefg" "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
Adams
Block 1
Becker
Actual Address Dumpling
Value Block
Number

Dumpling 1
Harty 2
Getta
Texaci
...
3
… Harty Block 2

Mobile
Sunoci Block 3
Texaci

IS 257 – Fall 2014 2014-09-30 SLIDE 62


Indexed Sequential: Two Levels
Key Address 001
Value
003
150 1 .
.
385 2 150
Key Address
Value
251
.
385 7 .
Key Address 385
Value
678 8
536 3 455
805 9
678 4 480
… .
.
536

605
Key Address 610
Value
.
785 5 .
678
805 6
705
710
.
.
791
785
.
.
805

IS 257 – Fall 2014 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 Address
Value Block
Number

Adams 2
Becker 1
Dumpling 3
Adams
Getta 2 Getta
Harty 1

Dumpling

IS 257 – Fall 2014 2014-09-30 SLIDE 65


Btree

F || P || Z|

B || D || F| H || L || P| R || S || Z|

Devils
Hawkeyes Minors Seminoles
Hoosiers Panthers
Aces Flyers
Boilers
Cars

IS 257 – Fall 2014 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 Course
name Number
CH 145
101, 103,104
Actual Address Adams CH145
Value Block
Number
Becker cs201
CH 145 1
CS 201 2
Dumpling ch145
CS 623 3
CS 201
Getta ch145
PH 345 … 102
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 Sequential Indexed Hashed
No wasted more space needed for
Storage space No wasted space space for data addition and deletion of
Sequential but extra space for index records after initial load

retrieval on Very fast Moderately Fast Impractical


primary key
Random Retr. Impractical Moderately Fast Very fast
Multiple Key Possible but needs Very fast with
Retr. a full scan multiple indexes Not possible
Deleting records can create wasted OK if dynamic very easy
space
OK if dynamic very easy
Adding records requires rewriting
file Easy but requires
Updating records usually requires Maintenance of very easy
rewriting file indexes
IS 257 – Fall 2014 2014-09-30 SLIDE 71

S-ar putea să vă placă și