Prof. Jaime Navón BD2006 51 Tercera Forma Normal (3NF) • Un esquema de relación R está en 3NF si está en 2NF y no hay dependencias transitivas de la clave por parte de atributos (no primos) • X -> Y es una dependencia transitiva de X si existe un subconjunto de atributos Z tales que X -> Z y Z ->Y • Ejemplo: • NOMBREE RUT FECHAN DIRECCION NUMEROD NOMBRED RUTGTE • RUT -> NOMBREE, FECHAN, DIRECCION, NUMEROD • NUMEROD -> NOMBRED, RUTGTE • No existen atributos que dependen parcialmente de la clave => 2NF pero existen dependencias transitivas de la clave (cuales) => no es 3NF • Puede llevarse a 3NF de la siguiente forma: • NOMBREE RUT FECHAN DIRECCION NUMERO • NUMEROD NOMBRED RUTGTE
50
Embed
Tercera Forma Normal (3NF) - moodle2.unid.edu.mxmoodle2.unid.edu.mx/dts_cursos_mdl/lic/TI/FB/AM/09/Tercera_forma... · Prof. Jaime Navón BD2006 51
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Prof. Jaime Navón BD2006 51
Tercera Forma Normal (3NF)
• Un esquema de relación R está en 3NF si está en 2NF y no hay dependenciastransitivas de la clave por parte de atributos (no primos)
• X -> Y es una dependencia transitiva de X si existe un subconjunto de atributos Ztales que X -> Z y Z ->Y
• No existen atributos que dependen parcialmente de la clave => 2NF pero existendependencias transitivas de la clave (cuales) => no es 3NF
• Puede llevarse a 3NF de la siguiente forma:
• NOMBREE RUT FECHAN DIRECCION NUMERO
• NUMEROD NOMBRED RUTGTE
Prof. Jaime Navón BD2006 52
Claves, claves ...
• 3NF - Todo atributo (no clave) depende de la clave, toda la clave, y nadamás que la clave
Un esquema de relación R está en 3FN si para todo X->A se cumple:
a) X es una superclave de R o bien
b) A es un atributo primo de R
Prof. Jaime Navón BD2006 53
Forma Normal de Boyce-Codd
• Un esquema de relación R está en BCNF si para todo X->A en R, X es unasuperclave de R
• BCNF es un poco más estricta que 3NF
• se quita la posibilidad de tener una dependencia de algo que no es superclave en el caso que setrate de un atributo primo
• se considera mejor que 3NF pero ambos son aceptables, en cambio 1NF y 2NF salvo situaciones muypuntuales no se consideran buenos diseño
• Ejemplo:
LOTES(ID_PROPIEDAD, NOMBRE_MUNIC, NUM_LOTE, AREA)
ID_PROPIEDAD -> {NOMBRE_MUNIC, NUM_LOTE, AREA}
{NOMBRE_MUNIC, NUM_LOTE}->{AREA, ID_PROPIEDAD}
AREA -> NOMBRE_MUNIC
• Esquema es 3NF porque NOMBRE_MUNIC es un atributo primo.
• Última dependencia viola BCNF porque AREA no es superclave
Prof. Jaime Navón BD2006 54
Obtención de 3NF
• Dadas las Dependencias Funcionales del diagrama siguiente:
• Observar las fuentes de las dependencias: DEPTO, EMP, PROJ, OFFICE, PHONE,EMP_DATE
• Incorporamos sus claves y sus dependencias directas:
• DEPTO(Dept#, Dbudget, Mgr#)
• EMP(Emp#, Proj#, Phone#)
• PROJ(Proj#, Dept#, Pbudget)
• OFFICE(Off#, Dept#, Area)
• PHONE(Phone#, Off#)
• EMP_DATE(Emp#, Date, JobTitle, Salary)
Prof. Jaime Navón BD2006 55
Num Curso Deporte
100 Música Natación
100 Contabilidad Natación
100 Música Tenis
100 Contabilidad Tenis
150 Matemáticas Atletismo
Cuarta Forma Normal (4NF)
• La 4NF tiene que ver con dependencias multivaluadas ...
• el valor de un atributo determina un conjunto de valores para unsegundo atributo.
• Ej: Estudiante(Num, Curso, Deporte)
• Num no determina ni Especialidad ni Deporte
• Num multidetermina Especialidad (->>)
• Num multidetermina Deporte
• Esquema es BCNF pero hay algunas anomalías ...
Num Curso Deporte
100 Música Natación
100 Contabilidad Natación
100 Música Tenis
100 Contabilidad Tenis
150 Matemáticas Atletismo
Prof. Jaime Navón BD2006 56
Anomalías
• estudiante con n cursos y m deportes requiere n x m tuplas
• si estudiante 100 toma un nuevo curso hay que agregar 2 tuplas
Num Curso Deporte
100 Música Natación
100 Contabilidad Natación
100 Música Tenis
100 Contabilidad Tenis
150 Matemáticas Atletismo
Num Curso Deporte
100 Música Natación
100 Contabilidad Natación
100 Música Tenis
100 Contabilidad Tenis
150 Matemáticas Atletismo
Prof. Jaime Navón BD2006 57
Formalización
• En un esquema R con al menos 3 atributos existe una dependencia de valores múltiplescuando uno de ellos multidetermina a cada uno de los otros dos
• R(A,B,C), A ->->B, A->->C (B y C son independientes)
• Un esquema está en 4NF si está en BCNF y además no hay dependencias de valoresmúltiples
• Solución para el ejemplo sería dividir el esquema original en:
Cursos(Num, Curso)Deportes(Num, Deporte)
Prof. Jaime Navón BD2006 58
Vuelta a Dependencias Funcionales
• Problema: Dado un set de atributos como saber si representa una clave
• Sabemos que todos los atributos dependen funcionalmente de la clave,entonces ...
• Bastaría ver si se cumple que todos los atributos dependen funcionalmentedel set de atributos dado, pero ...
• Generalmente no se tienen todas las dependencias en forma explícita
Prof. Jaime Navón BD2006 59
Ejemplo
• Se tiene una relación R(A, B, C, D, E) con las siguientes dependenciasfuncionales:
• AB -> C; CD -> E; C -> A; y E -> D
¿ Es BCD una clave ?
• BCD -> B (1), BCD ->C (2), BCD -> D (3), BCD -> CD (4)
• Combinando (4) con CD->E se obtiene BCD ->E (5)
• Combinando (2) con C->A se obtiene BCD -> A (5)
• Luego, BCD es al menos una superclave ...
• Habría que mostrar ahora que ni BC ni CD ni BD son superclaves
Prof. Jaime Navón BD2006 60
Reglas de Inferencia
• las reglas 1,2,3 (reglas de inferencia de Armstrog) son correctas y completas (Armstrong,1974)
• empleo repetido de ellos permite calcular F+ (clausura de F) para cualquier conjunto dedependencias funcionales F dado
• se puede demostrar 4, 5 y 6 usando 1, 2 y 3
• 1,2 y 3 salen de definición de DF
Prof. Jaime Navón BD2006 61
Clausura de un Conjunto de Dependencias
• Dado un conjunto de atributos X (que aparecen en el lado izquierdo de lasdependencias funcionales F), obtener X+ ,el conjunto de atributos determinadosfuncionalmente por X (Clausura de X bajo F)
X+ = XRepeat
old X+ = X+For every Y->Z in F doif Y ⊆ X+ then X+ = X+ ∪ Z
• Dados dos conjuntos de DF E y F, se dice que E está cubierto por F (F cubre a E)si toda DF en E está también en F+
• Dos conjuntos de DF E y F son equivalentes si E+ = F+
• E y F equivalentes sii E cubre a F y F cubre a E
• Un conjunto de DF F es mínimo si
• Toda dependencia en F tiene un sólo atributo en el lado derecho
• Si se quita cualquier dependencia de F el conjunto resultante no es equivalente a F
• No es posible reemplazar ninguna dependencia X -> A por una dependencia Y -> A con Y ⊂ X yseguir teniendo un conjunto de dependencias equivalentes a F
• Un conjunto de DF mínimo equivalente a F se denomina cobertura mínima de F(puede habr más de una)
Prof. Jaime Navón BD2006 64
Algebra Relacional
• Conjunto de operaciones que permite manejar relaciones completas
• Resultado de operar sobre una relación o sobre un par de relaciones es unarelación
• Lo anterior permite construir expresiones complejas con operadorescombinados
• Permite seleccionar sólo algunas de las columnas de la tabla original
• Normalmente la eliminación de columnas produce tuplas duplicadas por lo
cual la relación resultante puede tener también menos tupla
• π<lista de atributos>(<relación>)
Ejemplo:
πLNAME, FNAME, SALARY(EMPLOYEE)
Prof. Jaime Navón BD2006 67
Operadores de Conjuntos
• UNION
• R ∪ S contiene todas las tuplas que están en R o en S (se eliminan los duplicados)
• INTERSECCION
• R ∩ S contiene todas las tuplas que están tanto en R como en S
• DIFERENCIA
• R - S contiene las tuplas que están en R pero no en S
• PRODUCTO CARTESIANO
• R(A1, ..., An) x S(B1, ..., Bm) = Q(A1, ..., An, B1, ..., Bm)
• (una tupla por cada combinación de tuplas de R y S)
• Unión, Intersección y Diferencia son operadores binarios
• relaciones deben ser compatibles (mismo número de atributos y dominios comunes)
• Operadores de unión en intersección son conmutativos y asociativos
Prof. Jaime Navón BD2006 68
Reunión (Join)
• union de tuplas relacionadas de dos tablas R y S
• Q = R S <condición>
• Produce, igual que el producto cartesiano, una relación Q con n+m atributos
• Q tiene una tupla por cada combinación de tuplas de R y S que satisfaga lacondición
• La condición en general es una conjunción de expresiones Ai Θ Bj en que Θ є {=, <,>, <=, >=, !=}
• La condición mas común lejos es un simple operador de igualdad. En este caso sehabla de un equijoin
• Cuando la igualdad es entre dos atributos con el mismo nombre se hacedesaparecer uno de ellos de la relación resultante y se habla de un Join Natural
Prof. Jaime Navón BD2006 69
Ejemplo
R SNombre Edad Sueldo Nombre DeptoPerez 25 120.000 Perez VentasFuentes 36 230.000 Lopez FinanzasLopez 45 150.000 FuentesProducción
• Ordenes y fechas de aquellas que se realizaron después del 01/07/2004
select o.orderinfo_id, o.date_placedfrom orderinfo as owhere o.date_placed > '2004-07-01';
• Números y fecha de compra de las ordenes que incluyen 'Wood Puzzle'
select o.orderinfo_id, o.date_placedfrom orderinfo as o, item as i, orderline as lwhere o.orderinfo_id = l.orderinfo_id and l.item_id = i.item_id and description = 'Wood Puzzle';
Prof. Jaime Navón BD2006 79
Cambio de Encabezados en Output
select fname as nombre, lname as apellidofrom customerwhere lname = 'Stones';
nombre | apellido---------+---------- Jenny | Stones Andrew | Stones Richard | Stones Ann | Stones(4 rows)
Restricciones de Columnas• NOT NULL• UNIQUE• PRIMARY KEY• DEFAULT valor• CHECK condición• REFERENCES
Prof. Jaime Navón BD2006 93
Ejemplo
create table testcolcons (colnotnull int not null,colunique int unique,colprikey int primary key,coldefault int default 42,colcheck int check(colcheck < 42)
• Restricción REFERENCES (en realidad restringe el dominio destino)
• Aunque puede incluirse como restricción a nivel de columna es recomendable incluirlasa nivel de tabla después de la resticción de clave primaria
CREATE TABLE orderinfo(orderinfo_id serial ,customer_id integer NOT NULL REFERENCES customer(customer_id),date_placed date NOT NULL,date_shipped date ,shipping numeric(7,2) ,CONSTRAINT orderinfo_pk PRIMARY KEY(orderinfo_id));
CREATE TABLE orderinfo(orderinfo_id serial ,customer_id integer NOT NULL,date_placed date NOT NULL,date_shipped date ,shipping numeric(7,2) ,CONSTRAINT orderinfo_pk PRIMARY KEY(orderinfo_id),CONSTRAINT orderinfo_customer_id_fk FOREIGN KEY(customer_id) REFERENCEScustomer(customer_id));
Prof. Jaime Navón BD2006 96
Mantenimiento de Integridad Referencial
• la restricción de clave foránea exige que cada valor decustomer_id en orderinfo esté presente en alguna tupla decustomers
• ¿Que hacer si se intenta eliminar un cliente de customers para elcual hay tuplas en orderinfo?
• impedirlo (error) - este es el defaultCONSTRAINT orderinfo_customer_id_fk FOREIGN KEY(customer_id) REFERENCEScustomer(customer_id)
• poner nulls en la info de cliente en las ordenesCONSTRAINT orderinfo_customer_id_fk FOREIGN KEY(customer_id) REFERENCEScustomer(customer_id) ON DELETE SET NULL
• eliminar automáticamente las tuplas que hacen referencia a élCONSTRAINT orderinfo_customer_id_fk FOREIGN KEY(customer_id) REFERENCEScustomer(customer_id) ON DELETE CASCADE
• Lo mismo puede especificarse para operaciones de UPDATE oambasCONSTRAINT orderinfo_customer_id_fk FOREIGN KEY(customer_id) REFERENCEScustomer(customer_id) ON DELETE CASCADE ON UPDATE SET NULL
Prof. Jaime Navón BD2006 97
Modificaciones al Esquema
• Se hacen mediante ALTER
ALTER TABLE table-name ADD COLUMN column-name column-type
ALTER TABLE table-name DROP COLUMN column-name
ALTER TABLE table-name RENAME COLUMN old-column-name TO new-column-name
ALTER TABLE table-name column-name TYPE new-type [ USING expression ]
ALTER TABLE table-name ALTER COLUMN [SET DEFAULT value | DROP DEFAULT]
ALTER TABLE table-name ALTER COLUMN [SET NOT NULL | DROP NOT NULL]
ALTER TABLE table-name ADD CHECK check-expression
ALTER TABLE table-name ADD CONSTRAINT name constraint-definition
ALTER TABLE old-table-name RENAME TO new-table-name
Prof. Jaime Navón BD2006 98
Ejemplos
test=> \d ttconstTable "public.ttconst"Column | Type | Modifiers---------+-----------------------+------mykey1 | integer | not nullmykey2 | integer | not nullmystring | character varying(15) |Indexes:"cs2" PRIMARY KEY, btree (mykey1, mykey2)Check constraints:"cs1" CHECK (mystring::text <> ''::text)
test=> ALTER TABLE ttconst ADD COLUMN mydate DATE;
test=> ALTER TABLE ttconst RENAME COLUMN mydate TO birthdate;
test=> \d ttconstTable "public.ttconst"Column | Type | Modifiers-----------+-----------------------+--mykey1 | integer | not nullmykey2 | integer | not nullmystring | character varying(15) |birthdate | date |Indexes:"cs2" PRIMARY KEY, btree (mykey1, mykey2)Check constraints:"cs1" CHECK (mystring::text <> ''::text)
test=> ALTER TABLE ttconst DROP CONSTRAINT cs1;test=> ALTER TABLE ttconst ADD CONSTRAINT cs3 UNIQUE(birthdate);test=> ALTER TABLE ttconst ALTER COLUMN mystring SET DEFAULT 'Hello';ALTER TABLE
Prof. Jaime Navón BD2006 99
Creación Implícita de una Tabla
• Es posible enviar el resultado de una consulta a una tabla que tiene lamisma estructura del resultado mediante SELECT INTO
SELECT select_targets INTO [ TABLE ] new_table FROM old_table;
test=# select * into cust2test-# from customertest-# where town ='Bingham';SELECT
test=# select * from cust2; customer_id | title | fname | lname | addressline | town | zipcode | phone-------------+-------+---------+--------+--------------+---------+------------+--------- 7 | Mr | Richard | Stones | 34 Holly Way | Bingham | BG4 2WE | 342 5982 8 | Mrs | Ann | Stones | 34 Holly Way | Bingham | BG4 2WE | 342 5982 11 | Mr | Dave | Jones | 54 Vale Rise | Bingham | BG3 8GD | 342 8264(3 rows)