Conceptos de Bases de Datos Relacionales Parte 1

139
Conceptos de Bases de Datos Relacionales Parte 1

description

Conceptos de Bases de Datos Relacionales Parte 1. Servidor de Bases de Datos. Servidor que es capaz de administrar múltiples bases de datos. Base de Datos. Una base de datos relacional almacena conjuntos de datos que están relacionados unos con otros. - PowerPoint PPT Presentation

Transcript of Conceptos de Bases de Datos Relacionales Parte 1

Page 1: Conceptos de Bases de Datos Relacionales Parte 1

Conceptos de Bases de Datos Relacionales

Parte 1

Page 2: Conceptos de Bases de Datos Relacionales Parte 1

Servidor de Bases de Datos

• Servidor que es capaz de administrar múltiples bases de datos

Page 3: Conceptos de Bases de Datos Relacionales Parte 1

• Una base de datos relacional almacena conjuntos de datos que están relacionados unos con otros.

• Las Tablas son la estructura primaria de una base de datos relacional.

• Las tablas están constituidas por:– Columnas (columns)– Filas (rows)

Base de Datos

Page 4: Conceptos de Bases de Datos Relacionales Parte 1

Objetos de una Base de Datos

• Tables, almacena datos• Views, simplifica y/o restringe acceso a datos• Indexes, mejora acceso a la base de datos• Defaults, define valores por omisión• Rules, restinge valores que se aceptan• Stored procedures, comandos sql y de control con llamado

explícito• Triggers, comandos sql y de control con llamado implícito

Page 5: Conceptos de Bases de Datos Relacionales Parte 1

SQL (Structured Query Language)

• SQL lenguaje usado para definir, manipular, y controlar bases de datos relacionales– Definido por ANSI (American National Standards Institute)

• Comandos SQL se pueden dividir en tres categorías: – DDL (Data definition language)

• create, alter, drop

– DML (Data manipulation language)• select, insert, update, delete

– DCL (Data control language)• grant, revoke

Page 6: Conceptos de Bases de Datos Relacionales Parte 1

Extensiones SQL• Son cosas adicionales al standard ANSI SQL • Están diseñadas para simplificar la administración de las

bases de datos• FIPS flagger

– Útiles para los usuarios que solamente usan ANSI-compliant SQL

– Envía mensajes a los usuarios cuando ejecutan un comando que no cumpla

– Sintaxis: set fipsflagger { on | off }

Page 7: Conceptos de Bases de Datos Relacionales Parte 1

System Procedures

• Procedimientos del Sistema instalados automáticamente que facilitan la manipulación de los Servidores de Bases de Datos

• En el caso de Sybase y SQL-servidor, todos los system procedures comienzan con con “sp_”

• Ejemplos:– sp_help da información de todos los objetos en una base de

datos– sp_who da información de los usuarios que están trabajando

en el servidor de bases de datos

Page 8: Conceptos de Bases de Datos Relacionales Parte 1

Relación Cliente/Servidor• Cliente – Programa que acepta requerimientos de un

usuario y los envía a un servidor; también recibe respuestas del servidor y se las muestra al usuario

• Servidor – Programa que procesa requerimientos del cliente y le retorna resultados

Page 9: Conceptos de Bases de Datos Relacionales Parte 1

Conexión al Servidor

• Para conectarse a un servidor a través de un cliente se necesita:– Un login válido– Un password válido

• Una conexión simple se conoce como “session”• Base de datos default:

– Base de datos que se coloca en uso cuando un usuario se conecta al servidor

– Determinada según el perfil del usuario– Características fijadas por el Administrador

Page 10: Conceptos de Bases de Datos Relacionales Parte 1

Funcionalidad en el Cliente• Un cliente debe proporcionar las siguientes facilidades:

– Iniciar el cliente y conectarse al servidor– Ejecutar comandos y batches– Navegar por una base de datos– Editar comandos– Crear y ejecutar scripts

• Ejemplos:– Cliente isql– Cliente Advantage– Cliente Oracle– Cliente Manager de Microsoft

Page 11: Conceptos de Bases de Datos Relacionales Parte 1

Creación de TablasCreación de TablasCreación de TablasCreación de Tablas

Page 12: Conceptos de Bases de Datos Relacionales Parte 1

Diseño de Tablas

• Una Tabla es un objeto de base de datos que almacena datos en filas y columnas

• Antes de crear una tabla, se debe diseñar su estructura:1. Darle nombre a la tabla y a cada columna2. Seleccionar un tipo de dato para cada columna3. Escoger las propiedades de cada columna

Page 13: Conceptos de Bases de Datos Relacionales Parte 1

Datatype• Un tipo de datos (datatype) es un atributo asignado a una

columna que especifica el tipo de información que puede almacenarse en esa columna

Page 14: Conceptos de Bases de Datos Relacionales Parte 1

Seleccionar Datatypes

• Para seleccionar el datatype de una columna:1. Determinar el conjunto posible de valores2. Determinar la precisión requerida3. Encontrar el datatype que:– Pueda guardar todos los posibles valores– Proporcione la exactitud y precisión requeridas– Use eficientemente el almacenamiento– Facilite el futuro crecimiento

Page 15: Conceptos de Bases de Datos Relacionales Parte 1

Categorías de Datatypes• Números exactos

Números con exactitud y precisión predecibles• Números aproximados

Números con valores dependiendo de exactitud y precisión del almacenamiento

• Money Valores para pesos

• Date y timeValores de fechas y horas

• Character Para strings caracteres

• Binary Información binaria (como imágenes, video y bits)

Page 16: Conceptos de Bases de Datos Relacionales Parte 1

Ejemplos de Datatypes por Categorías

• Números exactosinteger, numeric (p,s), decimal (p,s)

• Números aproximados float (p), real, double precision (dependientes de máquina)

• Money money

• Date y timedatetime

• Character char (n), varchar (n), text

• Binary bit, binary, varbinary, image

Page 17: Conceptos de Bases de Datos Relacionales Parte 1

Datatypes definidos por el Usuario• Un datatype definido por el usuario es un datatype creado

por el usuario de un datatype del sistema• Muy útil para asegurar consistencia de múltiples columnas

que almacenan el mismo conjunto de valores

Page 18: Conceptos de Bases de Datos Relacionales Parte 1

Propiedades de las Columnas

• Una columna puede tener una de las siguientes propiedades:– NULL– NOT NULL– IDENTITY

• Si no se especifica, generalmente se asume NOT NULL

Page 19: Conceptos de Bases de Datos Relacionales Parte 1

Valores tipo NULL

• Un NULL representa un valor desconocido o que no aplica– Para valores numéricos, NULL no es igual a 0– Para caracteres, NULL no es igual a '' '' (caracter en

blanco)

• NULL no se considera considera menor que, mayor que, o igual a cualquier otro valor

• Dos NULL no se consideran iguales

Page 20: Conceptos de Bases de Datos Relacionales Parte 1

Propiedades de NULL

• Una columna con la propiedad NULL permite NULLs– Esto se conoce como nullable column

• Una columna con la propiedad NOT NULL no permite NULLs

• Una columna que no se le especifique esta propiedad asume que permite NULLs

Page 21: Conceptos de Bases de Datos Relacionales Parte 1

Propiedad IDENTITY• La propiedad IDENTITY hace que el sistema asigne

automáticamente valores únicos a cada fila

• Cuando se insertan datos en una tabla, el servidor automáticamente asigna un número secuencial a la columna que tiene la propiedad de IDENTITY

Page 22: Conceptos de Bases de Datos Relacionales Parte 1

Reglas para columnas con IDENTITY

• Sólo puede existir una por tabla• Debe de ser de tipo numérico sin posiciones decimales

– Ejemplo: numeric(5,0)• No se puede actualizar• No acepta valores tipo NULL• Inicia por default en 1

– Se puede asignar un valor de arranque

Page 23: Conceptos de Bases de Datos Relacionales Parte 1

Crear Tablas

• Sintaxis Simplificada para create :

CREATE TABLE table_name (column_name datatype [ NULL | NOT NULL |

IDENTITY ] ,...column_name datatype [ NULL | NOT NULL |

IDENTITY ] )

Page 24: Conceptos de Bases de Datos Relacionales Parte 1

Crear Tabla

create table empleado (

emp_id numeric(4,0) IDENTITY,

apellido varchar(30) NOT NULL,

nombre varchar(30) NOT NULL,

e_mail char(6) NULL,

departamento typ_ch_deptid )

Page 25: Conceptos de Bases de Datos Relacionales Parte 1

Borrar Tablas

• Sintaxis Simplificada para drop:DROP TABLE table_name

• Ejemplo:drop table empleado

Page 26: Conceptos de Bases de Datos Relacionales Parte 1

Recomendaciones para desarrollo

• Crear todos los objetos (incluyendo tablas) en scripts y grabarlos– Facilita la recreación de los objetos– Sirve como material permanente de referencia– Especialmente importante para tablas

• Especificar una propiedad para cada columna• Usar tipos de datos de usuario para columnas que

almacenen el mismo conjunto de valores

Page 27: Conceptos de Bases de Datos Relacionales Parte 1

Cláusula default

• La cláusula default hace que el servidor dé un valor cuando el valor no se proporciona explícitamente al hacer un insert

• Sintaxis Simplificada :create table table_name (

column_name datatype default default_value [property],...)

Page 28: Conceptos de Bases de Datos Relacionales Parte 1

Modificación de cláusulas default

• Sintaxis Simplificada:alter table table_namereplace column_name default default_value

• A pesar de que la sintaxis usa la palabra “replace”, el comando alter table se puede usar para añadir cláusulas default a una tabla

Page 29: Conceptos de Bases de Datos Relacionales Parte 1

Ejemplo de modificación de cláusulas default

alter table publicareplace ciudad default “Cali"

alter table publicareplace depto default “Valle”

Page 30: Conceptos de Bases de Datos Relacionales Parte 1

Tablas y Permisos• Para permitir que otros usuarios puedan consultar,

manipular los datos o hacer referencia a una tabla, se deben dar permisos

• Sintaxis Simplificada:grant { select | insert | update | delete | reference | all }on table_nameto user_list

• Ejemplo:grant select on empleado to juan, sandra, pablo

Page 31: Conceptos de Bases de Datos Relacionales Parte 1

Adición de Columnas• Después de creada una tabla, se pueden añadir columnas• Algunos DBMS no permiten borrar directamente una

columna de una tabla– Para borrar una columna, se debe borrar y volver a crear la tabla

• Sintaxis para añadir una columna a una tabla:alter table table_nameadd column_name datatype NULL

[, column_name datatype NULL ...]

• Todas las columnas añadidas deben tener la propiedad NULL.

Page 32: Conceptos de Bases de Datos Relacionales Parte 1

Adicionar Columnas

alter table editoradd address varchar(40)NULL,

country varchar(20) NULL

Page 33: Conceptos de Bases de Datos Relacionales Parte 1

Copiar Tablas• select into es una extensión que se usa para crear una

copia de una tabla existente

Page 34: Conceptos de Bases de Datos Relacionales Parte 1

Sintaxis de select into

• Sintaxis Simplificada :select column_list into new_table_namefrom old_table_name[where condition]

Page 35: Conceptos de Bases de Datos Relacionales Parte 1

Ejemplos de select into

• Ejemplo de copiado de todas las columnas:select * into titles_copyfrom titles

• Ejemplo de copiado de algunas columnas :select title_id, title, type into titles_copy from titles

Page 36: Conceptos de Bases de Datos Relacionales Parte 1

Ejemplos de select into

• Ejemplo que copia algunos datos:select * into titles_copyfrom titleswhere price > $12.00

• Ejemplo que no copia datos:– Porque la cláusula where siempre da falso, se copia la

estructura de la tabla pero no sus datosselect * into titles_copyfrom titleswhere 1 = 2

Page 37: Conceptos de Bases de Datos Relacionales Parte 1

• DML es uno de los tres grupos principales de sentencias SQL

• Comprende cuatro sentencias:– insert añade datos a una tabla– update actualiza datos existentes en una tabla– delete borra datos de una tabla– select consulta datos de una tabla

Data Manipulation Language

Page 38: Conceptos de Bases de Datos Relacionales Parte 1

Sintaxis para insert

• sintaxis Simplificada:insert [into] table_name [(column_list)]{ values (value_list) | select_statement }

• Ejemplos:insert into editorvalues ("736", “Nuevas BD", “Pasto", “Nariño")

insert into editor (nombre, pub_id)values (“Prensa Actual", "2003”)

Page 39: Conceptos de Bases de Datos Relacionales Parte 1

Extensión SQL para insert

• Se pueden insertar múltiples filas en un solo insert utilizando un select embebido

• Ejemplo:insert into editorselect * from pub..editor

• Las columnas en las que se van a insertar datos deben tener los mismos tipos de datos que resulten de las columnas del query

Page 40: Conceptos de Bases de Datos Relacionales Parte 1

Sintaxis para update

• Sintaxis Simplificada :update table_nameset column1 = { expression | select_statement }

[, column2 = { expression | select_statement } ...][from table_list][where condition]

• Ejemplos:update titles set price = price * $1.25

update authorsset address = "1224 Mason Ct.",

phone = "415 773-2882"where au_id = "427-17-2319"

Page 41: Conceptos de Bases de Datos Relacionales Parte 1

Extensión para update

• Se pueden encadenar condiciones en la cláusula where de un update

• Ejemplo:update tituloset precio = precio * $0.90from titulo t, editor pwhere t.pub_id = p.pub_idand p.state = “Nariño"

Page 42: Conceptos de Bases de Datos Relacionales Parte 1

Extensión case

• La expresión case es una extensión SQL que puede estar embebida en un update

• case permite el retorno condicional de un valor de dos o más posibles

• Dos estructuras sintácticas para case– Basada en expresiones– Basada en condiciones

Page 43: Conceptos de Bases de Datos Relacionales Parte 1

Sintaxis para when expression• Sintaxis:case expression

when expression then expression[when expression then expression ...][else expression]

end

• Ejemplo:update titulo

set tipo = case tipo

when "mod_cook" then "modcook"when "trad_cook" then "tradcook"when "popular_comp" then "popularcomp"

endwhere tipo in ("mod_cook", "trad_cook",

"popular_comp")

Page 44: Conceptos de Bases de Datos Relacionales Parte 1

Sintaxis para when condition• Sintaxis:

casewhen condition then expression[when condition then expression ...][else expression]

end• Ejemplo:update titulo set precio =

casewhen tipo = "business" then precio * $1.03when tipo = "mod_cook" then precio * $1.05when tipo = "trad_cook" and pub_id = "0736"

then precio * $1.07when tipo = "trad_cook" and pub_id = "0877"

then precio * $1.10else precio

end

Page 45: Conceptos de Bases de Datos Relacionales Parte 1

Sin la cláusula else

• Si ninguna de las condiciones del case se cumple y no existe un else, case retorna NULL

• Ejemplo:update titulo

set precio =case tipo

when "trad_cook" then precio * 1.07when "mod_cook" then precio * 1.03when "business" then precio * 1.05

end

Page 46: Conceptos de Bases de Datos Relacionales Parte 1

Reglas para case

• Solo puede retornar valores– A diferencia del case de la mayoría de los lenguajes de

programación, el case del SQL no ejecuta sentencias• Se puede utilizar en cualquier sitio donde se pueda

escribir una expresión• Debe retornar un valor compatible con el tipo de dato• Al menos una cláusula (la cláusula when o la cláusula

else) deben retornar un valor no NULL

Page 47: Conceptos de Bases de Datos Relacionales Parte 1

Sintaxis para delete

• Sintaxis Simplificada:delete [from] table_name[where condition]

• Ejemplos:delete from editor

delete from titulowhere tipo = "business"

delete from autorwhere au_fname = "Luis"and au_lname = “Caicedo"

Page 48: Conceptos de Bases de Datos Relacionales Parte 1

Extensión para delete• Se pueden encadenar condiciones en la cláusula

where de un delete• Sintaxis simplificada :

delete table_namefrom table_list[where join_condition]

• Ejemplodelete titlesfrom titles t, publishers pwhere t.pub_id = p.pub_idand p.state = "CA"

Page 49: Conceptos de Bases de Datos Relacionales Parte 1

truncate table• truncate table borra todas las filas de una tabla

– La operación se ejecuta más rápido que la correspondiente sentencia delete

– El comamdo no se puede usar para borrar algunas filas de la tabla

• Sintaxis simplificada:truncate table table_name

• Ejemplo:truncate table publishers

Page 50: Conceptos de Bases de Datos Relacionales Parte 1

Registro de Transacciones (Log)

• El registro de transacciones se utiliza para recuperar los datos en el evento de un error del usuario o falla del sistema

• Actúa ante cada insert, update, y delete

• Algunas operaciones no se registran– Ejemplo de operaciones sin registro:

• select into• truncate table

Page 51: Conceptos de Bases de Datos Relacionales Parte 1
Page 52: Conceptos de Bases de Datos Relacionales Parte 1

Sentencia select• La sentencia select consulta datos• Sintaxis simplificada:

select column_listfrom table_name[where condition][group by column_list][having condition][order by column_list]

• Ejemplo:select type, avg(price)

from titleswhere type not in ("mod_cook", "trad_cook")group by typehaving avg(price) > $12.00order by type

Page 53: Conceptos de Bases de Datos Relacionales Parte 1

select y case

• case permite el retorno condicional de valores• case puede estar embebido en sentencias select

– Ejemplo:select title, "Contract Status" =

case contractwhen 1 then "Contract"when 0 then "No contract"

endfrom titles

title Contract Status----- ---------------...But Is It User Friendly? ContractThe Psychology of Computer... No contractSecrets of Silicon Valley Contract...

Page 54: Conceptos de Bases de Datos Relacionales Parte 1

Vista

• Una vista es un objeto de base de datos que consiste de una sentencia select almacenada

• Usada para:– Simplificar la construcción de consultas complejas– Simplificar al usuario la percepión de la base de datos– Limitar el acceso a los datos

Page 55: Conceptos de Bases de Datos Relacionales Parte 1

Crear y borrar vistas• Sintaxis Simplificada para crear una vista :

create view view_name [(column1 [, column2...])as

select_statement[with check option]

• Ejemplo:create view vw_california_authorsas

select au_id, au_lname, au_fname, state, phonefrom authorswhere state = "CA"

• Sintaxis simplificada para borrar una vista:drop view view_name

• Ejemplo:drop view vw_california_authors

Page 56: Conceptos de Bases de Datos Relacionales Parte 1

Vistas y permisos

• Para permitir que otros utilicen una vista, se deben dar permisos:grant [ select | insert | update | delete | all ]

on view_nameto user_list

• Ejemplo:grant select

on vw_california_authorsto clerk1, clerk2, clerk3, clerk4

Page 57: Conceptos de Bases de Datos Relacionales Parte 1

Consultar datos usando vistas

• Para consultar datos usando vistas, usar el nombre de la vista como si se tratara de una tabla

• Ejemplo:

select * from vw_california_authors

au_id au_lname au_fname state phone----- -------- -------- ----- -----172-32-1176 White Johnson CA 408 496-7223213-46-8915 Green Marjorie CA 415 986-7020238-95-7766 Carson Cheryl CA 415 548-7723267-41-2394 O'Leary Michael CA 408 286-2428274-80-9391 Straight Dick CA 415 834-2919...(15 rows affected)

Page 58: Conceptos de Bases de Datos Relacionales Parte 1

Modificar datos usando vistas

• Se pueden modificar datos usando vistas si:– Todas las columnas involucradas están en una tabla– Todas las columnas no usadas en la vista ni permiten NULLs,

contienen la cláusula default o contienen columnas con IDENTITY– Ejemplo:insert into vw_california_authors

values ("123-54-8808", "Chen", "Rose", "CA","415 239-6467")

• Se pueden actualizar datos usando vistas si:– Todas las columnas involucradas están en una tabla

• Se pueden borrar datos usando vistas si:– La vista está basada en una sola tabla– Ejemplo:delete from vw_california_authorswhere au_lname = "Hunter"

Page 59: Conceptos de Bases de Datos Relacionales Parte 1

Usar vistas para simplificar el acceso• Las vistas pueden simplificar el acceso a los datos

almacenando las consultas complejas (tales como joins)

• Ejemplo:create view vw_pub_title_join (publisher, title)as

select pub_name, titlefrom publishers, titleswhere publishers.pub_id = titles.pub_id

goselect * from vw_pub_title_join

pub_name title-------- -----New Age Books You Can Combat Computer StressNew Age Books Is Anger the Enemy?...

Page 60: Conceptos de Bases de Datos Relacionales Parte 1

Usar vistas para restringir acceso• Una vista puede permitir a los usuarios acceder a una parte de la tabla

cuando el acceso al contenido total de la tabla está restringido

create view vw_california_authorsas

select au_id, au_lname, au_fname, state, phonefrom authorswhere state = "CA"

gogrant all on vw_california_authors to publicrevoke all on authors from public

Page 61: Conceptos de Bases de Datos Relacionales Parte 1

Opción with check

• with check option restringe cómo se pueden modificar las filas. Una operación falla si:– Tratar de insertar filas que las vista no puede ver– Tratar de modificar filas que las vista no puede ver

• Ejemplo:create view vw_kansas_authorsas

select au_id, au_lname, au_fname, state, phonefrom authorswhere state = "KS"with check option

• Ejemplo de modificación que da error:update vw_kansas_authors

set state = "MO" where state = "KS"

Page 62: Conceptos de Bases de Datos Relacionales Parte 1

Reglas para vistas

• La definición de una vista puede incluir:– Una cláusula where– Una columna con valores calculados (ej. precio * cant)– Funciones Agregadas, una cláusula group by, y una cláusula

having– distinct– Un join– Otra vista (hasta 16 niveles)

• Una definición de una vista no puede incluir:– Una cláusula order by– Una cláusula compute o compute by– select into

Page 63: Conceptos de Bases de Datos Relacionales Parte 1

Ejemplos con vistas

• Crear dos tablas:select * into mytitles

from pubs2..titlesselect * into mypublishers

from pubs2..publishers

• Crear vista que muestra titles y sus publishers vía un join:create view vw_titles_pubs (title, publisher)as

select title, pub_namefrom mytitles, mypublisherswhere mytitles.pub_id = mypublishers.pub_id

• Usar la vista para mostrar los titles y sus publishers:select * from vw_titles_pubs

Page 64: Conceptos de Bases de Datos Relacionales Parte 1

• Ejecute las siguientes sentencias, cuáles pueden o no fallar. Si la Sentencia falla, explique por qué:select price from vw_titles_pubs

_______________________________update vw_titles_pubs

set publisher = "New Millenium Books"where publisher = "New Age Books"

_______________________________insert into vw_titles_pubs

values ("Life in Houston", "TexTitles")

________________________________• Borrar los objetos creados:

drop view vw_titles_pubsdrop table mytitles, mypublishers

Page 65: Conceptos de Bases de Datos Relacionales Parte 1

Table scan

• Un table scan es una búsquda en donde se leen todas las filas de una tabla

• Una tabla que no tenga índices creados, solamente puede hacer búsquedas a través de un table scan

Page 66: Conceptos de Bases de Datos Relacionales Parte 1

Indices

• Un índice es un objeto de base de datos que ayuda al servidor a encontrar un dato más rápidamente

Page 67: Conceptos de Bases de Datos Relacionales Parte 1

Estructura de un Indice : Caso de Estudio

key

PAGE 1001PAGE 1001BennetKarsen Smith

1421, 11876, 11242, 1

100713051062

PAGE 1132PAGE 11321421, 11129, 31409, 1

BennetChanDullEdwards 1018, 5

PAGE 1007PAGE 1007BennetGreane Hunter

1421, 11242, 41242, 1

113211331127

pgptr

rowptr

PAGE 1305PAGE 1305Karsen

1876, 1

1311

keypgptr

rowptr

PAGE 1133PAGE 11331242, 41421, 21409, 2

GreaneGreenGreene

PAGE 1127PAGE 11271242, 11241, 4

HunterJenkins

PAGE 1241PAGE 1241O’LearyRingerWhiteJenkins

10111213

PAGE 1242PAGE 1242HunterSmithRingerGreane

14151617

PAGE 1421PAGE 1421BennetGreenRinger

181920

PAGE 1409PAGE 1409DullGreeneWhite

212223

(more pages)(more pages)

(more pages)

authors table(data pages)Index pages

create index idx_authors_2

on authors(au_lname)

Page 68: Conceptos de Bases de Datos Relacionales Parte 1

Crear y borrar índices

• Sintaxis simplificada para create :create [unique] [ clustered | nonclustered ]index index_name on table_name (column1 [, column2] ... )

• Ejemplo:create clustered index idx_c_titles_1on titles (title_id)

• Sintaxis Simplicada para drop :drop index table_name.index_name

• Ejemplo:drop index titles.idx_c_titles_1

Page 69: Conceptos de Bases de Datos Relacionales Parte 1

Atributos de los índices

• Tres atributos describen cada índice– El número de columnas sobre las cuales se declara el índice

• Una columna – índice no-compuesto• Múltiples columnas - índice compuesto

– Si el índice acepta o no valores duplicados• Se permiten valores duplicados - índice no-único• No se permiten valores duplicados - índice único

– Si están o no ordenados los datos en la tabla por el concepto del índice cuando la tabla se crea

• Datos ordenados durante la creación - índice cluster• Datos no ordenados durante la creación - índice no-cluster

Page 70: Conceptos de Bases de Datos Relacionales Parte 1

Indice no-compuesto

• Un índice no-compuesto es un índice creado sobre una columna– Ejemplo:create index idx_authors_2on authors(state)

• Apropiado cuando las consultas se hacen frecuentemente sobre una sola columna– Ejemplo:select * from authorswhere state = "UT"

Page 71: Conceptos de Bases de Datos Relacionales Parte 1

Indice compuesto

• Un índice compuesto es un índice creado sobre dos o más columnas– Ejemplo:create index idx_authors_3on authors(au_lname, au_fname)

• Apropiado cuando las consultas se hacen sobre múltiples columnas– Ejemplo:select * from authorswhere au_lname = "Ringer" and au_fname = "Anne"

Page 72: Conceptos de Bases de Datos Relacionales Parte 1

Indice no-único

• Un Indice No-único es un índice que permite valores duplicados– Ejemplo:create index idx_authors_2on authors(state)

• Apropriado cuando las consultas se hacen sobre valores duplicados– Ejemplo:select * from authorswhere state = "UT"

Page 73: Conceptos de Bases de Datos Relacionales Parte 1

Indice único

• Un índice único es un índice que no permite valores duplicados– Ejemplo:create unique index idx_u_authors_1on authors(au_id)

• Apropiado cuando cada valor en la columna indizada debe ser único– Ejemplo:select * from authorswhere au_id = "213-46-8915"

• Puede ser creado solamente sobre columnas que no tengan valores duplicados

Page 74: Conceptos de Bases de Datos Relacionales Parte 1

Indice no-cluster

• Un índice no-cluster es un índice que utiliza un concepto de ordenamiento diferente a como se realizó el almacenamiento de la tabla– Ejemplo:create nonclustered index idx_authors_4on authors(state)

• Una tabla puede tener muchos índices no-cluster• Apropiado para:

– Tablas que ya tienen un índice cluster

Page 75: Conceptos de Bases de Datos Relacionales Parte 1

Estructura de un índice no-cluster

PAGE 1132PAGE 11321421, 11129, 31409, 1

BennetChanDullEdwards 1018, 5

PAGE 1007PAGE 1007BennetGreane Hunter

1421, 11242, 41242, 1

113211331127

keypgptr

PAGE 1001PAGE 1001BennetKarsen Smith

1421, 11876, 11242, 1

100713051062

rowptr

PAGE 1305PAGE 1305Karsen

1876, 1

1311

keypgptr

rowptr

PAGE 1133PAGE 11331242, 41421, 21409, 2

GreaneGreenGreene

PAGE 1127PAGE 11271242, 11241, 4

HunterJenkins

PAGE 1241PAGE 1241O’LearyRingerWhiteJenkins

10111213

PAGE 1242PAGE 1242HunterSmithRingerGreane

14151617

PAGE 1421PAGE 1421BennetGreenRinger

181920

PAGE 1409PAGE 1409DullGreeneWhite

212223

(more pages)(more pages)

(more pages)

authors table(data pages)

Index pages

root level intermediate level leaf levelkey row ptr

create index idx_authors_2

on authors(au_lname)

Page 76: Conceptos de Bases de Datos Relacionales Parte 1

Indice cluster• Un índice cluster es un índice que, cuando se crea, indica cómo

están físicamente almacenados los datos en la tabla– Ejemplo:

create clustered index idx_c_authors_1 on authors(au_id)

• Una tabla sólo puede contener un índice cluster• Típicamente mejora el rendimientos de las consultas que se

hacen a una tabla– Consultas con valor único (where state = ''CA'')– Consultas por rango de valores (where price > $10.00)

• Puede dismuir el rendimiento en operaciones de modificación de los datos de una tabla– Esta reducción se debe a que se deben almacenar físicamente los

datos ordenados

Page 77: Conceptos de Bases de Datos Relacionales Parte 1

Etructura de un índice cluster

PAGE 1007PAGE 1007BennetGreane Hunter

124112421421

key pg ptr

PAGE 1001PAGE 1001BennetKarsen Smith

100713051062 PAGE 1305PAGE 1305

Karsen

1409

key pg ptr

PAGE 1241PAGE 1241BennetChanDullEdwards

10111213

PAGE 1242PAGE 1242GreaneGreenGreene

14151617

PAGE 1421PAGE 1421HunterJenkins

181920

PAGE 1409PAGE 1409KarsenO'LearyRinger

212223

(more pages)

(more pages)

authors table(leaf/data pages)

Index pages

root level intermediate level

create clustered index idx_authors_2

on authors(au_lname)

Page 78: Conceptos de Bases de Datos Relacionales Parte 1

Escritura de consultas que usen índices

• Los índice se usan solamente cuando una consulta hace referencia a columna(s) indizada(s) en la cláusula where

• Si una tabla:– Tiene dos columnas, y– Cualquiera puede identificar una fila desada, y– Una columna está indizada mientras la otra no, entonces– Se debe utilizar la columna indizada en la cláusula where de

la consulta

Page 79: Conceptos de Bases de Datos Relacionales Parte 1

Ejemplo usando índices

• crear una tabla:create table novels (

book_id int,title varchar(40),author varchar(40)

)

• Insertar tres filas:insert into novels

values (1, "Congo", "M Crichton")insert into novels

values (2, "The Client", "J Grisham")insert into novels

values (3, "Jurassic Park", "M Crichton")

Page 80: Conceptos de Bases de Datos Relacionales Parte 1

• Ejecutar las sentencias (una fallará):create clustered index idx_c_novels_1 on

novels(book_id)create unique index idx_u_novels_2 on

novels(author)

• ¿Qué sentencia falla? ¿Por qué?________________________________________

• Borrar los objetos creados:drop index novels.idx_c_novels_1drop table novels

Page 81: Conceptos de Bases de Datos Relacionales Parte 1

Prácticas recomendadas para desarrollo

• Crear todos los objetos en scripts y guardarlos– Agrupar las sentencias por objetos mas que por funciones

• Crear la primer tabla y todos los objetos (vistas, índices, y así sucesivamente) asociados con esa tabla

• crear la segunda tabla y todos sus objetos asociados• No crear primero todas las tablas, luego todas las vistas, luego

todos los índices, y así sucesivamente• Dar los permisos a un objeto, al final del script que lo

define– Primero retirar todos los permisos grupales, y luego dar los

permisos individuales

Page 82: Conceptos de Bases de Datos Relacionales Parte 1

Tabla temporal

• Una tabla temporal es a tabla que eventualmente la borra el servidor sin que se ejecute la sentencia drop table

• Típicamente existen dos tipos de tablas temporales:– Compartidas (Shareable)– De sesión específica

Page 83: Conceptos de Bases de Datos Relacionales Parte 1

Uso de tablas temporales

• Uso de tablas temporales:– Por el usuario:

• Para guardar resultados de consultas muy complejas• Para almacenar resultados intermedios (por ejemplo de stored

procedure)– Por el sistema:

• Para almacenar resultados intermedios de consultas que requieren ordenamiento o eliminación de valores

• Para almacenar resultados intermedios de consultas que tienen la cláusula compute o agregadas

Page 84: Conceptos de Bases de Datos Relacionales Parte 1

Tablas del sistema

• Una tabla del sistema es una tabla creada y mantenida por el servidor que almacena información acerca del servidor o de sus bases de datos

Page 85: Conceptos de Bases de Datos Relacionales Parte 1
Page 86: Conceptos de Bases de Datos Relacionales Parte 1

Integridad de datos

• Tres tipos de integridad ayudan a garantizar que los datos son correctos

• integridad a nivel de dominio– Asegura que cualquier valor en una columna está dentro del

conjunto de valores válidos para esa columna• integridad a nivel de entidad

– Asegura que cualquier fila de una tabla puede identificarse inequívocamente

• integridad referencial– Asegura que un determinado valor no puede escribirse en una

tabla si ese valor no existe en otra tabla

Page 87: Conceptos de Bases de Datos Relacionales Parte 1

Dos métodos para forzar integridad

Domain

Integrity Entity Integrity Referential

Integrity

Constraints

Check constraints

Primary key constraints, unique constraints

References constraints

Database Objects

Rules Indexes Triggers

Page 88: Conceptos de Bases de Datos Relacionales Parte 1

Constraint• Un constraint es un elemento de la sentencia create table

que forza uno de los tres tipos de integridad de datos– Declarada a nivel de columna o de tabla

• Los constraints también se conocen como “declarative integrity”

Page 89: Conceptos de Bases de Datos Relacionales Parte 1

Integridad a nivel de dominio

• La integridad a nivel de Dominio asegura que cualquier valor en una columna está dentro del conjunto de valores aceptables para esa columna

Page 90: Conceptos de Bases de Datos Relacionales Parte 1

Restricción Check

• Un check constraint forza integridad a nivel de Dominio durante las adiciones y actualizaciones– Si una sentencia contiene un valor que no concuerda con los

permitidos, la sentencia falla

Page 91: Conceptos de Bases de Datos Relacionales Parte 1

Restricción check a nivel de columna • Sintaxis Simplificada:

create table table_name (column_name datatype [ NULL | NOT NULL | IDENTITY ]

[constraint constraint_name]check (condition_using_column_name) ,...column_name datatype [ NULL | NOT NULL |

IDENTITY ] )

• Ejemplo:create table publishers (

pub_id char(4) NOT NULLconstraint chk_pub_idcheck (pub_id like "99[0-9][0-9]"),

pub_name varchar(40) NULL,city varchar(20) NULL,state char(2) NULL

)

Page 92: Conceptos de Bases de Datos Relacionales Parte 1

Nombre de restricción a nivel de columna

• Si un usuario no da el nombre de una restricción a nivel de columna, el servidor genera uno

• Para simplificar la administración, el usuario debería escribir el nombre de todos los constraints

– El nombre de un Constraint debe ser único a nivel de la base de datos

Page 93: Conceptos de Bases de Datos Relacionales Parte 1

Restricción a nivel de tabla

• Sintaxis Simplificada:create table table_name (

column_name datatyp [ NULL | NOT NULL | IDENTITY ] ,...column_name datatype [ NULL | NOT NULL | IDENTITY ],

[constraint constraint_name]check (condition_involving_any_column_or_columns)

)

• Ejemplo:create table discounts (

discounttype varchar(40) NOT NULL,stor_id char(4) NULL,lowqty smallint NULL,highqty smallint NULL,discount float NOT NULL,

constraint chk_low_high check (lowqty <= highqty))

Page 94: Conceptos de Bases de Datos Relacionales Parte 1

Restricciones y defaults

• Los servidores permiten que una tabla tenga default y check sin que haya contradicción

• Ejemplo (cualquier insert que use el default fallará):create table publishers (

pub_id char(4)NOT NULL,pub_name varchar(40) NULL,city varchar(20) default "Tulsa" NULL,state char(2) default "OK"

NULL,constraint chk_statecheck (state in ("CA", "OR", "WA", "NV"))

)

insert into publishers (pub_id, pub_name)values ("9909", "Failed Imprints")

Page 95: Conceptos de Bases de Datos Relacionales Parte 1

Ejemplos de restricción

• Crear una tabla con restricción check y default:create table employees (

emp_id intconstraint chk_emp_idcheck (emp_id > 500),

dept_id int default 1300,name varchar(40)

)• Ejecutar estas sentencias (una fallará):

insert into employees (emp_id, dept_id, name)values (252, 1200, "Mike Yates")

insert into employees (emp_id, dept_id, name)values (719, 1500, "David Benton")

insert into employees (emp_id, name)values (801, "Alistair Stewart")

Page 96: Conceptos de Bases de Datos Relacionales Parte 1

¿Cuál fallará? ¿Por qué?_______________________________________________

Verificar que dos de los tres inserts se han ejecutado:select * from employees

Ninguno de los inserts contiene el valor 1300, sin embargo una de las filas de la tabla contiene el valor 1300. ¿Cuándo y cómo se insertó este valor?________________________________________________

Borrar los objetos creados de la base de datos:drop table employees

Page 97: Conceptos de Bases de Datos Relacionales Parte 1

Integridad a nivel de entidad

• La integridad a nivel de entidad asegura que cada fila de una tabla está identificada de manera inequívoca

Page 98: Conceptos de Bases de Datos Relacionales Parte 1

Primary key• Combinación de una o más columnas que identifican de

manera inequívoca una fila en una tabla

Page 99: Conceptos de Bases de Datos Relacionales Parte 1

Restricción primary key

• Una restricción primary key asegura integridad a nivel de entidad

• Crea un índice único sobre la columna(s) especificada(s)• Se asegura integridad en los inserts y updates• Sólo puede existir una llave primaria por tabla

Page 100: Conceptos de Bases de Datos Relacionales Parte 1

Indices creados por primary key

• Unico• Cluster• No permite valores NULL en la(s) columna(s)• No se puede borrar usando la sentencia drop

index

Page 101: Conceptos de Bases de Datos Relacionales Parte 1

Primary key a nivel de columna• Sintaxis Simplificada:

create table table_name (column_name datatype [ NOT NULL | IDENTITY ]

[constraint constraint_name]primary key [clustered | nonclustered],

...column_name datatype [ NULL | NOT NULL | IDENTITY

])

• Ejemplo:create table publishers (

pub_id char(4) NOT NULLconstraint pky_c_pub_idprimary key,

pub_name varchar(40) NULL,city varchar(20) NULL,state char(2) NULL

)

Page 102: Conceptos de Bases de Datos Relacionales Parte 1

Primary key a nivel de tabla• Sintaxis Simplificada:create table table_name (

column_name datatype [ NULL | NOT NULL | IDENTITY ],

...column_name datatype [ NULL | NOT NULL |

IDENTITY ][constraint constraint_name]primary key (column1 [, column2...])

)

• Ejemplo:create table sales (

stor_id char(4) NOT NULL,ord_num varchar(20) NOT NULL,date datetime NOT NULL,

constraint pky_c_storid_ordnum primary key (stor_id, ord_num))

Page 103: Conceptos de Bases de Datos Relacionales Parte 1

Restricción unique

• Una restricción unique forza integridad a nivel de entidad• Crea un índice único sobre la columna(s) specificada(s)• Asegura integridad durante los inserts y updates• Las tablas pueden tener más de una restricción tipo unique

Page 104: Conceptos de Bases de Datos Relacionales Parte 1

Indices creados con restrición unique

• Unico• No-cluster por default• Permite el uso de valores tipo NULL• No se puede borrar usando la sentencia drop

index

Page 105: Conceptos de Bases de Datos Relacionales Parte 1

Restricción unique a nivel de columna

• Sintaxis Simplificada:create table table_name (

column_name datatype [ NULL | NOT NULL | IDENTITY ]

[constraint constraint_name]unique [clustered | nonclustered],

...column_name datatype [ NULL | NOT NULL | IDENTITY ]

)• Ejemplo:create table publishers (

pub_id char(4) NOT NULL,pub_name varchar(40) NULL

constraint unq_pub_nameunique,

city varchar(20) NULL,state char(2) NULL

)

Page 106: Conceptos de Bases de Datos Relacionales Parte 1

Restricción unique a nivel de tabla • Sintaxis Simplificada:create table table_name (

column_name datatype [ NULL | NOT NULL | IDENTITY ],

...column_name datatype [ NULL | NOT NULL |

IDENTITY ][constraint constraint_name]unique (column1 [, column2...])

)

• Ejemplo:create table sales (

stor_id char(4) NOT NULL,ord_num varchar(20) NOT NULL,date datetime NOT NULL,

constraint unq_stor_id_ord_num unique (stor_id, ord_num))

Page 107: Conceptos de Bases de Datos Relacionales Parte 1

Restricciones primary key vs unique

What is the

default type of index?

How many NULL values does it allow?

Can you have more than one per table?

Primary Key Constraint

Clustered

None No

Unique Constraint

Nonclustered One Yes

Page 108: Conceptos de Bases de Datos Relacionales Parte 1

Integridad referencial

• Integridad referencial asegura un valor no se puede almacenar en una tabla a menos que él exista en otra tabla (o es NULL)

• Ejemplo:– A publisher ID cannot be entered in the titles table unless it

exists in the publishers table

Page 109: Conceptos de Bases de Datos Relacionales Parte 1

Foreign key

• Una foreign key es una combinación de una o más columnas que corresponde(n) a la llave primaria de otra tabla

Page 110: Conceptos de Bases de Datos Relacionales Parte 1

Restricción referencial• Una restricción referencial forza integridad referencial• La integritdad se asegura en inserts, updates, y deletes

– Si un insert o update contiene valores de foreign key que no existen en la(s) column(s) primary key, la sentencia falla

– Si un update o delete va a quitar un valor de primary key que tiene valores foreign key existentes, la sentencia falla

Page 111: Conceptos de Bases de Datos Relacionales Parte 1

Restricción referencial a nivel de columna• Sintaxis Simplificada:create table table_name (

column_name datatype [ NULL | NOT NULL | IDENTITY ]

[constraint constraint_name]references table_name

(primary_key_column),...column_name datatype [ NULL | NOT NULL | IDENTITY ]

)• Ejemplo:create table titles (

title_id char(6) NOT NULL,title varchar(80) NULL,pub_id char(4) NULL

constraint ref_pub_idreferences publishers (pub_id),

notes varchar(200) NULL)

Page 112: Conceptos de Bases de Datos Relacionales Parte 1

Restricción referencial a nivel de tabla• Sintaxis Simplificada:create table table_name (

column_name datatype [ NULL | NOT NULL | IDENTITY ],

...column_name datatype [ NULL | NOT NULL | IDENTITY ],

[constraint constraint_name]foreign key

(list_of_columns_from_this_table)references table_name

(primary_key_column_list) )• Ejemplo:create table salesdetail (

stor_id char(4) NOT NULL,ord_num varchar(20) NOT NULL,title_id char(6) NOT NULL,qty smallint NOT NULL,discount float NOT NULL,

constraint ref_salesforeign key (stor_id, ord_num)

references sales (stor_id, ord_num) )

Page 113: Conceptos de Bases de Datos Relacionales Parte 1

Reglas para restriciones referenciales• La(s) columna(s) en la tabla padre que es referenciada en una

tabla hija debe cumplir una de las siguientes condiciones:– Tener una restricción primary key constraint– Tener una restricción A unique constraint– Tener indice unico creado con el comando create index

• Una restricción referencial se puede referir a columnas dentro de la misma tabla– Ejemplo:create table employees (

emp_id char(10) NOT NULL,name varchar(40) NOT NULL,manager char(10) NOT NULL

constraint ref_managerreferences employees(emp_id)

)

Page 114: Conceptos de Bases de Datos Relacionales Parte 1

Restricciones sobre valores referenciales

• Modificación de valores sobre una primary key:– No se permite hacer update o delete si el valor existe en

una foreign key– Se permite hacer update o delete si el valor no existe en

una foreign key• Modificación de valores sobre foreign key:

– No se permite insert o update si el nuevo valor no existe en la correspondiente primary key

• Borrado de tablas con primary keys:– No se pueden borrar una tabla si su primary key está

referenciada en una foreign key

Page 115: Conceptos de Bases de Datos Relacionales Parte 1

Ejemplos de restricción referencial

• Crear la tabla customers con una primary key:create table customers (

customer_id intconstraint pk_cust primary key,

name varchar(40))

• Crear una tabla orders de tal forma que una orden no se pueda insertar a menos que exista un ID válido en customer. Usar una foreign key (customer_id) que se refiera a la primary de la otra tabla (customers.customer_id):create table orders (

item_name varchar(20),customer_id int

references customers (customer_id))

Page 116: Conceptos de Bases de Datos Relacionales Parte 1

• Insertar dos filas en customers:insert into customers values (101, "Liz Shaw")insert into customers values (102, "Jo Grant")

• Ejecutar estas sentencias (una fallará):insert into orders values ("widget", 102)insert into orders values ("gadget", 105)

• ¿Cuál insert falla? ¿Por qué?_____________________________________

• Ejecutar estas sentencias (una fallará):delete from customers where name = "Liz Shaw"delete from customers where name = "Jo Grant"

Page 117: Conceptos de Bases de Datos Relacionales Parte 1

• ¿Cuál delete falla? ¿Por qué?____________________________________

• Borrar los objetos de base de datos creados:drop table ordersdrop table customers

Page 118: Conceptos de Bases de Datos Relacionales Parte 1

Adición de restricciones• Sintaxis simplificada para añadir:alter table table_nameadd constraint constraint_name{ check (condition) | primary key (column_list) | unique (column_list) |foreign key (column_list) references table (column_list) }

• Ejemplos:alter table royschedadd constraint chk_hirange_lorangecheck (hirange > lorange)

alter table publishersadd constraint pky_pub_idprimary key (pub_id)

alter table titlesadd constraint ref_pub_idforeign key (pub_id)references publishers(pub_id)

Page 119: Conceptos de Bases de Datos Relacionales Parte 1

Borrado de restricciones

• Sintaxis simplificada para borrado:alter table table_namedrop constraint constraint_name

• Ejemplos:alter table royscheddrop constraint chk_hirange_lorange

alter table publishersdrop constraint pky_pub_id

alter table publishersdrop constraint unq_pub_name

alter table titlesdrop constraint ref_pub_id

Page 120: Conceptos de Bases de Datos Relacionales Parte 1

Ejemplos de restricciones

• Crear una table employees:create table employees (

emp_id int,name varchar(40),salary money

)

• Añadir una nueva restricción a la tabla:alter table employees

add constraint chk_salarycheck (salary between $1 and $70000)

• Tratar de insertar un empleado con un dato de salario inválido:insert into employees

values (01, "Sarah Jane Smith", 90000)

Page 121: Conceptos de Bases de Datos Relacionales Parte 1

• Borrar los objetos de base de datos creados:drop table employeesexec sp_dropmessage 20001

Page 122: Conceptos de Bases de Datos Relacionales Parte 1
Page 123: Conceptos de Bases de Datos Relacionales Parte 1

Default• Un default es un objeto de base de datos que

proporciona un valor a una columna cuando en un insert no se especifica un valor para esa columna

• Se puede aplicar a una o más columnas

Page 124: Conceptos de Bases de Datos Relacionales Parte 1

Crear y asignar defaults

• Sintaxis simplificada para Create:create default default_name as

constant_expression

• Ejemplo:create default def_state as

"CA"

• Asignación del default

Page 125: Conceptos de Bases de Datos Relacionales Parte 1

Reglas para asignar defaults

• Una columna solamente puede tener un default– Si se intenta asignar un default a una columna que ya

tiene un default, ese intento fallará• Una columna con una cláusula default no se le

puede asignar un default• Cuando un default se asigna, los datos en la tabla

no se ven afectados– Solamente aplica a los datos que se inserten después de

que se asigne el default

Page 126: Conceptos de Bases de Datos Relacionales Parte 1

Quitar y borrar defaults

• Quitar un default• Sintaxis simplificada para borrado:drop default default_name

• Ejemplo:drop default def_state

Page 127: Conceptos de Bases de Datos Relacionales Parte 1

Rule• Una rule es un objeto de base de datos que no permite

inserts y updates si la regla no se cumple– Como la restricción check, se puede utilizar para forzar

integridad a nivel de dominio• Una rule se puede asignar a una o más columnas

Page 128: Conceptos de Bases de Datos Relacionales Parte 1

Crear reglas

• Sintaxis simplificada:create rule rule_name as

condition_expression

• Ejemplos:create rule rul_state as

@state in ("CA", "CO", "WA")

create rule rul_discount_range as@discount between 0 and 20

create rule rul_file_date as@date < 12 or @date > 22

create rule rul_pub_id as@pub_id in ("1389", "0736", "0877") or@pub_id like "99[0-9][0-9]"

Page 129: Conceptos de Bases de Datos Relacionales Parte 1

Asignar reglas• Sintaxis simplificada:sp_bindrule rule_name, object_name

• Ejemplo:sp_bindrule rul_state, "publishers.state"

• Una columna solamente puede tener una rule– Si se asigna una regla a una columna, cualquier regla

asignada con anterioridad pierde validez• Una columna puede tener una restricción y una rule

asignadas a ella– Los valores deben cumplir ambas condiciones: la restricción

y la rule en operaciones de inserción o actualización• Cuando se asigna una regla, los valore existentes en la tabla

no se ven afectados– Solamente aplica a los datos que inserten después de que la

regla se asigna

Page 130: Conceptos de Bases de Datos Relacionales Parte 1

Desasignar y borrar reglas

• Desasignar reglas

• Sintaxis simplificada para drop :drop rule rule_name

• Ejemplo:drop rule rul_state

Page 131: Conceptos de Bases de Datos Relacionales Parte 1

Rules y defaults

• Crear una tabla:create table employees (

emp_id int,name varchar(20)

) • Crear una regla: los ID de los empleados debe ser

mayor que 10:create rule rul_employee

as @x > 10

• Crear un default de 5 para ID de empleado:create default def_employee

as 5

Page 132: Conceptos de Bases de Datos Relacionales Parte 1

• Asignar nuevos default y rule a la tabla:sp_bindrule rul_employee, "employees.emp_id"exec sp_bindefault def_employee,

"employees.emp_id"

• Ejecutar estas sentencias (una fallará):insert into employees (emp_id, name)

values (20, "Liz Shaw")insert into employees (name)

values ("Jo Grant")

• ¿Cuál insert falla? ¿Por qué?

Page 133: Conceptos de Bases de Datos Relacionales Parte 1

• Desasignar el default y la rule:sp_unbindefault "employees.emp_id"exec sp_unbindrule "employees.emp_id"

• Borrar los objetos de base de datos:drop default def_employeedrop rule rul_employeedrop table employees

Page 134: Conceptos de Bases de Datos Relacionales Parte 1

• Defaults y rules se pueden asignar a datatypes definidos por el usuario

• Las columnas que usen esos datatype aplican el default y rule que tenga asignado ese datatype

• Si el default o rule cambian, se aplican de inmediato– Los datos existentes no se afectan por los cambios

Datatypes definidos por el usuario

Page 135: Conceptos de Bases de Datos Relacionales Parte 1

Precedencia de columna y datatype

• Si una columna:– Tiene asignado un default, y– Usa un datatype definido por el usuario que tiene un

default diferente, entonces– El default asignado a la columna tiene precedencia

• Similarmente, si una columna:– Tiene una rule, y– Usa un datatype definido por el usuario que tiene una

rule diferente, entonces– La rule asignada a la columna tiene precedencia

Page 136: Conceptos de Bases de Datos Relacionales Parte 1

Métodos para garantizar integridad de datos

• Dos métodos para implementar integridad de datos

Domain

Integrity Entity Integrity

Referential Integrity

Constraints

Check constraints

Primary key constraint, unique constraint

References constraints

Database Objects

Rules Indexes Triggers

Page 137: Conceptos de Bases de Datos Relacionales Parte 1

Resumen de restricciones

• Son exigidos en el estándar ANSI• Son específicos a la tabla en que se crean y no son

reutilizables• No se pueden asociar a datatype definidos por el

usuario• Se crean al crear las tablas (o al modificarlas)• Fácilmente se pueden implementar checks

multicolumna

Page 138: Conceptos de Bases de Datos Relacionales Parte 1

Resumen de defaults y rules

• Son extensiones SQL• No son específicos de una tabla y son reutilizables• Se pueden asociar a datatypes de usuario• No se crean al crear la tabla y requieren de etapas

adicionales (creación y asignación)• No pueden implementar checks multicolumna

Page 139: Conceptos de Bases de Datos Relacionales Parte 1

Selección de un método

• Usar constraints:– Para implementar integridad una tabla– Para cumplir con el ANSI standard– Para restringir el dominio de una columna– Para definir checks entre dos columnas de una fila

• Usar objetos de base de datos:– Para implementar integridad que aplica a más de una

columna, tabla o base de datos– Para asignar rules o defaults datatypes de usuario