Exemplo n.º 1
0
        /*  TERCERA FORMA NORMAL
         *  No debe de existir ninguna dependencias transitiva
         */
        private void terceraFormaNormal()
        {
            //Normalizamos Cada Tabla de la 2FN

            foreach (Tabla tabla in SEGUNDAFN) {
                Atributo PK = tabla.getClavePrimaria();
                Tabla tablaIn = new Tabla();
                tablaIn.setClavePrimaria(PK);
                //Para cada columna de la tabla revisamos si cumple la 3FN
                foreach (Atributo attr in tabla.getColumnas()) {

                    if (!cumple3FN(attr, tabla)) {
                        if (!estaEnTabla3FN(attr)) {
                            Atributo FK = calcularFK(attr, tabla);
                            if (FK != null) {
                                Tabla t;
                                Tabla nuevaTabla = ((t = tabla3FNConPK(FK)) == null ? new Tabla() : t);
                                nuevaTabla.setClavePrimaria(FK);
                                List<Atributo> cols = nuevaTabla.getColumnas();
                                foreach (Atributo athijo in FK.getDependientes()) {
                                    if (athijo.esConjunto() || cols.Contains(athijo)) continue;
                                    if (!estaEnTabla3FN(athijo) && tabla.getColumnas().Contains(athijo))
                                        nuevaTabla.addColumna(athijo);
                                }
                                if (!TERCERAFN.Contains(nuevaTabla))
                                    TERCERAFN.Add(nuevaTabla);
                                if(!tablaIn.contains(FK))
                                    tablaIn.addColumna(FK);
                            }
                        }
                    } else {
                        if (!tablaIn.contains(attr) && !estaEnTabla3FN(attr))
                            tablaIn.addColumna(attr);
                    }

                }//For:columnas

                TERCERAFN.Add(tablaIn);
            }//For:tablas

            normal.Text += "\nTablas Tercera Forma Normal \n";

            String ntabla = "";

            foreach (Tabla x in TERCERAFN) {
                ntabla = "| " + x.getClavePrimaria().getValor() + "(PK)|";
                foreach (Atributo C in x.getColumnas()) {
                    ntabla += " " + C.getValor() + " |";
                }
                normal.Text += ntabla + "\n";
            }
        }
Exemplo n.º 2
0
        /*  SEGUNDA FORMA NORMAL
         *  * TODO Atributo no primo de la relacion debe depender de la ClavePrimaria
         *  ** Ningun Atributo debe depender parcialmente de la ClavePrimaria
         */
        private void segundaFormaNormal()
        {
            //Normalizamos Cada Tabla de la 1FN

            foreach (Tabla tabla in PRIMERAFN) {
                Atributo PK = tabla.getClavePrimaria();
                Tabla tablaIn = new Tabla();
                tablaIn.setClavePrimaria(PK);
                //Para cada columna de la tabla revisamos si cumple la 2FN
                foreach (Atributo attr in tabla.getColumnas()) {

                    if (!cumple2FN(attr, PK)) {
                        if (!estaEnTabla2FN(attr)) {
                            Atributo subPK = calculaSubPK(attr, PK);
                            if (subPK != null) {
                                Tabla t;
                                Tabla nuevaTabla = ( (t = tabla2FNConPK(subPK)) == null ? new Tabla():t);
                                nuevaTabla.setClavePrimaria(subPK);
                                nuevaTabla.addColumna(attr);
                                foreach (Atributo athijo in attr.getDependientes()) {
                                    if (athijo.esConjunto()) continue;
                                    nuevaTabla.addColumna(athijo);
                                }
                                if(!SEGUNDAFN.Contains(nuevaTabla))
                                SEGUNDAFN.Add(nuevaTabla);
                            }
                        }
                    } else {
                        tablaIn.addColumna(attr);
                    }

                }//For:columnas

                SEGUNDAFN.Add(tablaIn);
            }//For:tablas

            normal.Text += "\nTablas Segunda Forma Normal \n";

            String ntabla = "";

            foreach (Tabla x in SEGUNDAFN) {
                ntabla = "| " + x.getClavePrimaria().getValor() + "(PK)|";
                foreach (Atributo C in x.getColumnas()) {
                    ntabla += " "+ C.getValor() + " |";
                }
                normal.Text += ntabla + "\n";
            }
        }
Exemplo n.º 3
0
 /*  cumple3FN
  *  Todo atributo que dependa transitivamente de la ClavePrimaria
  *  No cumple la 3FN
  */
 private bool cumple3FN(Atributo attr, Tabla tabla)
 {
     /* Si existe algun Atributo X que determine a Y, que no pertenezca a la clavePrimaria
      * Decimos que Y depende transitivamente de la clavePrimaria.
      */
     foreach (Atributo at in attr.getDeterminantes()) {
         if (tabla.contains(at)) return false;
     }
     return true;
 }
Exemplo n.º 4
0
        private void primeraFormaNormal()
        {
            Atributo atributo;

            //Tabla Principal es la tabla que tiene la llave primaria y los atributos que no son multivaluados.
            Tabla TablaPrincipal = new Tabla();
            TablaPrincipal.setClavePrimaria(clavePrimaria);

            // Por cada atributo de el Diccionario , si es multivaluado crear una tabla nueva con el atributo y la llave primaria.
            foreach (var key in mapaAtributos.Keys) {
                atributo = mapaAtributos[key];
                if (atributo.esConjunto()) continue;
                if (atributo.esMultivaluado()) {
                    Tabla T = new Tabla();
                    T.addColumna(atributo);
                    T.setClavePrimaria(clavePrimaria);
                    PRIMERAFN.Add(T);
                } else {
                    // si el atributo no es multivaluado solamente lo agrega a la tabla principal.
                    // solo si no es parte de la clave primaria
                    if(!xSubY(atributo,clavePrimaria))
                    TablaPrincipal.addColumna(atributo);
                }

            }
            // Agregando la tabla principal ya completa con todos los atributos no multivaluados.
            PRIMERAFN.Add(TablaPrincipal);
            normal.Text += "\nTablas Primera Forma Normal \n";

            String ntabla = "";

            foreach (Tabla x in PRIMERAFN) {
                ntabla ="| "+ x.getClavePrimaria().getValor() + "(PK)|";
                foreach (Atributo C in x.getColumnas()) {
                    ntabla += " " + C.getValor() + " |";
                }
                normal.Text += ntabla + "\n";
            }
        }
Exemplo n.º 5
0
 private Atributo calcularFK(Atributo attr, Tabla tabla)
 {
     foreach (Atributo at in attr.getDeterminantes()) {
         if (tabla.contains(at)) return at;
     }
     return null;
 }