La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Conceptos de Bases de Datos Relacionales Parte 1

Presentaciones similares


Presentación del tema: "Conceptos de Bases de Datos Relacionales Parte 1"— Transcripción de la presentación:

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

51

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

85

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

122

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


Descargar ppt "Conceptos de Bases de Datos Relacionales Parte 1"

Presentaciones similares


Anuncios Google