CREATE TYPE StudentType
(ID integer, name char(30), address char(100), GPA float, SAT integer)
CREATE TABLE Student OF TYPE StudentType (PRIMARY KEY (ID))
Main difference (so far):
Can use same type for multiple relations:
CREATE TABLE OldStudent OF TYPE StudentType PRIMARY KEY (name,address))Note: Constraints are part of table declaration, not type declaration
Example: Use StudentType in student phone list:
CRATE TABLE Phone (student StudentType, number char(15))But might better be done with references (see below)
Example: More structure in Student definition:
CREATE TYPE AddressType AS (street char(50), city char(50), zip integer)
CREATE TYPE ScoresType AS (GPA float, SAT integer)
CREATE TYPE StudentType AS
(ID integer, name char(30), address AddressType, scores ScoresType)
CREATE TABLE Student OF TYPE StudentType (PRIMARY KEY (ID))
(picture)
Note: no actual relations with types AddressType or ScoresType
Example: Find name, street of all students from Palo Alto with GPA < 3.5
CREATE TYPE ScoresType AS (GPA float, SAT integer) METHOD composite() RETURNS float CREATE TYPE AddressType AS (street char(50), city char(50), zip integer) METHOD sendto(name char(20), msg char(50)) RETURNS char(1)
Example: Send "sorry" mailing to all students with composite score < 50. Return ID and confirmation character as result of query.
CREATE TABLE Student OF TYPE StudentType
(PRIMARY KEY (ID),
REF IS SRef DERIVED) // alternative is SYSTEM GENERATED
Example: Student phone list:
CREATE TABLE Phone (student REF(StudentType), number char(15))Phone tuples can reference any tuples of StudentType, e.g., in Student table and/or in OldStudent table (if it contains "REF IS" clause).
Example: Student phone list without old students:
CREATE TABLE Phone (student REF(StudentType) SCOPE Student, number char(15))
Example: Students with phone numbers containing "(408)"
Main effect of references is to eliminate joins.
=, <, >, <=, >=, <> ORDER BY DISTINCT, GROUP BYWould be nice to have these capabilities for UDT's also
Example: Students with phone numbers containing "(408)", ordered by score
Statement:
CREATE ORDERING FOR <type> <ordering>Details and defaults seem to be in flux. Basic idea:
If <ordering> specifies equals only: