# Functionally Dependent

## Functional Dependency (FD)

A set of attributes (columns) (A) in a table is functionally dependent on X if, and only if, for every combination of values in X, there is one, and only one, corresponding values in A.A is functionally dependent on X: X → A.
Un conjunto de atributos (columnas) (A) en una tabla es dependiente en forma funcional en otro conjunto de atributos X, si y solo si, por cada combinación de valores en X, hay uno y sólo un valor correspondiente en A.
A es funcionalmente dependiente de X: X → A.

## FD reduction

A FD may be simplified by moving attributes from the left side of the equation to the right side as long as the FD remains valid. A reduced FD has a minimum number of attributes on the left side.
Un FD se puede simplificar moviendo los atributos del lado de la izquierda de la ecuación hacia lado derecho de la ecuación siempre y cuando la FD se mantenga válida. Una FD reducida tiene un mínimo número de atributos en el lado de la izquierda.

 Problem 1 Discuss the FDs related to the branch attribute in the bank_p table.

 Solution 1 A bank branch only has one address. Thus each branch is associated with it one and only one, address. Additionally, each branch also has exactly one manager. Thus we can say:branch → branch_addressbranch → manager_idFinally,branch → branch_address, manager_id Una sucursal (a branch) tiene solamente una dirección. Así cada valor de sucursal (branch) en la tabla está asociado con solo una y sólo una dirección. Además, cada sucursal (branch) tiene exactamente un gerente. Así, se puede decir que:branch → branch_addressbranch → manager_idFinalmente,branch → branch_address, manager_id

 Problem 2 Discuss the FDs in the client_p table.

 Solution 2 From the table, the following FD is validclient_id → name, client_address, client_type.If each account belongs to only one client, then, an FD with account_id can be established. However, there is a record (348973) that belongs to two different clients. If this is valid, then, there is nothing in this table that is functionally dependent in account_id. On the other hand,client_id, account_id → name, client_address, client_type.A branch value may be associated with any account_id values, any number of balances and up to two types of accounts. These attributes are not therefore functionally dependent (FD) on branch. However, given a particular account_id, there will be one balance and one type value. Therefore, account_id → balance, account_type.If each account belong to one branch, account_id → branch, branch_address, manager_id.An FD can be established over any set of attributes; therefore, the following is also valid:branch, account_id → balance, account_type, branch_address, manager_id.Even though the accounts belong to more than one client, the previous FD is valid because for each combination of client_id and account_id, there is one and only one value for balance, type, and address.Desde la tabla se puede deducir la siguiente FD:client_id → name, client_address, client_type.Si una cuenta pertenece solamente a un cliente, entonces se puede establecer una FD account_id. Sin embargo, hay un registro (348973) que pertenece a dos distintos clientes. Si esto es válido, entonces no hay nada en esta tabla que sea dependiente en forma funcional en account_id. De igual forma, en la tabla cliene_p, se puede decir:client_id, account_id → name, client_address, client_type.Un valor de sucursal puede estar asociado con cualquier valor de account_id, cualquier valor de balance y cualquier tipo de cuenta. Por lo tanto, estos atributos no dependen funcionalmente de sucursal. Sin embargo, dada una cuenta se tiene solo un balance y un solo tipo de cuenta. Por lo tanto, account_id → balance, account_type.Si cada cuenta pertenece a una sucursal (branch) account_id → branch, branch_address, manager_id.Una FD se puede establecer sobre cualquier conjunto de atributos; por lo tanto, lo siguiente es también válido:branch, account_id → balance, account_type, branch_address, manager_id.Aun cuando las cuentas le pertenecen a más de un cliente, la FD anterior es cierta porque para una combinación de client_id y account_id hay uno y solo un valor respectivo para balance, account_type y branch_address.

 Tip FDs are useful because they allow identifying candidate keys. Remember that a candidate key is an attribute (column), or set of attributes, that gives a unique identity to each tuple (row) in a relation (table). Las FDs son útiles por que permiten identificar las llaves candidato. Recuerde que una llave candidato es un atributo (columna) o conjunto de atributos que le da una identidad única a cada tuple (renglón) en una tabla.

## Super Key

It is the combination of more attributes than required to identify a tuple. Thus, a candidate key is a super key that has no redundancy. By redundancy, we mean a super key with attributes within it that could be removed but it would still be able to give a unique identity to each tuple. On the other hand, it is not possible to reduce the number of attributes in a candidate key without destroying the key.
Es la combinación de más atributos de los necesarios para identificar en forma única un tuple. Así una llave candidato es una super-llave que no tiene redundancia. Donde redundancia, quiere decir una super-llave a la cual es posible remover atributos y aun poder identificar en forma única cada tuple. Por otro lado, no es posible reducir el número de atributos en una llave candidato sin destruir la llave.

 Problem 3 Mention if it is true or false: It is possible to build a candidate key from a super key, if the redundant attributes are removed.Diga si es verdadero o falso: Es posible construir una llave candidato desde una super-llave removiendo los atributos redundantes.

 Problem 4 Discuss the super keys in the bank_p table. Try to move as many attributes as possible from the left part of the FD to the right while keeping the FD valid. Note that the reduced FD can be used to design the database table.Discuta la super llave en la tabla bank_p. Trate de mover tantos atributos como sea posible de la parte izquierda de la FD hacia la derecha manteniendo válida la FD. Note que la FD reducida puede ser usada para diseñar la tabla de la base de datos.

 Solution 4 There is a superkey,branch, branch_address, account_id, balance, account_type → indicating that each each row is unique. However, this key has no meaning. This can be reduced to:branch, branch_address, account_id, balance → account_typebecause each combination of the attributes in the left, will produce a unique value for type. It is possible to reduce to:branch, branch_address, account_id → balance, account_type.Given a combination of branch and address can result in several combinations for account_id, balance, and account_type. Therefore, it is NOT possible to reduce to:branch, branch_address → account_id, balance, account_type,indicating that each branch, address cannot be used as super key in this table. All candidate key are subsets of the super key. Thus, neither branch, nor address can be used as keys. Finally, branch, address and account_id can be reduced to:branch, account_id → branch_address, balance, account_type,and, this can be reduced further to get a minimal FD in which account_id is the candidate key: account_id → branch, branch_address, balance, account_type.Se tiene una super llave de la forma:branch, branch_address, account_id, balance, account_type → indicando que cada renglón en único. Sin embargo, esta llave no tiene ningún significado. Esto se puede reducir a:branch, branch_address, account_id, balance → account_typeporque cada combinación de los atributos de la izquierda, producirá un único valor de tipo. Es posible reducir esto aún más como se muestra:branch, branch_address, account_id → balance, account_type.Una combinación dada de branch (sucursal) y address (dirección) puede resultar en varias combinaciones para account_id, balance, y account_type. Por lo tanto, NO es posible reducir:branch, branch_address → account_id, balance, account_type,indicando que sucursal (branch), dirección (branch_address) no puede ser usada como una super-llave en esta tabla. Todas las llaves candidato son sub conjuntos de la supe llave. Así, ni sucursal ni dirección puede ser usada como llave. Finalmente, se puede reducir branch, branch_address, account_id a:branch, account_id → branch_address, balance, account_type,y aun reducir más para obtener una FD minima en la cual account_id es una llave candidato: account_id → branch, branch_address, balance, account_type.

 Problem 5 city_bank> find all FDs in this database (one for each table).

 Problem 6 circuit_city> find all FDs in this database (one for each table).

 Problem 7 Minimize the FD shown from the client_p table. What attributes are part of the candidate key?client_id, name, client_address, client_type, account_id →