Prácticas de Bases de Datos 2 – EI, MI – 2010-2011 Facultade de Informática – UDC Comentarios sobre las prácticas y los errores más frecuentes Luis G. Ares (luis.ares@udc.es) A Coruña, 31 de mayo de 2011 Contenido 1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Errores habituales de este curso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3. 4. 2.1. Redundancia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2. Atributos que forman parte de las claves primarias . . . . . . . . . . . . . . . . . . . . 4 2.3. Índices propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.4. MATCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.5. Modelo que prescinde del planteamiento temporal . . . . . . . . . . . . . . . . . . . . 4 2.6. Cosas sorprendentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.7. Detalles destacados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Consideraciones iniciales (otros cursos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.1. Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2. Problemas con Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.3. Tratamiento de las claves foráneas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.4. Nombrar las restricciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.5. Tratamiento de la integridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.6. Trabajo en equipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.7. Los dominios en el modelo relacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.8. Nomenclatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.9. VARCHAR2 de Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.10. Resta de fechas (años de trabajo, edad actual) . . . . . . . . . . . . . . . . . . . . . . 7 3.11. Colocación de las claves primaria y foráneas en una tabla . . . . . . . . . . . . . . . . 7 3.12. Columnas de tipo DATE como parte de claves primarias o claves foráneas . . . . . . . 8 Errores frecuentes (otros cursos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.1. Redundancia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.2. Incongruencias en la documentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.3. Inadecuado trabajo en equipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.4. Errores en las restricciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.5. Usar los mismos nombres para columnas con significado diferente . . . . . . . . . . . . 9 4.6. Uso de sinónimos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.7. Dominios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.8. Nombres de claves foráneas al estilo “balear” . . . . . . . . . . . . . . . . . . . . . . . 9 4.9. Representación gráfica de las claves foráneas compuestas . . . . . . . . . . . . . . . . . 10 4.10. Incluir en un CHECK una lista extensa de valores . . . . . . . . . . . . . . . . . . . . 11 4.11. Vinculaciones mal representadas en el esquema relacional . . . . . . . . . . . . . . . . 11 4.12. Subclase con tipo de relación 1:N o N:M fusionada con la superclase . . . . . . . . . . 11 1 5. 4.13. Pasar una categorı́a al modelo relacional de forma errónea . . . . . . . . . . . . . . . . 12 4.14. Consultas SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.15. Reducida capacidad de explicación y de claridad . . . . . . . . . . . . . . . . . . . . . 12 Otros detalles importantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 5.1. Diseño acorde a la LOPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 12 1. Introducción El objetivo de este documento es comunicar los errores más frecuentes que se han cometido en las prácticas. Si se desea información adicional, debe ponerse en contacto con los profesores. En este curso se han cometido errores importantes y lo peor es que algunos de ellos coinciden con los de cursos anteriores. Por ello se mantienen los comentarios realizados en otros cursos. Las notas de la primera práctica se han estandarizado entre 0 y 10, pero en las restantes entre 0 y 5. 2. Errores habituales de este curso Además de muchos de otros cursos, en éste encontramos de forma especial los siguientes: 2.1. Redundancia Uno de los errores más comunes es el relativo a las redundancias. Al tratarse de algo que ya estaba mencionado en 4.1 resulta aún más sorprendente, porque su aparición fue muy generalizada, incluso en trabajos bastante buenos. Y más sorprendente resulta por ser algo comentado en varias clases a lo largo del curso por los dos profesores de la asignatura. Atributos como deporte, género, y otros que suponen algún tipo de clasificación, se han colocado literalmente, generando una redundancia exagerada y sorprendente. Se ha decidido destacarlo como error frecuente, por si el hecho de aparecer en otra sección en el documento del curso anterior, conllevó que no se reparase en él. Hay que recordar que el objetivo principal de es almacenar correctamente los datos de una actividad. Pero el almacenamiento correcto, no significa necesariamente que deban leerse fácilmente las tablas, porque no es algo destinado exclusivamente a un usuario final, sino que el diseño debe evitar problemas relacionados con la redundancia, con las inconsistencias, con el rendimiento, con que los datos puedan cumplir las condiciones del mundo real, etc. y todo ello condiciona el diseño. Para que “se lean bien los datos”, están las consultas y las vistas. Esto entronca con otros casos en los que aparecı́an tablas que no seguı́an un buen diseño porque realmente almacenaban datos que deberı́an ser resultados de consultas. 3 2.2. Atributos que forman parte de las claves primarias Normalmente los atributos que forman parte de las claves primarias no deben ser corresponder a datos alfanuméricos que tengan una gran longitud. Para ello se codifican los valores, normalmente con valores enteros, facilitando su utilización en los ı́ndices. Se ha comentado también que los atributos de tipo tiempo, en general no constituyen una buena elección para las claves primarias. Lo que pasa es que en el contexto planteado, la importancia del tiempo es fundamental, por lo que aquı́ puede optarse por la utilización generalizada de columnaas de tipo date como parte de claves primarias. 2.3. Índices propuestos Los ı́ndices propuestos han sido muy pocos y muy mal justificados. Se pretendı́a que se revisasen las consultas habituales y que eso llevase a decidir qué ı́ndices se necesitaban, más allá de los habituales. 2.4. MATCH Aunque Oracle no lo permita, el MATCH era necesario declararlo en las columnas que forman parte de claves foráneas de más de una columna. Prácticamente nadie los menciona. 2.5. Modelo que prescinde del planteamiento temporal Aunque esto es una crı́tica de la primera parte, hay que destacar que el ejemplo planteado ofrecı́a muchas posibilidades de tratamiento temporal, ya que prácticamente todo en él es temporal: canales, paquetes, ofertas, programas, presentadores, etc., todo esto conlleva un tratamiento temporal que lo hace válido en un momento del tiempo, pero no siempre. En general los modelos adolecı́an de un verdadero tratamiento temporal acorde a la realidad. 2.6. Cosas sorprendentes • Resolución de atributos multivaluados como Actor, Participantes, resueltos con una columna de 100 caracteres en los que se coloca la lista de actores, participantes, etc. Eso sencillamente es no seguir el modelo relacional. • Espectáculos musicales en los que solo puede intervenir un intérprete. Me recuerda a aquel hospital en el que un enfermo no podı́a realizar un segundo ingreso en la misma cama. Y ya que se mencionaron muchas series, esto irı́a en la más pura lı́nea de Carol Beer en Little Britain: “Computer says no”. 2.7. Detalles destacados Evidente muchos trabajos tienen detalles interesantes. Particularmente quisiera destacar la estructuración y la claridad que tiene el del grupo 12. 4 3. 3.1. Consideraciones iniciales (otros cursos) Notas Las valoraciones de cada parte de las prácticas se han establecido entre 0 y 5. En general, un trabajo normal que realiza lo solicitado, aunque presente algún error, se valora con un 3. Si el trabajo presenta aspectos destacables y tiene errores de menor importancia, puede llegar a un 4. El 5 se reserva para trabajos que destacan especialmente, por lo que es normal que casi no se logre esa valoración. En la parte 4, dado que se pedı́a algo más concreto, la valoración es de 1, 3 o 5, indicando que el trabajo es flojo, regular o bueno, respectivamente. 3.2. Problemas con Oracle Algunos estudiantes han comentado que la versión de Oracle presentaba diversos problemas, especialmente en el uso de Java. Lo que se nos habı́a comunicado es que la versión instalada era la misma que el curso pasado, donde no hubo esos problemas, cuando realmente se trabalaba con una release posterior. Los detalles se pusieron en conocimiento de los responsables de mantener el producto y se dió algún dı́a adicional para compensar por el tiempo perdido por esos detalles. 3.3. Tratamiento de las claves foráneas En el modelo relacional puro deben incluirse las acciones referenciales de las claves foráneas. En el paso a Oracle, deben mantenerse las que se puedan e indicar una manera de declarar las restantes, como disparadores, etc., aunque en esta práctica no fuera necesario crear los disparadores. 3.4. Nombrar las restricciones Conviene recordar que es aconsejable nombrar las restricciones, sobre todo las más comunes (c.p, NOT NULL, unicidad, etc.), evitando que el sistema use un nombre crı́ptico. 3.5. Tratamiento de la integridad En el modelo relacional puro se debe realizar un tratamiento riguroso de la integridad, incluyendo las aserciones si son necesarias. 3.6. Trabajo en equipo Lo importante de la práctica es lo que el grupo aprende realizándola. Aunque cada miembro del grupo haga su parte de manera independiente, es necesario una exposición final conjunta de cada parte, con la consiguiente revisión, corrección y aceptación final del grupo, lo que aportará un conocimiento adicional. 5 3.7. Los dominios en el modelo relacional Los dominios en el modelo relacional, indican la naturaleza de un dato, pero no sólo lo obvio: tipo de dato, formato y conjunto de valores, sino también los aspectos semánticos de un dato, o sea, su significado. Por ese motivo si un dato es completamente similar a otro en todo menos en su significado, no pueden tener el mismo dominio. Por ejemplo, dos datos que provienen de un subrogado, como un número de cliente y un número de servicio, pueden tener absolutamente todo igual -tipo de dato, formato y conjunto de valores-, pero obviamente son datos diferentes, por lo que deben tener diferente dominio. Se suele usar de manera informal el criterio de comparación para determinar si dos datos tienen o no el mismo dominio: si dos datos son comparables, en el sentido de que pueden darse consultas que comparen cómo es uno frente al otro, entonces tendrán el mismo dominio, y no lo tendrán en otro caso. No parece muy necesario que se compare si un número de cliente es mayor que el de un servicio. Los dominios se indican al principio, justo después de la nomenclatura. Los fabricantes tienden a no incluirlos en sus productos, dado que los tipos de datos definidos por el usuario pueden realizar un papel similar. 3.8. Nomenclatura Hay que recordar un principio básico del trabajo con bases de datos: en una base de datos, los datos se almacenan orientados al propio dato, a la naturaleza del mismo, y no a cómo se utiliza, en qué aplicaciones interviene ni a cómo se almacena fı́sicamente. Hacerlo de otra forma es no considerar el valor corporativo de un dato, que puede aparecer en múltiples aplicaciones, pero que deberı́a almacenarse una única vez y con un único nombre que fuera conocido y reconocido en toda la organización. Aunque se utilizasen aplicaciones verticales, que tratan una temática determinada, los nombres de los datos deberı́an seguir una regla genérica para su formación. Recordad que no deben usarse homónimos ni sinónimos, como se comentó en clase. El nombre de un dato debe reflejar lo que significa el dato, y debe ser sencillo y claro. La sencillez se logra con normas simples, fáciles de recordar. El nombre del dato debe hacer referencia a la naturaleza del dato, no a cómo se usa ni en dónde aparece. Puede aparecer en el nombre de un atributo una referencia a la palabra primaria de la que deriva, como en nombre de empleado, nombre de servicio, etc., que indican la esencia del dato de forma clara, pero eso no implica que todos los atributos tengan que denominarse 6 con una referencia a la tabla en la que aparecen. El atributo debe determinar la naturaleza del dato, no en qué tabla aparece el dato, qué aplicación lo usa, etc. Debéis preguntaros las ventajas y los inconvenientes que eso tiene, aunque lo proponga el organismo que sea. En la propuesta realizada por alguna institución, como la indicada en la página web, algunas de sus decisiones son francamente mejorables. Se puso como ejemplo de lo que no debı́a de hacerse, como elemento a criticar. Concretamente la vinculación del nombre de la tabla con la aplicación, denota una escasa orientación a los datos y una gran orientación a las aplicaciones, eliminando el valor del dato como elemento corporativo, un error frecuente en la administración pública. La denominación de las claves foráneas, haciéndola depender de la tabla en la que se encuentran, es otro fallo importante. 3.9. VARCHAR2 de Oracle Oracle usa desde una versión anterior un tipo de datos VARCHAR2 que sustituye al antiguo VARCHAR, con el objetivo de ser más eficiente, manteniendo el tipo de dato antiguo por compatibilidad con las aplicaciones que ya lo usaban, pero recomendando la utilización del nuevo en los futuros desarrollos. 3.10. Resta de fechas (años de trabajo, edad actual) El tratamiento de fechas con Oracle es, al menos, laborioso, con funciones muy especı́ficas, por lo que no se ha realizado una profundización en ellas. En la práctrica a entregar, no se recomienda el uso de consultas que exploten esas posibilidades, por no aportar elementos estructurales. De todas formas algunos preguntáis cuestiones sobre esto y os recuerdo que todo se soluciona usando las máscaras de formato y las funciones especı́ficas de Oracle para el tratamiento de datos de tipo DATE, como SYSDATE, ADD_MONTHS, CURRENT_DATE, MONTHS_BETWEEN, etc., lo que lleva a consultas un poco laboriosas. Por ejemplo, para saber la edad actual de una persona o el tiempo en años, meses y dı́as que un empleado lleva trabajando, podemos hacer: SELECT hiredate, TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) anos, MOD(TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)),12) meses, TRUNC(SYSDATE - ADD_MONTHS(hiredate, (TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate))))) dias FROM emp 3.11. Colocación de las claves primaria y foráneas en una tabla Aunque nada impide que una clave primaria ocupe cualquier posición entre las columnas de una tabla, es una costumbre tácita colocar como primeras columnas las que forman la clave primaria y como últimas las claves foráneas. Esto se considera una buena práctica porque clarifica el papel que desempeñan las columnas, facilita la comprensión de las columnas de la tabla y evita errores. 7 Evidentemente en el caso en el que se tiene una columna que sea a la vez parte de una clave primaria y de una clave foránea, prevalece la posición determinada por la clave primaria. 3.12. Columnas de tipo DATE como parte de claves primarias o claves foráneas Ya se comentó en clase la dificultad que supone trabajar con tipos de datos DATE como claves primarias. Aunque no se puede considerar un error, casi nunca es una buena idea en el modelo relacional. Aunque en el EER puede ponerse y aceptarse, al pasar a relacional resulta que es un dato complicado de manejar, porque muchas veces en el mismo dı́a ocurren varios eventos, con lo que el dato tendrı́a que incluir las horas, minutos, segundos y entonces resulta muy poco adecuado para una clave primaria, pudiendo cambiarse por una clave primaria subrogada. Esto no contradice a lo expuesto en el modelo EER, porque en el modelo relacional pueden aparecer algunas columnas que no estaban necesariamente en el EER. 4. Errores frecuentes (otros cursos) Se han cometido diversos errores que se han observado en los trabajos, con diferente grado de importancia, que han tenido influencia en las notas obtenidas. Alguien puede pensar que en unas tablas se puede almacenar datos de cualquier manera, pero eso solo puede hacerlo quien opina desde la ignorancia de las caracterı́sticas del modelo relacional y de sus posibilidades. Una persona con estudios de Ingenierı́a Informática deberı́a ser capaz de entender y detectar si un modelo relacional es mejor que otro, a qué se deben las mejoras y las ventajas que conlleva. A lo largo del curso se intentó trasladar estas ideas, pero en algunos casos las prácticas caen en errores que parecen indicar que no se han entendido completamente. Entre los errores más destacados están los siguientes: 4.1. Redundancia Una base de datos se diseña para unas necesidades determinadas, pero teniendo en cuenta las ventajas genéricas que proporciona, como la eliminación de la redundancia, etc. Por este motivo no puede entenderse que datos completamente determinados, como provincia, paı́s, etc, se almacenen de forma literal, como una columna más de una tabla, ya que eso es un caso flagrante de redundacia absurda que acabará generando inconsistencias, de manera que en esa columna aparezca, por ejemplo “A Coruña”, “Coruña”, “La Coruña”, “Cruña”. En estos detalles normalmente no se repara al realizar el ER, pero en el MR debe procederse creando una tabla adicional. 4.2. Incongruencias en la documentación Se exponen hechos contradictorios en diferentes partes de la documentación, por ejemplo se expresa en el diagrama del esquema relacional una cosa y otra incompatible con lo anterior más adelante. 8 4.3. Inadecuado trabajo en equipo En algunos casos da la sensación de que el trabajo se hizo por partes, esto es, cada miembro del grupo hizo su parte, pero en vez de una exposición final conjunta de cada parte, con la consiguiente revisión, corrección y aceptación final del grupo, sencillamente se entregó sin esa revisión final. 4.4. Errores en las restricciones • No se diferencian las claves foráneas o no se indican a qué referencian. • No incluir las acciones referenciales en las claves foráneas. • Si se trata de una clave foránea compuesta, la referencia se hace individualmente para cada atributo que la forma. A veces esto ocurre solo en el dibujo y otras se traslada también a las sentencias. • No se usa el MATCH cuando se necesita. 4.5. Usar los mismos nombres para columnas con significado diferente Además del error en sı́ mismo, normalmente conlleva que normalmente el dominio se unifique, cuando deberı́an ser distintos. 4.6. Uso de sinónimos Aparecen en varios trabajos, sobre todo en las claves foráneas. Además del error del sinónimo, conllevan otros problemas como dar lugar a equı́vocos, imposibilidad de utilización del NATURAL JOIN, generación de nombres de columnas muy extensos al repetirse una clave foránea por varias tablas, etc. 4.7. Dominios Los dominios en el EER permiten coincidir, por ejemplo, en un dominio para valores numéricos, pero en el modelo relacional, el dominio tiene una connotación semántica importante, que conlleva que los atributos pertenecientes al mismo dominio han de ser los directamente comparables, por lo que, por ejemplo, un dominio para el código de empleado y otro para el código de departamento, tiene sentido por ser valores no comparables. Para las personas escépticas en este punto, añadir que los dominios tienen como ventajas aplicar propiedades genéricas a todos los atributos que pertenecen a ellos y permitir determinar todos los atributos que tienen una naturaleza dada, y como consecuencia, establecer los datos que son directamente comparables, que son los pertenecientes al mismo dominio. 4.8. Nombres de claves foráneas al estilo “balear” Que el nombre de un atributo contenga el del dato del que deriva, se refiere a que, por ejemplo, al hablar de nombre de empleado, usemos un nombre que contenga algo referente a 9 “nombre” y algo acerca de “empleado”, pero ello no implica que se aplique a las claves ajenas, porque ası́ estarı́amos usando sinónimos, ni siquiera cuando estas claves ajenas forman parte de las claves primarias. El ejemplo del gobierno balear, era realmente un contraejemplo, como se comentó en clase. Por ejemplo: emp(cdgemp, nmbemp, ..., cdgdpt) dpt(cdgdpt, nmbdpt) Pero en histórico de empleado no resulta lógico sustituir el nombre del código del empleado por algo indicativo de la tabla a la que pertenece, como por ejemplo: hst_emp(cdgemphstemp, nmrhstemp, ...) sino usar directamente el nombre dado en la tabla empleado: hst_emp(cdgemp, nmrest, ...) En general, las claves ajenas deben tener el mismo nombre que las candidatas a las que referencian, si representan realmente el mismo dato, aunque hay casos en los que esto último no ocurre y entonces la clave ajena no debe tener el mismo nombre. Por ejemplo, en la tabla empleado el código del departamento al que pertenece, representa justamente el dato código de departamento de la tabla departamento, por lo que debe tener el mismo nombre: emp(cdgemp, nmbemp, ..., cdgdpt) dpt(cdgdpt, ...) Pero si en la tabla departamento incluimos el código del empleado que es director del departamento, ese director, aún siendo un empleado, no se refiere a cualquier empleado, sino solo a los que son directores, por lo que aquı́ sı́ que serı́a más adecuado usar un nombre de atributo diferente, por ejemplo cdgdrc para el director: emp(cdgemp, nmbemp, ..., cdgdpt) dpt(cdgdpt, ..., cdgdrc) Hay casos determinados donde no es posible seguir la norma, por ejemplo si dos subclases del mismo tipo de entidad tienen un tipo de relación N:M entre ellas. En este caso es mejor asignar un nombre diferente a los atributos de las relaciones en la que se convierten las subclases y mantenerlo en la relación que deriva del tipo de relación N:M. 4.9. Representación gráfica de las claves foráneas compuestas Respecto a la representación gráfica de las referencias de las claves foráneas compuestas, se penalizó las referencias de cada atributo individual, ya que además de un grave error origina que la gráfica sea equı́voca. 10 4.10. Incluir en un CHECK una lista extensa de valores Se comentó en clase lo anacrónico que resulta esto, lo que impide destacar la importancia de los valores de los datos y lo que dificulta la programación. (Relacionada con 4.1 en la página 8). En algún caso, el error se reiteró en una tabla auxiliar que precisamente se utiliza para evitarlo. 4.11. Vinculaciones mal representadas en el esquema relacional La transformación de las cardinalidades del ER al pasarlas al MR es como sigue: • Una cardinalidad 1:N en el ER se convierte en una vinculación “1 a muchos” en el MR. • Una 1:1 en ER pasa como “1 a 1” al MR. • Una N:M en el ER necesita de dos vinculaciones “1 a muchos” en el MR. Este sencillo planteamiento no se sigue en varios trabajos, sobre todo en la representación del esquema relacional, haciendo que el dibujo sea incorrecto. En varios casos una cardinalidad 1:1 se representa mal en el MR. Hay dos casos particulares importantes. El primero es el de las subclases, que poseen una cardinalidad 1:1 con relación a la superclase de la que proviene y que se sobreentiende en el diagrama ER, por lo que al pasar a relacional debe dibujarse como “1 a 1” y no como “1 a infinito”. En el caso de una categorı́a la cardinalidad también es 1:1 y ocurre lo mismo al pasar a relacional. La herramienta MySQL Workbench permite representar adecuadamente las vinculaciones 1 a 1 (pulsar sobre la vinculación, elegir la pestaña Foreign Key, seleccionar One-to-one). 4.12. Subclase con tipo de relación 1:N o N:M fusionada con la superclase Este detalle se comentó en clase con la antelación necesaria para corregirlo por lo que se consideró erróneo. Aunque pueda pensarse que es válido hacerlo, origina un modelo menos robusto que requiere la incorporación de condiciones de comprobación adicionales. La condición de clave foránea está completamente ligada a la integridad referencial, que es una de las caracterı́sticas más importantes del modelo relacional. Al actuar de esta forma se tergiversa la integridad referencial porque una clave foránea realmente no referencia a una columna sino solo a unas filas de esa columna. La situación es inevitable en el caso de trasladar subclases y categorı́as, pero constituye una mala práctica en otras situaciones en las que es completamente evitable. El objetivo debe ser que el MR recoja en lo posible las condiciones de los datos, por lo que si lo hace será un diseño robusto, y si no lo hace será menos robusto y necesitará condiciones adicionales. Si se opta por un modelo menos robusto por seguir una elección entre varias, se están haciendo las cosas un poco peor de lo que podrı́an hacerse. 11 4.13. Pasar una categorı́a al modelo relacional de forma errónea Un error que resulta extraño pero que se ha producido. 4.14. Consultas SQL En general los errores aquı́ fueron por usar sentencias relativamente sencillas en su construcción, o que solicitaban cosas muy simples, o que desarrollaron un esquema determinado, aunque fuera complejo, pero que se repitieron de forma reiterada. Sobre este punto conviene recordar que se tuvo en cuenta, entre otras cosas, lo realizado por los diferentes grupos, esto es, se determinaron las valoraciones también por las diferencias que se presentaban entre unos trabajos y otros. 4.15. Reducida capacidad de explicación y de claridad En varios trabajos se observó una reducida capacidad en las explicaciones de las opciones elegidas o una falta de claridad en la exposición de argumentos. 5. Otros detalles importantes Como no se habló estrictamente de ello en las clases, conviene mencionar algo acerca de la influencia de las normas legales en el diseño, especialmente en el caso de la Ley Orgánica de Protección de Datos. 5.1. Diseño acorde a la LOPD La influencia de las normas legales puede ser muy importante en el diseño de una base de datos. El marco regulatorio impuesto por la LOPD -ley orgánica de protección de datos http://www.boe.es/boe/dias/1999/12/14/pdfs/A43088-43099.pdf- es algo que debe tenerse en cuenta, aunque supere los objetivos de la asignatura. La utilización de datos personales debe ser acorde a los derechos plasmados en la LOPD, entre ellos la rectificación y la cancelación, por lo que por ejemplo el uso de un DNI como clave primaria dificulta la adecuación a los requerimientos de la LOPD. Por otra parte, esto confirma lo ya comentado acerca de la inconveniencia de utilizar en un sistema de información propio, identificadores externos como el DNI, por arrastrar con ello a nuestro sistema los errores que ese identificador externo conlleva. EL DNI es un dato que supone un criterio de búsqueda muy utilizado, pero una cosa es eso y otra utilizarlo como identificador. 12