Bases de Datos

Lógica Proposicional. Algebra Relacional. Cálculo Relacional. Dependencias Funcionales. Esquema Lógico. SQL (Structured Query Language). Atributos

  • Enviado por: Miguel Caceres
  • Idioma: castellano
  • País: España España
  • 9 páginas
publicidad
publicidad

BASES DE DATOS

  • LOS DATOS: INTRODUCCIÓN

  • Entidades, atributos y valores= sujeto, verbo y predicado (complementos)=Alumne/Año nacimiento/1979

    Para caracterizar la información, también hay que considerar el tiempo (cambios).

    Dominio del atributo: conjunto de valores válidos o legales de éste. Puede aceptar o no el valor nulo.

    Los atributos que se conciben como aplicaciones inyectivas, se llaman identificadores. El conjunto de atrib. Identificadores, se llama clave.

    Acceso a los datos: secuencial/directo, y por valor/por posición.

    Nivel lógico: nivel de aplicación, con sus registros, campos, etc

    Niviel físico: nivel de programación básica y hardware (SGBD, SO, HDD, índices,...)

    Esquema básico de E/S: Mem externa (bloque)Mem interna (bufferregistro)

    Tiempo de acceso: el necesario para colocar el mecanismo físico al inicio del bloque a leer o escribir.Se divide en tiempo de busqueda (del cilindro) y de espera( a que en su rotación pase por el cabezal)

    Tiempo de transferencia: el necesario para leer o escribir el bloque.

  • LOS FICHEROS

  • El nivel lógico: TAD,Tipos Abstractos de Datos, con sus especificaciones de creación, modificación y consulta. (texto, OLE, numérico, ...)

    El nivel de lenguaje: ficheros internos. A veces coinciden con los TAD.

    El Nivel físico: existencia física en el ordenador, según el dispositivo de almacenamiento. O de termina el soft y el hard.

    Independencia física de los datos: el funcionamiento del programa no ha de depender del nivel físico.

    Nivel lógico

    Es la especificación de los TAD a implementar para cada tipo de fichero: secuencial, relativo o por valor.

    Un fich secuencial es un contenedor de datos, que puede permitir o no, según lo diseñemos, lectura, escritura, modificación y actualización.

    Los fich relativos permiten acceder a los registros mediante una referencia a la posición (relativa al inicio del fichero). Serían p. ej las tablas, y tb hay que definir en ellos los TAD deseados.

    Lo0s ficheros por valor serían como una variante del los conjuntos con clave (tablas con clave)

    Nivel de lenguaje

    Implementación, empleando los constructores de ficheros de los lenguajes de programación, de los ficheros internos como puente entre los fich lógicos que usan los programadores, y los físicos, que realmente almacenan los datos en la memoria secundaria. Como los lenguajes de progr no representan todos el concepto de fich de una misma forma, es fundamental que los programas trabajen sobre los TAD del nivel lógico, que sí proporcionan una visión unitaria de la noción de fichero.

    Nivel físico

    Lo ideal serían que este nivel no fuera accesible desde los programas, pero aveces es necesario, como p ej para la gestión del posible acceso exclusivo al fichero, que se suele hacer desde el SO, pues los lenguajes en su mayoría no se ocupan de este aspecto. Los leng imperativos (Cobol, Basic, RPG), más primitivos, presentan dificultades para implementar los TAD, y acceden demasiado al nivel físico, Los leng estructurados (C, Java, Pascal, Ada), mas modernos, solucionan bastante estos aspectos.

  • INTRODUCCIÓN A LAS BASES DE DATOS

  • Evolución de las BDs

    60-70': Sistemas centralizados, con un gran ordenador y una red de terminales tontas.

    80': SGBD relacionales. Facilitan la programación de aplicaciones con BDs, y consiguen que los programas sean independientes de los aspectos físicos de la BD.

    90': BD distribuidas. Los SGBD actuales permiten que un programa pueda trabajar con diferentes BDs como si fuera una sola, aprovechando tb la facilidad de las redes de comunic actuales. Para estas BDs distrib, se usa la tecnología C/S, donde dos procesos diferentes que se ejecutan en un mismo sistema o en sistemas separados, actuan de manera que uno hace de cliente o peticionario, y el otro de servidor o proveedor del servicio. Un proceso cliente puede pedir servicios a diversos servidores, un proceso puede hacer de servidor de otro, o tb de cliente, y el cli y el serv pueden residir en un mismo sistema.

    Tendencias actuales: SGBD con TAD nuevos para aprovechar la tecnología multimedia. Esto conlleva adoptar la orientación a objetos (OO), con interfaces gráficas y escalables. Adaptación a Internet, incorporando recursos para ser tb sevidores de páginas web, como p ej SQL incluido en guiones HTML o Java. Data Warehouse (almacen de datos), con herramientas para analizar toda la información acumulada a lo largo de años. Data minning, muy vinculado al anterior(minería de datos).

    Objetivos y servicios de lso SGBD

    Deben poder satisfacer varias necesidades:

    Consultas no predefinidas y complejas (SQL, 4GL)

    Flexibilidad a los cambios. Independencia física de los datos (que cambios tecnológicos o físicos no afecten a nadie), e independencia lógica (que diferentes procesos usuarios puedan tener diferentes visiones lógicas de una misma BD, manteniendo una indeppendencia entre ellas mismas y tb con respecto a la BD.

    Facilitar la eliminación de la redundancia, manteniendo la integridad de la BD, y actualizando los datos.

    Integridad de los datos, respetando las reglas de integridad del modelo (p ej que una tabla no tenga filas duplicadas). Todo SGBD debe disponer de procesos de restauración o reconstrucción de la BD (restore o recovery) a estados anteriores (p ej backups ).

    Concurrencia de diversos usuarios a la misma BD, superando los problemas de interferencia, mediante el concepto de transacción (conjunto de operaciones simples que se ejecutan como una unidad, nunca parcialmente. O se ejecutan todas, o ninguna). Para evitar interferencias entre transacciones, se usan técnicas como el bloqueo ( que las otras transacc no puedan acceder a los datos hasta que la actual acabe).

    Seguridad en el sentido de confidencialidad, autorizaciones, derechos de acceso, encriptación de contraseñas, etc.

    Data Warehouse, OO, Internet, Incorporar el factor tiempo en la caracterización de la información.

    Arquitectura de los SGBD

    ESQUEMA DE UNA BD

    Es fundamental en la arquitectura de un SGBD para permitir independizar éste de la BD. Tiene 2 niveles:

  • Lógico: es en el que se inspira el modelo relacional del SQL. Distinguimos en él dos esquemas: Externo (visión lógica que programas y usuarios tendrán de la BD) y Conceptual (donde se describen entidades tipo, sus atributos, reglas de integridad).

  • Físico: se corresponde con el esquema interno, y contiene la descripción de la organización física de la BD (índices, apuntadores, como y dónde se agrupan físicamente los registros. Es transparente al usuario, y el SQL lo deja practicamente (algo sí deja hacer) en manos de los SGBD comerciales.

  • INDEPENDENCIA DE LOS DATOS

    Puede ser física, cuando cambios en la organización física de la BD no afecta a programas y usuarios, y/o lógica, si cambios en este nivel no afectan a los usuarios o programas.

    FLUJO DE DATOS Y DE CONTROL

    Cuando una aplicación realiza por ejemplo una consulta a un SGBD, éste, con la ayuda del SO lee páginas (bloques) de los soportes físicos donde está almacenada la BD física, y los lleva al área de buffers de la memoria principal (RAM) o de la caché. De ahí, pasa al área de trabajo de la aplicación.

    Modelos de BD

    Hay que diferenciar BD (clientes, proveedores, etc ) de SGBD ( Access, Oracle ). El primer model de BD en aparecer fue el jerárquico (60'), con registros interrelacionados en árbol. En los 70' surgieron los modelos en red, derivado del anterior, pero de poco éxito.En los 80' el modelo relacional se vuelve predominante en los SGBD, los cuales en su mayoría utilizan el lenguaje SQL como nativo. Este modelo se basa en el concepto de relación o tabla (filas y columnas), se limita únicamente al nivel lógico, dándose una independencia física de datos total, al menos en la teoría. Actualmente se está extendiendo el modelo relacional con objetos, con tipos de datos abstractos (TAD), aproximándose a la OO. También cabe señalar aquí otros SGBD que no siguen estos modelos, como los documentales o las BD geográficas.

    Lenguajes y Usuarios

    Se distinguen los de tipo DDL (Data Definition Language) para definir las BD, y los DML (Management), para consultas y mantenimiento. Lo frecuente es combinar los dos tipos (SQL).

    Además del SQL, el más estandarizado, tenemos el 4GL y los asistentes o interfaces visuales de algunos SGBD (Access p. ej.) Para trabajar con BD desde otros lenguajes de programación, podemos optar entre las llamadas a funciones (adquirir en el mercado librerias de funciones especializadas en BD, como la ODBC), u hospedar (embedded) directamente el lenguaje de BD (SQL en general) en nuestro programa de C, Pascal u otros.

    Administración de BD

    Mantener y admnistrar los esquemas, hacer backups, diseñar la BD, vigilar su integridad, etc.son funciones del admnistrador de BD.

  • EL MODELO RELACIONAL Y EL ÁLGEBRA RELACIONAL

  • Introducción al modelo relacional (SGBDR): el objetivo es que el usuario vea la BD como una estructura lógica de relaciones (tablas), simple y uniforme.

    Las relaciones

    Una relación o tabla se compone de:

    EMPLEADOS

    DNI

    Nombre

    Apellido

    Despacho

    40.523.685

    Juan

    García

    10

    33.567.711

    Marta

    Roca

    11

    55.898.425

    Carlos

    Bondia

    10

    Esquema

    Extensión

    La relación anterior se denota como EMPLEADOS(DNI, Nombre, Apellidos, Despacho) valiendo cualquier otro orden.

    El dominio es el conjunto de valores atómicos de un atributo (edades aceptadas, DNI's posibles, etc.)

    El grado es el número de atributos o columnas que componen la relación.

    Las filas no están ordenadas, pero no pueden estar repetidas.

    La clave de una relación : claves candidatas aquellos subconjuntos de atributos sin tuplas repetidas y con los mínimos atributos posibles. Clave primaria será la clave candidata que elijamos para identificar las filas de la tabla (tuplas de la relación. En el ejemplo, el DNI). Las otras candidatas serán las claves alternativas. Claves secundarias o foráneas serán aquellas que referencian a una primaria (la columna Despacho del ejemplo, sería secundaria de la primaria nº despacho de la tabla DESPACHOS (nº despacho, calle, población).

    Operaciones del modelo relacional

    Básicamente actualización (inserción, borrado y modificación) y consulta. Usaremos los leguajes relacionales como el SQL.

    Reglas de integridad

    Consisten en evitar que el modelo represente plausiblemente a la realidad, evitando incoherencias (sueldos <0, edades fuera del dominio, etc.). También recogen la unicidad de la clave primaria, su entidad (que no tenga valores nulos), la integridad del dominio ( que no haya valores fuera del dominio) y la integridad referencial (todos los valores que tome la clave secundaria deben existir en la primaria, o ser nulos).

    Para mantener esta integridad referencial, las políticas a seguir son: la restricción (impedir modificar o borrar una tupla con clave primaria relacionada con una secundaria), la actualización en cascada (permite modificar la tupla, actualizando las relacianadas) y la anulación (anula en cascada las relacionadas). Podríamos por ejemplo, aplicar la restricción para el borrado, y la actualización en cascada para la modificación.

    El álgebra relacional

    UNIÓN: EMPLEADOS:= EMPLEADOS_ADM U EMPLEADOS_PROD

    INTERSECCIÓN: T " S.

    DIFERENCIA: T - S

    SELECCIÓN: DESPACHOS( edificio= Marina y superficie>12)

    PROYECCIÓN: Nueva relación con sólo unos atributos escogidos de la relación original.

    COMBINACIÓN: Es una operación binaria, o sea, a partir de dos relaciones. Consiste en obtener una nueva relaciòn resultado de concatenar las tuplas de las dos relaciones que cumplan la condición de combinación especificada. Un ejeplo sería combinar las tablas EDIFICIOS y DESPACHOS para obtener todos los edificios con superficie superior a la media:

    R:= EDIFICIS [nomedificio = edificio, supmediadesp < superficie] DESPACHOS.

    En esta combinación, podrían haber tuplas “perdidas”, por no tener relaciones entre ellas. Para evitar esto, se usan las combinaciones externas, que conservan en el resultado a todas la tuplas. Pueden ser externas derecha , izquierda y plena, según las tuplas que conserven de cada relación.

  • EL LENGUAJE SQL

  • Lenguaje declarativo (se le dice qué se quiere hacer, no cómo) de definición, control y manipulación de BD. Algunos ejemplos:

    CREAR UNA TABLA:

    CREATE TABLE productos (cod_producto INTEGER, nom_producto CHAR (20), tipo CHAR (20), descripción CHAR (50), precio REAL, PRIMARY KEY (cod_producto))

    INSERTAR un producto en la tabla:

    INSERT INTO productos

    Values (1250, `LENA', `Mesa', `Diseño J. Ruíz. Año 1920', 250000

    CONSULTAR qué productos son sillas:

    SELECT cod_producto, nom-producto

    FROM productos

    WHERE tipo = `silla' ; (o WHERE precio > 100000, por ejemplo)

    Sentencias de definición

    CREATE: crea BD, tablas, dominios, aserciones y vistas

    ALTER: modifica tablas y dominios.

    DROP: borra todo lo anterior.

    CREATE SCHEMA { [nom_esquema] / [AUTHORIZATION usuario] }

    [lista_de_elementos_del_esquema]

    Nomenclatura utilizada: Las mayúsculas son palabras reservadas del lengyaje, lo que haya entre [...] se puede poner o no, y la notación {A/.../B} indica que hemos de escoger al menos una opción.

    DROP SCHEMA nom_esquema {RESTRICT / CASCADE}

    RESTRICT borra sólo si el esquema está vacío, CASCADE, borra aunque no lo esté

    CREATE DATABASE y DROP DATABASE, también son validas en la mayoría de BD.

  • Creación de tablas

  • CREATE TABLE nom_tabla

    ( definición_columna [ , definición_columna ] [ , restricciones_tabla ])

    donde definición_columna es:

    nom_columna {tipo_datos /dominio} [def_defecte] [restric_col ]

    Tipos de datos:

    CHARACTER ( longitud)

    Cadena de caracters de longitud fija

    NUMERIC (n, m)

    Decimales con n dígitos y m decimales

    DECIMAL (n, m)

    Decimales con n dígitos y m decimales

    INTEGER

    Enteros

    REAL

    Números con coma flotante y precisión predefinida

    DOUBLE PRECISION

    Igual, pero con más precisión que el REAL

    DATE

    YEAR, MONTH, DAY (`1978-12-25')

    TIME

    HOUR, MINUT, SECOND ('17:15:00.00000')

    TIEMSTAMP

    DATE y TIME juntos (`1998-7-8 9:30:05')

    Restricciones de columna:

    NOT NULL

    No puede tener valores nulos

    UNIQUE

    No puede tener valores repetidos. Es la clave alternativa

    PRIMARY KEY

    Ni valores repetidos ni nulos. Es la clave primaria

    REFERENCES tabla [(columna)]

    Clave secundaria de la col y tabla especificada

    CHECK (condiciones)

    Debe cumplir las condiciones especificadas.

    Restricciones de tabla:

    UNIQUE (columna [ , columna...] )

    Clave alternativa de la tabla

    PRIMARY KEY ( columna [, columna...] )

    Clave primaria de la tabla

    FOREIGN KEY (columna [columna...] )

    REFERENCES [(columna2 [columna 2…])]

    `columnas' son una clave secundaria que referencia a `columnas2', clave primaria

    CHECK (condiciones)

    Condicones a cumplir por la tabla

    Modificación y borrado de claves primarias con claves secundarias:

    FOREIGN KEY clave_secundaria REFERENCES tabla [ (clave_primaria) ]

    [ON DELETE {NO ACTION / CASCADE / SET DEFAULT / SET NULL } ]

    [ON UPDATE {NO ACTION / CASCADE / SET DEFAULT / SET NULL } ]

    donde NO ACTION = restricción (no permitiría el borrado o modificación).

    Aserciones: son restricciones generales que afectan a una o más columnas de más de una tabla.

    CREATE ASSERTION nom_aserción CHECK (condiciones)

    DROP ASSERTION nom_ aserción

    Modificar y borrar tablas:

    ALTER TABLA nom_tabla {acción_modificar_columna / acción_modif_restricción_tabla }

    Donde las accones pueden ser: {ADD/ALTER/DROP [COLUMN ]} Y {ADD restricción / DROP CONSTRAINT restricción {RESTRICT / CASCADE } }

    DROP TABLE nom_tabla { RESTRICT / CASCADE }

  • Consultas en una BD relacional

  • SELECT nom_columna_a_seleccionar [ [ AS ] col_renombrada ] [ , nom_columna_a-seleccionar .[ AS ...] ... ]

    FROM tabla_a_consultar [ [ AS ] tabla_renombrada]

    WHERE condiciones

    Ejemplo: SELECT * FROM clientes (el * es comodín)

    Para indicar las condiones en WHERE, usaremos los operadores de comparación (=, <, >, <=, >=, <>) y los lógicos (NOT, AND, OR).

    Si queremos ver la consulta sin filas repetidas, pondremos SELECT DISTINT en lugar de SELECT.

    Funciones de agregación: se aplican a columnas, por lo que van con SELECT ( ej. SELECT COUNT)

    COUNT (total filas), SUM (suma), MIN, MAX, AVG (media).

    Subconsultas: son consultas dentro de WHERE.

    WHERE precio = (SELECT MAX (precio) FROM proyectos)

    Otros predicados: BETWEEN (entre), [NOT] IN (similar a = [<>]), LIKE, IS [NOT] NULL , ALL/ANY/ SOME, [NOT] EXISTS. Ejemplos:

    WHERE sueldo BETWEEN 2.0E+6 AND 5.0E+6

    WHERE ciudad IN (`Lleida', `Tarragona') (Solo coge los de Lleida y Tarragona)

    WHERE nom_empleado LIKE `J%' ( _ y % serían los equivalentes a ? y * respectivamente)

    WHERE num_proyecto IS NULL

    WHERE precio > ALL/ANY/SOME (subconsulta)

    WHERE EXISTS (subconsulta)

    Otras cláusulas:

    ORDER BY columnas: ordena la consulta según lo especificado aquí

    GROUP BY columnas: agrupa las filas según las col especificadas.

    HAVING: según las condiciones indicadas aquí.

    SELECT columna

    FROM tabla (también se pueden indicar aquí varias tablas)

    [WHERE condiciones]

    GROUP BY columnas

    [HAVING condiciones ] (podemos usar aquí las funciones de agregación SUM, MAX, etc.)

    [ORDER BY columna_de_ordenación [DESC] [ , col_ordenación [DESC]...] ]

  • Combinaciones.(Join en inglés). Consultas a más de una tabla.

  • La combinación consiste en crear una sola tabla a partir de las tablas especificadas en la cláusula FROM, haciendo coincidir los valores de las columnas relacionadas de estas tablas. Para indicar la columna de una tabla, se escribe con el formato tabla.columna. Podemos usar alias para referirnos a las tablas, si los especificamos en FROM ( ej. FROM clientes c, proyectos p )

    Se puede hacer una combinación de la manera básica , o usando la cláusula JOIN que nos aporta el SQL92 completo. Comparemos ambas:

    SELECT p.precio, p.codi_proy, c.nif, p.codi_client, c.codi_cli

    FROM clients c, proyectos p

    WHERE c.codi_cli = p.codi_client AND c.codi_cli = 20

    SELECT p.precio, p.codi_proy, c.nif, p.codi_client, c.codi_cli

    FROM clients c JOIN proyectos p ON c.codi_cli = p.codi_client

    WHERE c.codi_cli = 20

    Combinación natural: la podemos hacer de la misma forma, usan NATURAL JOIN en vez de JOIN.Es una equicombinación, que combina columnas del mismo nombre y elimina las repetidas.

    Combinación interna (INNER JOIN): es la que hace por defecto. Se queda con las filas que tienen valores idénticos en las columnas de las tablas que compara. Esto puede hacer que perdamos alguna fila interesante, si por ejemplo se encuentra un valor nulo en alguna de las tablas al hacer la combinación.

    Combinación externa: nos permite subsanar lo anterior, obteniendo todos los valores de la tabla de la izquierda (LEFT OUTER JOIN), de la derecha (RIGHT OUTER JOIN), o de ambas ( FULL OUTER JOIN). El formato sería:

    SELECT columnas

    FROM t1 [NATURAL] { LEFT/RIGHT/FULL } [OUTER] JOIN t2

    [ON condiciones]

    [USING (columna [ , [columna…] ) ]

    Combinaciones con más de dos tablas: dos posibilidades, según usemos el SQL92 introductorio o el completo:

    SELECT *

    FROM empleados, proyectos, clientes

    WHERE num_proy = codi_proy AND codi_client = codi_cli (nombres de col. diferentes)

    SELECT *

    FROM (empleados JOIN proyectos ON num_proy = codi_proy )

    JOIN clientes ON codi_client = codi_clI

    Unir consultas: usaremos la cláusula UNION [ALL] (sin el ALL evitamos las filas repetidas), entre cada sentencia SELECT.

    Intersección: Usaremos INTERSECT [ALL] entre cada sentencia SELECT. Otra posibilidad es usar las cláusulas IN o EXISTS:

    SELECT columnas FROM filas WHERE columna IN ( SELECT columna FROM tabla [WHERE condiciones] )

    SELECT columnas FROM filas WHERE EXISTS ( SELECT * FROM tabla [WHERE condiciones] )

    Diferencia: usaremos EXCEPT [ALL]entre cada consulta SELECT.

  • DISEÑO DE BASES DE DATOS RELACIONALES

  • Consiste en definir la estructura de la BD, que será un conjunto de esquemas de relaciòn, con sus atributos, dominios, claves primarias y secundarias, etc. Este diseño, se ha de descomponer en etapas, que son tres: diseño conceptual, diseño lógico y diseño físico.

  • Diseño conceptual

  • Obtendremos aquí la estructura de la futura BD, independientemente de la tecnología a emplear posteriormente para llevarla a cabo. Para modelizar esa estructura, se usa el modelo ER (Entity-Relatioship), donde las entidades serían más o menos las tablas a definir, los atributos las columnas de la tabla ( definiremos también los atributos que actuan como claves), y las interrelaciones (relationship) las relaciones entre tablas (asociación entre entidades).

    Una interrelación piede asociar una o más entidades, pudiendo dar lugar, en este último caso, a la creación de nuevas entidades. Por ejemplo, si tenemos la interrelación ESTUDIANTE ASIGNATURA y queremos también tener constancia de las asignaturas que ha cursado en cada trimestre, deberemos crear la entidad TRIMESTRE. Una interrelación binaria, puede ser 1:1 (DELEGACIÓNCIUDAD), 1:N (DESPACHOEMPLEADOS), o M:N (ESTUDIANTESASIGNATURAS).

    Ejemplo: BD casas de colonias

    1 COMARCA

    RESIDENCIA

    1

    N SITUACIÓN

    N

    N 1 M N

    NIÑO CASA-COLONIAS ACTIVIDAD

    ALOJAMIENTO OFERTA

    Las entidades serían: CASA-COLONIAS(nom-casa, capacidad), ACTIVIDAD(nom-actividad), NIÑO (cod-niño, nombre, apellidos, teléfono), COMARCA (nom-comarca, superficie, numero-habitantes). Los atributos subrayados serían las claves primarias.

    Comentarios al modelo ER:

    Al decidir si COMARCA sería un atributo de CASA-COLONIAS y de NINÓ o una entidad propia, optamos por lo último, pues nos interesa reflejar datos adiccionales de la comarca (numero hab., superficie)como atributos de esta entidad.

    La misma decisión cabe tomar con ACTIVIDAD. Se crea como entidad, pues una casa de colonias puede ofrecer varias actividades y otras no.

    Otra elección dificil que sepresenta al diseñar un modelo ER, es decidir si una información es entidad o interrelación. En el ejemplo, podríamos haber puesto OFERTA como entidad entre CASA-COLONIAS y ACTIVIDAD (OFERTA(nom-casa, nom-actividad, nivel), pero no sería del todo correcto, pues se identifica con las claves de las dos entidades entre las cuales está lo que nos debería hacer sospechar.

  • Diseño lógico: la transformación al modelo relacional

  • Las entidades, darán lugar a relaciones. Las interrelaciones, a claves secundarias (las 1:1 y 1:N), o bien a nuevas relaciones (las M:N y todas las n-arias). Los atributos y clave primaria de la entidad, lo serán ahora de la relación.

  • Diseño físico:

  • No nos es necesario pues cada SGBDR se encarga de implementarlo, de forma transparente al usuario.

    Atributos o columnas

    Tuplas o filas