Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Conceptos de Bases de Datos Relacionales Parte 1
2
Servidor de Bases de Datos
Servidor que es capaz de administrar múltiples bases de datos
3
Base de Datos 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)
4
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
5
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
6
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 }
7
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
8
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
9
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
10
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
11
Creación de Tablas
12
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 columna 2. Seleccionar un tipo de dato para cada columna 3. Escoger las propiedades de cada columna
13
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
14
Seleccionar Datatypes
Para seleccionar el datatype de una columna: 1. Determinar el conjunto posible de valores 2. Determinar la precisión requerida 3. 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
15
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 time Valores de fechas y horas Character Para strings caracteres Binary Información binaria (como imágenes, video y bits)
16
Ejemplos de Datatypes por Categorías
Números exactos integer, numeric (p,s), decimal (p,s) Números aproximados float (p), real, double precision (dependientes de máquina) Money money Date y time datetime Character char (n), varchar (n), text Binary bit, binary, varbinary, image
17
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
18
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
19
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
20
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
21
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
22
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
23
Crear Tablas Sintaxis Simplificada para create :
CREATE TABLE table_name ( column_name datatype [ NULL | NOT NULL | IDENTITY ] , ... column_name datatype [ NULL | NOT NULL | IDENTITY ] )
24
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 )
25
Borrar Tablas Sintaxis Simplificada para drop: DROP TABLE table_name
Ejemplo: drop table empleado
26
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
27
Cláusula default create table table_name (
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], ...)
28
Modificación de cláusulas default
Sintaxis Simplificada: alter table table_name replace 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
29
Ejemplo de modificación de cláusulas default
alter table publica replace ciudad default “Cali" replace depto default “Valle”
30
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_name to user_list Ejemplo: grant select on empleado to juan, sandra, pablo
31
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_name add column_name datatype NULL [, column_name datatype NULL ...] Todas las columnas añadidas deben tener la propiedad NULL.
32
Adicionar Columnas add address varchar(40) NULL,
alter table editor add address varchar(40) NULL, country varchar(20) NULL
33
Copiar Tablas select into es una extensión que se usa para crear una copia de una tabla existente
34
Sintaxis de select into
Sintaxis Simplificada : select column_list into new_table_name from old_table_name [where condition]
35
Ejemplos de select into
Ejemplo de copiado de todas las columnas: select * into titles_copy from titles Ejemplo de copiado de algunas columnas : select title_id, title, type into titles_copy
36
Ejemplos de select into
Ejemplo que copia algunos datos: select * into titles_copy from titles where 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 datos where 1 = 2
37
Data Manipulation Language
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
38
Sintaxis para insert { values (value_list) | select_statement }
sintaxis Simplificada: insert [into] table_name [(column_list)] { values (value_list) | select_statement } Ejemplos: insert into editor values ("736", “Nuevas BD", “Pasto", “Nariño") insert into editor (nombre, pub_id) values (“Prensa Actual", "2003”)
39
Extensión SQL para insert
Se pueden insertar múltiples filas en un solo insert utilizando un select embebido Ejemplo: insert into editor select * 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
40
Sintaxis para update Sintaxis Simplificada : Ejemplos:
update table_name set column1 = { expression | select_statement } [, column2 = { expression | select_statement } ...] [from table_list] [where condition] Ejemplos: update titles set price = price * $1.25 update authors set address = "1224 Mason Ct.", phone = " " where au_id = " "
41
Extensión para update Se pueden encadenar condiciones en la cláusula where de un update Ejemplo: update titulo set precio = precio * $0.90 from titulo t, editor p where t.pub_id = p.pub_id and p.state = “Nariño"
42
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
43
Sintaxis para when expression
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" where tipo in ("mod_cook", "trad_cook", "popular_comp")
44
Sintaxis para when condition
case when condition then expression [when condition then expression ...] [else expression] end Ejemplo: update titulo set precio = when tipo = "business" then precio * $1.03 when tipo = "mod_cook" then precio * $1.05 when tipo = "trad_cook" and pub_id = "0736" then precio * $1.07 when tipo = "trad_cook" and pub_id = "0877" then precio * $1.10 else precio
45
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.07 when "mod_cook" then precio * 1.03 when "business" then precio * 1.05 end
46
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
47
Sintaxis para delete Sintaxis Simplificada: Ejemplos:
delete [from] table_name [where condition] Ejemplos: delete from editor delete from titulo where tipo = "business" delete from autor where au_fname = "Luis" and au_lname = “Caicedo"
48
Extensión para delete Se pueden encadenar condiciones en la cláusula where de un delete Sintaxis simplificada : delete table_name from table_list [where join_condition] Ejemplo delete titles from titles t, publishers p where t.pub_id = p.pub_id and p.state = "CA"
49
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
50
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
52
Sentencia select La sentencia select consulta datos
Sintaxis simplificada: select column_list from table_name [where condition] [group by column_list] [having condition] [order by column_list] Ejemplo: select type, avg(price) from titles where type not in ("mod_cook", "trad_cook") group by type having avg(price) > $12.00 order by type
53
select y case case permite el retorno condicional de valores
case puede estar embebido en sentencias select Ejemplo: select title, "Contract Status" = case contract when 1 then "Contract" when 0 then "No contract" end from titles title Contract Status ... But Is It User Friendly? Contract The Psychology of Computer... No contract Secrets of Silicon Valley Contract
54
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
55
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_authors select au_id, au_lname, au_fname, state, phone from authors where state = "CA" Sintaxis simplificada para borrar una vista: drop view view_name drop view vw_california_authors
56
Vistas y permisos Para permitir que otros utilicen una vista, se deben dar permisos: grant [ select | insert | update | delete | all ] on view_name to user_list Ejemplo: grant select on vw_california_authors to clerk1, clerk2, clerk3, clerk4
57
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 White Johnson CA Green Marjorie CA Carson Cheryl CA O'Leary Michael CA Straight Dick CA ... (15 rows affected)
58
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 (" ", "Chen", "Rose", "CA", " ") Se pueden actualizar datos usando vistas si: Se pueden borrar datos usando vistas si: La vista está basada en una sola tabla delete from vw_california_authors where au_lname = "Hunter"
59
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, title from publishers, titles where publishers.pub_id = titles.pub_id go select * from vw_pub_title_join pub_name title New Age Books You Can Combat Computer Stress New Age Books Is Anger the Enemy? ...
60
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_authors as select au_id, au_lname, au_fname, state, phone from authors where state = "CA" go grant all on vw_california_authors to public revoke all on authors from public
61
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_authors as select au_id, au_lname, au_fname, state, phone from authors where state = "KS" with check option Ejemplo de modificación que da error: update vw_kansas_authors set state = "MO" where state = "KS"
62
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
63
Ejemplos con vistas create view vw_titles_pubs (title, publisher)
Crear dos tablas: select * into mytitles from pubs2..titles select * 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_name from mytitles, mypublishers where mytitles.pub_id = mypublishers.pub_id Usar la vista para mostrar los titles y sus publishers: select * from vw_titles_pubs
64
________________________________
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_pubs drop table mytitles, mypublishers
65
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
66
Indices Un índice es un objeto de base de datos que ayuda al servidor a encontrar un dato más rápidamente
67
Estructura de un Indice : Caso de Estudio
PAGE 1132 1421, 1 1129, 3 1409, 1 Bennet Chan Dull Edwards 1018, 5 PAGE 1007 Greane Hunter 1242, 4 1242, 1 1132 1133 1127 pg ptr row ptr PAGE 1305 Karsen 1876, 1 1311 key PAGE 1133 1421, 2 1409, 2 Green Greene PAGE 1127 1241, 4 Jenkins PAGE 1241 O’Leary Ringer White 10 11 12 13 PAGE 1242 Smith 14 15 16 17 PAGE 1421 18 19 20 PAGE 1409 21 22 23 (more pages) authors table (data pages) Index pages key PAGE 1001 Bennet Karsen Smith 1421, 1 1876, 1 1242, 1 1007 1305 1062 create index idx_authors_2 on authors(au_lname)
68
Crear y borrar índices Sintaxis simplificada para create : Ejemplo:
create [unique] [ clustered | nonclustered ] index index_name on table_name (column1 [, column2] ... ) Ejemplo: create clustered index idx_c_titles_1 on titles (title_id) Sintaxis Simplicada para drop : drop index table_name.index_name drop index titles.idx_c_titles_1
69
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
70
Indice no-compuesto Un índice no-compuesto es un índice creado sobre una columna Ejemplo: create index idx_authors_2 on authors(state) Apropiado cuando las consultas se hacen frecuentemente sobre una sola columna select * from authors where state = "UT"
71
Indice compuesto Un índice compuesto es un índice creado sobre dos o más columnas Ejemplo: create index idx_authors_3 on authors(au_lname, au_fname) Apropiado cuando las consultas se hacen sobre múltiples columnas select * from authors where au_lname = "Ringer" and au_fname = "Anne"
72
Indice no-único Un Indice No-único es un índice que permite valores duplicados Ejemplo: create index idx_authors_2 on authors(state) Apropriado cuando las consultas se hacen sobre valores duplicados select * from authors where state = "UT"
73
Indice único Un índice único es un índice que no permite valores duplicados Ejemplo: create unique index idx_u_authors_1 on authors(au_id) Apropiado cuando cada valor en la columna indizada debe ser único select * from authors where au_id = " " Puede ser creado solamente sobre columnas que no tengan valores duplicados
74
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_4 on authors(state) Una tabla puede tener muchos índices no-cluster Apropiado para: Tablas que ya tienen un índice cluster
75
Estructura de un índice no-cluster
Index pages authors table (data pages) root level intermediate level leaf level PAGE 1241 O’Leary Ringer White Jenkins 10 11 12 13 PAGE 1242 Hunter Smith Greane 14 15 16 17 PAGE 1421 Bennet Green 18 19 20 PAGE 1409 Dull Greene 21 22 23 key row ptr row ptr pg ptr PAGE 1132 1421, 1 1129, 3 1409, 1 Bennet Chan Dull Edwards 1018, 5 key PAGE 1007 Bennet Greane Hunter 1421, 1 1242, 4 1242, 1 1132 1133 1127 row ptr pg ptr key PAGE 1001 Bennet Karsen Smith 1421, 1 1876, 1 1242, 1 1007 1305 1062 PAGE 1133 1242, 4 1421, 2 1409, 2 Greane Green Greene PAGE 1305 Karsen 1876, 1 1311 PAGE 1127 1242, 1 1241, 4 Hunter Jenkins (more pages) create index idx_authors_2 on authors(au_lname) (more pages) (more pages)
76
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
77
Etructura de un índice cluster
Index pages authors table (leaf/data pages) root level intermediate level PAGE 1241 Bennet Chan Dull Edwards 10 11 12 13 PAGE 1242 Greane Green Greene 14 15 16 17 PAGE 1421 Hunter Jenkins 18 19 20 PAGE 1409 Karsen O'Leary Ringer 21 22 23 key pg ptr PAGE 1007 Bennet 1241 key pg ptr Greane 1242 PAGE 1001 Hunter 1421 Bennet 1007 Karsen 1305 Smith 1062 PAGE 1305 Karsen 1409 (more pages) create clustered index idx_authors_2 on authors(au_lname) (more pages)
78
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
79
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") values (2, "The Client", "J Grisham") values (3, "Jurassic Park", "M Crichton")
80
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_1 drop table novels
81
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
82
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
83
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
84
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
86
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
87
Dos métodos para forzar integridad
88
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”
89
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
90
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
91
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) , ... ) Ejemplo: create table publishers ( pub_id char(4) NOT NULL constraint chk_pub_id check (pub_id like "99[0-9][0-9]"), pub_name varchar(40) NULL, city varchar(20) NULL, state char(2) NULL
92
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
93
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)
94
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_state check (state in ("CA", "OR", "WA", "NV")) ) insert into publishers (pub_id, pub_name) values ("9909", "Failed Imprints")
95
Ejemplos de restricción
Crear una tabla con restricción check y default: create table employees ( emp_id int constraint chk_emp_id check (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") values (719, 1500, "David Benton") insert into employees (emp_id, name) values (801, "Alistair Stewart")
96
Verificar que dos de los tres inserts se han ejecutado:
¿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 ¿Cuándo y cómo se insertó este valor? ________________________________________________ Borrar los objetos creados de la base de datos: drop table employees
97
Integridad a nivel de entidad
La integridad a nivel de entidad asegura que cada fila de una tabla está identificada de manera inequívoca
98
Primary key Combinación de una o más columnas que identifican de manera inequívoca una fila en una tabla
99
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
100
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
101
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 NULL constraint pky_c_pub_id primary key, pub_name varchar(40) NULL, city varchar(20) NULL, state char(2) NULL
102
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)
103
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
104
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
105
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], ... ) Ejemplo: create table publishers ( pub_id char(4) NOT NULL, pub_name varchar(40) NULL constraint unq_pub_name unique, city varchar(20) NULL, state char(2) NULL
106
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)
107
Restricciones primary key vs unique
108
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
109
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
110
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
111
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), ... ) Ejemplo: create table titles ( title_id char(6) NOT NULL, title varchar(80) NULL, pub_id char(4) NULL constraint ref_pub_id references publishers (pub_id), notes varchar(200) NULL
112
Restricción referencial a nivel de tabla
Sintaxis Simplificada: create table table_name ( 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_sales foreign key (stor_id, ord_num) references sales (stor_id, ord_num) )
113
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_manager references employees(emp_id) )
114
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
115
Ejemplos de restricción referencial
Crear la tabla customers con una primary key: create table customers ( customer_id int constraint 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), references customers (customer_id)
116
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é? _____________________________________ delete from customers where name = "Liz Shaw" delete from customers where name = "Jo Grant"
117
¿Cuál delete falla? ¿Por qué? ____________________________________
Borrar los objetos de base de datos creados: drop table orders drop table customers
118
Adición de restricciones
Sintaxis simplificada para añadir: alter table table_name add constraint constraint_name { check (condition) | primary key (column_list) | unique (column_list) | foreign key (column_list) references table (column_list) } Ejemplos: alter table roysched add constraint chk_hirange_lorange check (hirange > lorange) alter table publishers add constraint pky_pub_id primary key (pub_id) alter table titles add constraint ref_pub_id foreign key (pub_id) references publishers(pub_id)
119
Borrado de restricciones
Sintaxis simplificada para borrado: alter table table_name drop constraint constraint_name Ejemplos: alter table roysched drop constraint chk_hirange_lorange alter table publishers drop constraint pky_pub_id drop constraint unq_pub_name alter table titles drop constraint ref_pub_id
120
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_salary check (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)
121
Borrar los objetos de base de datos creados:
drop table employees exec sp_dropmessage 20001
123
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
124
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
125
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
126
Quitar y borrar defaults
Quitar un default Sintaxis simplificada para borrado: drop default default_name Ejemplo: drop default def_state
127
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
128
Crear reglas Sintaxis simplificada: Ejemplos: 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 > 22 create rule rul_pub_id as @pub_id in ("1389", "0736", "0877") or @pub_id like "99[0-9][0-9]"
129
Asignar reglas Sintaxis simplificada: Ejemplo:
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
130
Desasignar y borrar reglas
Desasignar reglas Sintaxis simplificada para drop : drop rule rule_name Ejemplo: drop rule rul_state
131
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 > 10 Crear un default de 5 para ID de empleado: create default def_employee as 5
132
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é?
133
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_employee drop rule rul_employee drop table employees
134
Datatypes definidos por el usuario
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
135
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
136
Métodos para garantizar integridad de datos
Dos métodos para implementar integridad de datos
137
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
138
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
139
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
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.