Second Normal Form (2NF)


Full Functional Dependency

It means that when an attribute, A, is dependent upon a set of attributes {X, Y} thus:
{ X, Y } → A

there is no dependence of A upon any subset of { X, Y } . Thus, if the following dependence also exists:
X → A

then A is not fully functionally dependent upon {X, Y}.
Ésta se presenta cuando un atributo, A, es dependiente en un conjunto de atributos {X, Y}
{X, Y} → A

Esto no implica que exista dependencia de A con los sub-conjuntos de {X, Y}. Sin embargo, si la siguiente dependencia también existe:
X → A

entonces A no es dependiente en forma funcional completa en { X, Y }.

Second Normal Form (2NF)

To be in 2NF, a relation must be:
  • in 1NF
  • All attributes that are not part of the primary key, must be fully functionally dependent upon the primary key.
Thus, you must look for dependencies between some non-key attributes and part of the key attributes.
Para cumplir 2NF, una tabla:
  • debe cumplir con 1NF
  • los atributos que no forman parte de la llave primaria en una tabla, deben depender en forma funcional y completa en la llave primaria.
Así, usted debe buscar por dependencias entre algunos atributos que no forman parte de la llave primaria y parte de los atributos de la llave primaria.

exampleFFD1

exampleFFD2

exampleFFD3

Tip
When a primary key consists of only one attribute, then all other attributes must be fully functionally dependent on it as it cannot be subdivided in any way. However, in the case of a composite key, full functional dependence may be compromise.
Cuando una llave primaria consiste de un sólo atributo, entonces todos los otros atributos deben ser dependientes en forma funcional completa en la llave ya que no es posible dividir la llave de ninguna forma. Sin embargo, en el caso de una llave compuesta, la dependencia funcional completa puede no conseguirse.

Tip
When the primary key includes more than one attribute, it is necessary to find out if the non-key attributes are functionally dependent on one or more key attributes. If this is the case, the table is not in 2NF. Thus, If there is an FD between the non-key elements and some elements that are part of the primary key, then the table is NOT in 2NF.
Cuando una llave primaria consiste de más de un atributo se debe averiguar si los elementos que no forman parte de la llave primaria dependen en forma funcional de uno o alguno de los atributos de la llave primaria. Si este es el caso, la tabla no cumple con 2NF. Así, Si hay una FD entre los elementos que no forman parte de la llave primaria y algunos elementos que son parte de la llave primaria, entonces la tabla no está en 2NF.

Problem 1
Find out if the client_p table is in 2NF (proof your result). First, look for dependencies between client_id and non-key attributes. Second, look for dependencies between account_id and non-key attributes.
Diga si la tabla client_p está en 2NF (demuestre su resultado). Primero, busque dependencias entre client_id y los atributos que no forman parte de la llave primaria. Segundo, busque dependencias entre account_id y los atributos que no forman parte de la llave primaria.

client_p

Solution 1
In the client_p table, the candidate table is client_id, account_id, thus, name, address and client_type are attributes that are not part of the primary key. Then, the following FDs are valid:
client_id, account_id → name, address, client_type

client_id → name, address, client_type

client_id is a sub-set of the primary key client_id, account_id. This table, therefore, is not in 2NF. In order to place the table in 2NF, it is necessary to remove the attributes that partially dependent in the primary key, and create a new table with them as shown in the figure with the tables: client_k and client_account_t.
The primary key in the client_k table is client_id, which has only one attribute, and all columns that are not part of the primary key depend on it. The primary key of the new table, client_account_k, is client_id, account_in, and therefore all columns in this table are part of the primary key. Thus, client_k and client_account_k are in 2NF. Note that for each record in client_acccount_k exists one and only one record in the client_k table. Observer also, that if one client does not have an account, the client information is not lost.
En la tabla client_p, se estableció que client_id, account_id es una llave candidato, y así, name, address y type son atributos que no forman parte de la llave primaria. De esta información se obtiene las siguientes FDs:
client_id, account_id → name, address, client_type

client_id → name, address, client_type

client_id es un sub-conjunto de la llave primaria client_id, account_id. Esta tabla, por lo tanto, no cumple con 2NF. Para hacer cumplir a esta tabla con 2NF, se deben remover los atributos que son dependientes en forma parcial en la llave primaria y crear una nueva tabla con estos, tal como se muestra en la tablas client_k y client_account_k.
La llave primaria de la tabla client_k es client_id, la cual contiene un solo atributo, y todas las columnas que no forman parte de la llave primaria dependen de él. La llave primaria de la nueva tabla client_account_k es client_id, account_id, y por lo tanto todas las columnas de esta tabla forman parte de la llave primaria. Así las tablas client_k y client_account_k cumplen con 2NF. Observe que para un registro en client_account_k existe un único registro en la tabla client_k. Observe también, que si un cliente no tiene cuenta no hay necesidad de perder la información del cliente.

client_split

Tip
To find out if a table is in 2NF
  1. Verify that the table is in 1NF
  2. Identify the attributes that are part of the primary key (place these attributes on the left of the FD)
  3. Identify the attributes that are not part of the primary key (place these attributes on the right of the FD)
  4. Verify that one or more attributes that are not part of the primary key depend fully and functionally on the primary key (in order to show that a table is not in 2NF, you can try to show that the attributes that are not part of the primary key depend functionally on some attributes that are part of the primary key)

Para encontrar si una tabla cumple con 2NF
  1. Verificar que la tabla cumple con 1NF
  2. Identificar los atributos que forman parte de la llave primaria (coloque estos atributos a la izquierda de la FD)
  3. Identificar los atributos que no forman parte de la llave primaria (coloque esto atributos a la derecha de la FD)
  4. Verificar que uno o más atributos que no forman parte de la llave primaria dependan en forma funcional y completa en la llave primaria (a fin de probar que una tabla no cumple con 2NF, usted puede intentar demostrar que los atributos que no forman parte de la llave primaria dependen en forma funcional de algunos de los atributos que forman parte de la llave primaria)

Tip
To remove FD's that prevent the table from being in 2NF, you must create two new tables. The elements on the left of the FDs will be attributes on both of these new tables. One of the new tables will have all of the attributes included in the FDs.
Para remover las FDs que impiden que la tabla cumpla con 2NF, se deben crear dos tablas nuevas. Los elementos de la izquierda de las FDs serán los atributos de ambas tablas. Una de las tablas nuevas contendrá todos los atributos incluídos en las FDs.

Problem 2
Suppose also that the account_id is unique among all branches. Suppose that the type is an account type: Savings or Checking.
  1. Is the banco_p table in 1NF?
  2. What is the primary key in the banco_p table?
  3. Is the banco_p table in 2NF? (proof your result)
  4. if it is not in 2NF, modify the table so that it is in 2NF

Suponga también que la account_id es única entre todas las sucursales. Suponga que el type es un tipo de cuenta. Ahorros o de Cheques.
  1. Diga si la tabla banco_p cumple con 1NF
  2. Diga cuál es la llave primaria en la tabla banco_p.
  3. Indique si la tabla banco_p cumple con 2NF (demuestre su resultado)
  4. Si no está en 2NF, re-diseñe la tabla para que cumpla con 2NF

bank_p

Problem 3
Repeat the previous problem, but now suppose that the account_id is unique in each branch. Thus, the same account_id can be used by two or more branches.
Repita el problema anterior, pero ahora suponga que el account_id es único en cada sucursal. Así, el mismo acount_id puede ser usado por dos o más sucursales.

Problem 4
Suppose that each dependent can depend on one or more people. For instance, a child may depend on his dad and his mom. Is the dependent table in 2NF? If not, modify the table so that it is in 2NF.
Suponga que cada dependiente puede depender de una o más personas. Por ejemplo, un niño puede depender de su papá y su mamá. Indique si la tabla dependiente cumple 2NF. Si no cumple, modifique la tabla para cumplir con 2NF.

dependent

Problem 5
The FAMILY Table represents members of the same family who live on the same house. Assume each member of the family works for a different company. For instance, in the data shown in the table, there are three families. Do not make any other assumptions.
  1. What are the candidate keys?
  2. What is the primary key?
  3. Is the table in 2NF? (proof your result)
  4. If not, change it so that it is in 2NF.

La tabla familia contiene los miembros de la misma familia que viven en la misma casa. Asuma que cada miembro de la familia trabaja para una empresa diferente. En el caso específico de los datos mostrados en la tabla, se tienen tres familias distintas. No haga ninguna otra suposición.
  1. Indique cuales son las llaves candidato.
  2. Indique cuál es la llave primaria de esta tabla.
  3. Diga si la tabla cumple con 2NF (demuestre su resultado).
  4. Si no cumple, modifique el diseño para que cumpla 2NF.

Family

Problem 6
Indicate whether the following statement is true or false: when the primary key of a table that is in 1NF has two or more attributes, the table is automatically in 2NF.
Diga si es cierto o falso: Cuando una tabla que está en 1NF tiene una llave primaria formada por dos o más columnas, la tabla está automáticamente en 2NF.

Problem 7
Indicate whether the following statement is true or false: If all the columns of a table (that is in 1NF) are part of the primary key, then the table is automatically in 2NF
Diga si es cierto o falso: Cuando en una tabla (que está en 1NF) todas las columnas forman parte de la llave primaria, entonces la tabla está automáticamente en 2NF.

Tip
The example below illustrates how it can quickly detect if a table is in 2NF or not.
El ejemplo debajo indica cómo se puede detectar en forma rápida si una tabla se encuentra en 2NF o no.

client_2NF

© Copyright 2000-2019 Wintempla selo. All Rights Reserved. Sep 05 2019. Home