Pregunta

Me doy cuenta de esta pregunta puede parecer un poco en el lado "verde", pero después de que el número de bases de datos "comerciales" que he encontrado "empresa" o he empezado a hacer esta pregunta. ¿Qué ventajas ofrecen a las limitaciones de una base de datos? Estoy pidiendo más información sobre restricciones de clave externa en lugar de limitaciones únicos. Tampoco ofrecen mejoras de rendimiento, o simplemente integridad de los datos?

He sido bastante sorprendido por el número de bases de datos relacionales sin claves externas o incluso sin claves primarias especificados (sólo restricciones en campos no siendo nulo o una restricción única en el campo).

Los pensamientos?

¿Fue útil?

Solución

"sólo" integridad de los datos? Dices eso como si fuera una cosa menor. En todas las aplicaciones, es fundamental. Así que sí, se establece que, y es un enorme beneficio.

Otros consejos

La integridad de datos es lo que ofrecen. Si hay algo que tienen un costo de rendimiento (una muy pequeña por lo menos).

Ellos proporcionan el rendimiento y la integridad de los datos, y el último es de suma importancia para cualquier sistema serio. Me estremezco cada vez que veo una base de datos sin ningún tipo de claves externas y donde toda la integridad se realiza a través de disparadores (en su caso). Y vi un poco de aquellos que por ahí.

A continuación, suponiendo que se obtiene la restricción de la derecha en el primer lugar: -

  • Sus datos serán válidas con respecto a la restricción
  • La base de datos sabe sus datos serán válidas con respecto a la restricción y se puede utilizar este al consultar o actualizar la base de datos (por ejemplo, la eliminación de una innecesaria para unirse a una consulta en una vista)
  • La restricción se documenta para los futuros usuarios de la base de datos
  • Una violación de la restricción será capturado tan pronto como sea posible; no en un proceso posterior distinta que falla

En la teoría relacional, una base de datos que permite que los datos inconsistentes no es realmente una base de datos relacional. Las claves externas son necesarias para la integridad de los datos y la consistencia para mantener la base de datos "relacional"; es decir, el modelo lógico de la base de datos siempre es correcta.

En la práctica, por lo general es más fácil definir una clave externa y dejar que el mango del motor DB asegurándose de que la relación es válida. Las otras opciones son:

  • nada - la corrupción de datos garantizada en algún momento
  • DB desencadena - el cual por lo general será más lento y menos performant
  • código de la aplicación - el cual el tiempo puede causar problemas cuando tampoco se olvida de llamar a la derecha código u otra aplicación tiene acceso a la base de datos.

Los datos son un activo. Un montón de libros de texto afirman que.

Pero en realidad es incorrecto. Más bien debería decir "información correcta, es un activo, datos incorrectos es un pasivo".

Y las limitaciones de bases de datos le dan la mejor garantía de que los datos son correctos.

En algunos DBMS (por ejemplo Oracle) limitaciones en realidad puede mejorar el rendimiento de algunas consultas, ya que el optimizador puede utilizar las restricciones para adquirir conocimientos acerca de la estructura de los datos. Para algunos ejemplos, véase este Oracle Magazine artículo .

Yo diría que todas las restricciones requeridas deben estar en la base de datos. restricciones de clave externa impiden datos inutilizables. No son un bonito tener - que son un requisito a menos que desee una base de datos inútiles. Las claves externas pueden perjudicar el rendimiento de eliminaciones y actualizaciones, pero que está bien. Es mejor tomar un poco más de tiempo para hacer un borrado (o para decirle a la aplicación de no eliminar a esta persona porque tiene pedidos en el sistema) o para borrar el usuario, pero no sus datos? La falta de claves externas pueden ocasionar problemas inesperados y, a menudo graves en la consulta de los datos. Por ejemplo, los informes de costos pueden depender de todas las tablas que tienen datos relacionados y por lo tanto pueden no mostrar los datos importantes debido a una o más tablas no tienen nada para unirse a.

Las restricciones de unicidad son también un requisito de cualquier DATABSE decente. Si un campo o grupo de campos deben ser únicos, al fracaso para definir esto en la base de datos es leve problemas de datos tocreate que son extremadamente difícil de solucionar.

Usted no mencionar otras limitaciones pero debería. Cualquier regla de negocio que siempre se debe aplicar a todos los datos en la tabla siempre se debe aplicar en la base de datos a través de un tipo de datos (por ejemplo, un tipo de datos DataTime cuales willnot aceptar '02 \ 31 \ 2009' como una fecha válida), una restricción (por ejemplo uno que no permitirá que el campo para tener un valor mayor que 100) o por medio de un disparador es la lógica es tan compleja que no puede ser manejado por una restricción ordinaria. (Los factores desencadenantes son difíciles de escribir si usted no sabe lo que está haciendo, por lo que si usted tiene la lógica de este complejo, se espera que tenga adatabase profesional en su equipo.) El orden es importante. Los tipos de datos son la primera opción, seguido de restricciones, seguido por desencadenantes como última opción.

Más simple código de aplicación

Una cosa buena que proporcionan es que el código de aplicación tiene que ver mucho menos la comprobación de errores y validación. Contrastar estos dos trozos de código y se multiplica por miles de operaciones y se puede ver que hay una gran victoria.

get department number for employee  # it's good coz of constraints
do something with department number

vs.

get department number for employee
if department number is empty
    ...
else if department number not in list of good department numbers
    ....
else
    do something with department number

Por supuesto, las personas que ignoran las restricciones probablemente no ponen mucho esfuerzo en la validación del código de todos modos ...: - /

Ah, y si las limitaciones de los datos cambian, se trata de un problema de configuración de base de datos y no una cuestión de cambio de código.

Las restricciones de integridad son especialmente importantes cuando se integra varias aplicaciones que utilizan una base de datos compartida.

Usted puede ser capaz de gestionar adecuadamente la integridad de datos en el código de una sola aplicación (e incluso si no, al menos, los datos rota afecta sólo a la aplicación), pero con múltiples aplicaciones se pone peluda (y al menos redundante ).

"Ah, y si las limitaciones de los datos cambian, se trata de un problema de configuración de base de datos y no una cuestión de cambio de código."

A menos que sea una restricción que desaparece del diseño. En ese caso, hay definitivamente un impacto de código, porque algunos código podría haber sido escrito que depende de esa restricción eliminado estar allí.

Eso siempre deben ser tomadas en cuenta a la hora "laxing" o "eliminar" cualquier restricción declarado.

Aparte de eso, usted es, por supuesto, toda la razón.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top