SQL-99 (SQL 3)

Download Report

Transcript SQL-99 (SQL 3)

SQL:2003 (SQL 4) *
Características
Objeto - Relacionales
* Tomado del curso de Francisco Moreno
20/07/2015
Seminario de Bases de Datos
1
Partes de SQL 2003:
1. SQL/Framework  Estructura y conceptos básico de SQL 2003
2. SQL/Foundation  Core (DML + DDL + DCL)
3. SQL/CLI (Call Level Interface)  Protocolos de Comunicación con otros lenguajes
4. SQL/PSM (Persistent Stored Modules) Lenguaje Procedimental para SQL
(Ejemplo PL/SQL)
9. SQL/MED (Managemente of External Data)  Manejo de Datos externos a la BD
10. SQL/OLB (Object Language Binding)  Protocolos de comunicación con Java
11. SQL/Schemadata  Diccionario de Datos
13. SQL/JRT (Java Routines and Types)
14. SQL/XML
¡Partes 5,6,7,8 y 12 no existen!
20/07/2015
Seminario de Bases de Datos
2
Clases  UDTs
User Defined Types:
Tipos de datos Definidos por el Usuario
vs.
Tipos Primitivos (built-in) del Sistema
Los UDTs incorporan propiedades o atributos
(estado) y métodos (comportamiento)
Nota
SQL:2003 fue desarrollado por INCITS (bajo la supervisión de ANSI)
20/07/2015
Seminario de Bases de Datos
3
Ejemplo
Nombre del UDT
CREATE TYPE book_udt AS
( title VARCHAR(40),
Atributos del UDT
buying_price DECIMAL(9,2),
selling_price DECIMAL(9,2),
METHOD profit()
Especificación de
RETURNS DECIMAL(9,2)
un método*
) NOT FINAL;
Cláusula de posibilidad de especialización
* También llamado atributo derivado
20/07/2015
Seminario de Bases de Datos
Ver herencia
4
¿Cómo cuáles?



En los UDT’s no se pueden especificar restricciones, solo
nombres de los atributos y sus tipos de datos
Los UDT`s son “plantillas”* que sirven para declarar
tablas u otros atributos o columnas**
No existen cualificadores de visibilidad para los atributos
(privados, públicos ni protegidos)
* No son repositorios de datos, por ejemplo book_udt no es
un “lugar” en el cual se puedan insertar datos
** SQL diferencia entre atributos (componen a un UDT) y columnas
(componen a las tablas)
20/07/2015
Seminario de Bases de Datos
5
Declaración de una tabla que posee una
columna de tipo UDT:
CREATE TABLE book (
book_column book_udt,
code VARCHAR(10) PRIMARY KEY
);
20/07/2015
Seminario de Bases de Datos
6
Inserción de datos
a) Mediante una transacción
BEGIN
DECLARE u book_udt;
 Declaración de variable
SET u = book_udt();  Constructor
SET u = u.title ('La Perla');
SET u = u.buying_price(10.00);
Funciones mutator
SET u = u.selling_price(20.00);
INSERT INTO book VALUES (u,'111');  Inserción típica
END;
20/07/2015
Seminario de Bases de Datos
7
Inserción de datos

¿Por qué no usar directamente una asignación así?
u.title = 'La Perla';
 Violación de encapsulamiento: Sólo los métodos
pueden accesar a los atributos
20/07/2015
Seminario de Bases de Datos
8
Inserción de datos
b) Mediante el operador NEW:
INSERT INTO book VALUES
(NEW book_udt('Orca', 12.50, 14.50 ), '222');
NEW invoca al constructor e implícitamente
a las funciones mutators.

20/07/2015
Seminario de Bases de Datos
9
Selección:
SELECT book_column, code
FROM book;
¿Posibles ventajas frente al modelo relacional?
SELECT code, book_column.title()
FROM book
Función observer
WHERE book_column.selling_price() > 20;
20/07/2015
Seminario de Bases de Datos
10
En resumen para todo UDT se crea
implícitamente:



Un constructor*
Una función mutator para cada atributo
Una función observer para cada atributo
Funciones Get y Set
*No modificable…
20/07/2015
Seminario de Bases de Datos
11
Creación de los métodos
Similar a la creación del cuerpo (body) de los
paquetes, para el ejemplo:
CREATE METHOD profit()
RETURNS DECIMAL(9,2)
FOR book_udt
BEGIN
RETURN (selling_price – buying_price);
END;
20/07/2015
Seminario de Bases de Datos
12
Invocación
SELECT code,
book_column.profit() AS beneficio
FROM book;
Confrontar con:
SELECT code,
(book_column.selling_price()–
book_column.buying_price()) AS beneficio
FROM book;
¿Ventajas?
20/07/2015
Seminario de Bases de Datos
13
Tablas “tipadas”



Las tablas tipadas o referenciables están basadas en
UDTs
No se les puede agregar atributos
adicionales
Ejemplo:
CREATE TABLE book OF book_udt
REF IS my_ref;
Ver Referencias más adelante…
20/07/2015
Seminario de Bases de Datos
14


La inserción es directa:
INSERT INTO book
VALUES(‘King Kong en China’,30,40);
La selección:
SELECT * FROM book;
SELECT title, profit() AS beneficio
FROM book WHERE title LIKE '%día%';

No se requieren las funciones mutators ni observers
20/07/2015
Seminario de Bases de Datos
15
Referencias
UML
Sea el modelo:
E-R
Semántico
BOOK
BOOK
BOOK
BOOK_CHAPTER
1
1.N
Composed of
Composed of
1…*
for
BOOK_CHAPTER
BOOK_CHAPTER
BOOK_CHAPTER
BOOK
1.1
:Composición
:Agregación
20/07/2015
¿Diferencias? Seminario de Bases de Datos
16
Sean las tablas:
- book, tipada (creada anteriormente)
- book_chapter:
CREATE TABLE book_chapter(
book_ref_column REF(book_udt) NOT NULL
SCOPE book REFERENCES ARE CHECKED
ON DELETE CASCADE,
abstract CHARACTER VARYING(100),
full_chapter CHARACTER VARYING(2000),
nr_chapter INTEGER
);
Nota: CHARACTER VARYING y VARCHAR son sinónimos en el SQL estándar
20/07/2015
Seminario de Bases de Datos
17
Inserción en un REF
INSERT INTO book_chapter
SELECT my_ref, ‘Hria del futuro de Guyana',
‘...él vendrá el año pasado y se fue mañana...', 1
FROM book
WHERE title = 'Historia Universal Extraña';

Ojo: La consulta a book debe retornar un único ref.
¿Qué pasaría si retornase varios?
¿Qué pasaría si no retornase ni uno?
20/07/2015
Seminario de Bases de Datos
18
Seleccionar el título de cada libro, el contenido de
sus capítulos y ordenados por número de capítulo:
SELECT book_ref_column  title,
full_chapter
FROM book_chapter
ORDER BY book_ref_column  title,
nr_chapter;
20/07/2015
Seminario de Bases de Datos
19

Seleccionar el resumen del primer capítulo de cada libro, su título y
su beneficio y ordenado por título
SELECT abstract AS resumen,
(book_ref_column  title) AS titulo,
(book_ref_column  profit()) AS beneficio
FROM book_chapter
WHERE nr_chapter = 1
ORDER BY titulo;
Nota: La notación ordinal para ORDER BY se prohibió desde SQL:1999 pero se
aceptan alias de atributos
20/07/2015
Seminario de Bases de Datos
20