Diseño De Base De Datos De Las Mejores Prácticas

Estoy bastante bien versado con SQL Server, MySQL, Oracle, etc, pero poniendo estos productos de Base de datos a un lado, hay un recurso que me ayude a diseñar bases de datos relacionales así? Hay algo como patrones o mejores prácticas para el diseño de base de datos?

He visto un par de veces que la base de datos a menudo no es escalable; la gente tiene preferencias personales con el mantenimiento de las columnas como isChecked columna, que es booleano en la naturaleza pero se almacenan como Char(1) con valores como la ‘Y’ y ‘N’ en lugar de 0 y 1, que para mí suena mejor. Maneras de no cometer errores comunes, mientras que haciendo diseño de base de datos?

Enlaces a libros o artículos será muy apreciada.

Gracias de antemano.

  • Es ridículo que esta estaba cerrada, como no constructiva. A veces no entiendo por qué sigo viniendo a este sitio.
  • Queridos pregunta de cierre de los usuarios: por Favor, díganos, donde debemos hacer preguntas como esta.
  • aquí es algo que me parece útil codeproject.com/Articles/359654/…

14 Kommentare

  1. 45

    Un par de puntos:

    • Aprender tanto como usted puede sobre dominio del problema. Usted no puede crear un buen modelo de datos sin saber lo que usted está diseñando para
    • Tener un buen conocimiento acerca de tipos de datos proporcionada por su proveedor de base de datos
    • Cómo utilizar correctamente normalización y tablas de diseño
    • Rendimiento: cuándo y cómo aplicar índices, cómo escribir un consultas etc.
    • Cuándo y cómo utilizar de base de datos diferentes objetos como vistas, procedimientos, funciones, triggers
    • Otro punto a aprender (o realizar) es la forma en que gran parte de la lógica que creo debe estar en la aplicación de capa de datos, en realidad puede ser implementado directamente en la base de datos a través de disparadores, claves foráneas, opiniones, etc, y reduce en gran medida el potencial de pérdida de la integridad de los datos.
  2. 24

    Hay numerosos base de datos de patrones de diseño. Ellos no son a menudo muy bien formalizada, por lo que puede que tenga que mirar simplemente un montón de diseño de base de datos.

    Ver, por ejemplo, Fowler libros de patrones de diseño. También Nock del Libro.

    Hay blogs, como programador de bases de datos.

    Hay un IEEE libro, En el Patrón de base de datos Basado en el Diseño y la Implementación.

    La Búsqueda de Google (enlace) se dirigió hasta 24M éxitos.

    • +1 para Marting Fowler
    • +1 por D. Nock… el libro es una JOYA!!
  3. 20

    Mi opinión sobre esto es un poco la contraria.
    Yo aconsejo, no subrayan el diseño de la base de datos demasiado.

    A veces esto puede ser difícil. Con internos aplicaciones de línea de negocio, la visión predominante de la empresa es a menudo veces que los DATOS son el activo principal, donde el software es algo prescindible.

    Mi consejo sería: no lo compre.

    En realidad, el activo es la capacidad de la empresa para INTERACTUAR con los datos. A ver, manipular y tomar decisiones basándose en ella.

    Esto significa que aunque se puede colocar un valor alto en los datos, lo que en realidad están valorando es el software que usted está escribiendo.

    Esto significa que me concentraría la mayor parte de su esfuerzo en la construcción de una efectiva experiencia de usuario, en lugar de en «el diseño de la perfecta base de datos». La base de datos es sólo una herramienta que le permite ofrecer una experiencia de usuario.

    La característica clave de datos relacionales de los modelos de datos y acceso a ruta de la independencia. Puede agregar columnas, cambiar las claves, introducir o eliminar índices, etc, a pesar de tener un impacto cero (o casi cero) en las aplicaciones que lo utilizan.

    Esto hace que la estructura de base de datos extremadamente flexible.

    Tratando de diseño de la base de datos de «ser flexible para el futuro», o para «optimizar para rendimiento» es sobre todo un esfuerzo en vano.

    El cambio de la estructura de la base de datos tendrá un impacto relativamente pequeño en su sistema.

    También, realmente no se puede predecir cómo la base de datos de escala hasta que se ejecute en los escenarios donde se necesita a escala. Su mejor apuesta es esperar hasta llegar a problemas de rendimiento. y, a continuación, abordar específicamente a ellos.

    De hacer cambios a la experiencia de usuario de tu aplicación, sin embargo, suele ser más caro.
    Interfaz de usuario el trabajo es mucho tiempo, y por lo general toma un tiempo para obtener el derecho.

    Así, me gustaría recomendar que:

    1. Acaba de producir un mal DB diseño
    2. Reaccionar para que el rendimiento real de los escenarios que encuentro
    3. Enfocar sus esfuerzos en la experiencia del usuario, no en la base de datos
    • excelentes consejos, en realidad. Por lo general los estudiantes de esta disciplina se muestra un buen diseño y se parece a la magia para ellos, pero no si empezaron w/ paso 1. +1
  4. 7

    Para contrarrestar Dillie-O del consejo. Me gustaría sugerir que usted no poner todas sus búsquedas en una tabla. En general, este es un intento de forzar OO diseño en una Base de datos Relacional. Se puede hacer y se ajusta a la visión del mundo de un OO desarrollador, pero conduce a la paralizante diseños de base de datos.

    Rebote a Google y buscar «MUCK » Tablas» que se llevan a discusiones de forma Masiva Código Unificado-las Tablas principales. Como alternativa, puede buscar «una verdadera tabla de búsqueda» para los debates. O incluso leer Joe Celko del artículo Una Verdadera Tabla De Búsqueda .

  5. 4

    No almacenar valores calculados

    Ejemplo, Usted tiene la tabla de «Plazas» con la columna «ancho». No hay necesidad de hacer una columna «área», debido a que puede ser calculada a través de la anchura ^ 2

    • En general sí, pero hay un montón de excepciones.
    • Sólo por curiosidad, ¿puedes nombrar uno ? Tal vez si el campo calculado en la mano es muy intensivo en recursos, para calcular?
    • Si su sistema no admite los índices basados en funciones, y desea ser capaz de indexar el valor calculado.
    • buen ejemplo, nunca he pensado en eso! (aunque, mi consejo todavía tiene agua, si no estaban tratando de índice de «área»)
    • Posiblemente en un almacén de datos escenario donde usted está más interesado en la presentación de informes de datos, pero no el post procesamiento.
  6. 3

    Como con cualquier cosa, la respuesta es «Depende».

    Bases de datos pueden ser utilizados para hacer cosas diferentes, y algunas de esas cosas se requieren direcciones opuestas en el diseño y desarrollo.

    Una base de datos OLTP sistema será diseñado de una forma totalmente distinta de aquella usada como un informe o almacenamiento de la solución. La primera es a menudo normalizada, y un almacén es a menudo desnormalizados. Esto ayuda a que el sistema de obtener el rendimiento deseado por su intención de comportamiento.

    Incluso dentro de un segmento de este, dependiendo de si el uso va a ser de lectura pesada o escribir pesados de diferentes decisiones de diseño que podrían ser apropiadas.

    La mejor apuesta es buscar las mejores prácticas para un mucho más pequeño segmento de desarrollo de base de datos que se corresponde con el tipo de aplicación que estamos tratando de construir.

  7. 3

    El mejor libro que he leído en lo que respecta a diseño de base de datos es «Diseño de Base de datos para los simples Mortales», por Michael J Hernández. El nombre suena como una principiantes libro, pero la gente en cualquier nivel puedan adquirir conocimientos a partir de ella. Es también independiente de la plataforma, ya que se ocupa de analizar los datos de sí mismo y de cómo organizar adecuadamente – no se trata de la tecnología que se utiliza.

    También escribió un libro sobre la escritura de consultas denominado «Consultas SQL para los simples Mortales» que he escuchado (no he leído este mismo todavía) es bastante buena.

    Diseño de base de datos para los simples Mortales

  8. 3

    La base de datos relacional es un extremadamente potente de la abstracción; es una colección de hechos y un predicado de cálculo. No sólo eso, SQL impone comando de consulta de la separación por tener una cláusula para el examen de las filas y otro para el cambio de filas.

    Cuando usted piensa en un base de datos como una verdad razonamiento motor, tiene sentido tener un set-up que no permite las contradicciones de flujo a partir de los datos de la modelización. Por lo tanto, el uso de una base de datos relacional efectivamente usted necesita para obtener su diseño de base de datos a la derecha. A diferencia del diseño orientado a objetos programas, no hay un consenso sobre cómo una base de datos relacional debe ser diseñado. El enfoque adecuado para diseño de base de datos es normalizar la medida de lo sensible. La mayoría de las personas normalizar hasta la tercera forma normal, pero se puede, de hecho, ir hasta la quinta forma normal.

    Si es posible, que desea borrar valores null en la columna de la base de datos. Si usted está de acuerdo con mi punto de vista de la base de datos como una verdad razonamiento motor, a continuación, los valores null a un problema real. Cuando se tienen valores nulos en una base de datos de la ley de medio excluido no no espera. Esto hace que «la prueba por contradicción» de cualquier propiedad de la base de datos más difícil de lo que sería sin los valores nulos. Valores nulos complicar innecesariamente la semántica de la base de datos.

    A veces será necesario romper las reglas de la normalización por razones de rendimiento. Sin embargo, no hagas esto antes de tener datos en lo que es las consultas, en particular, son lentos. A menudo, usted puede simplemente acelerar la consulta cuidadosamente la alteración de los índices en lugar de denormalising.

    Finalmente, una palabra sobre procedimientos almacenados en lugar de consultas directas. En un decente base de datos, puede establecer permisos de seguridad en los procedimientos almacenados de forma independiente de las tablas subyacentes. Esto, por sí mismo, es razón suficiente para considerar el uso de procedimientos almacenados de forma extensiva. Con procedimientos almacenados, a construir un mejor modelo de seguridad que es posible con directo acceso de SQL.

  9. 2

    Posiblemente la más famosa de las mejores prácticas en la base de datos de la normalización. Este conjunto de técnicas que permite el diseño de su base de datos de forma redundante que se eliminan los elementos, y los campos se agrupan de forma lógica.

    • Ellos predican esta en la escuela… Entrar en el mundo real, y yo vengo a encontrar esta no es siempre una buena cosa!!
  10. 2

    si no documento de las enumeraciones en la columna de descripción del esquema para que yo pueda averiguar lo que el ‘5’ es en esto:

    Select name from peeps where accountStatusId = 5
    

    , a continuación, hacer esto

    Utilizar una tabla para enumerar un campo. por ejemplo:

    Select name 
    from peeps p 
    join accountStatus s 
    on p.accountStatusID = s.asid 
    where s.accountStatus = 'ActiveDude'
    
  11. 2

    El libro de Michael J. Hernández Diseño de Base de datos para los simples Mortales está bien escrito y fácil de leer. Se debe responder a todas sus preguntas.

    Hernández también co-autor de Consultas SQL para los simples Mortales con John L. Viescas.

    Los libros son alrededor de $60 dólares por pieza. Estoy tratando de encontrar el CD de Consultas para los simples Mortales, porque he perdido la mía. Si alguien tiene una copia, que me haga saber.

  12. 0

    yo diría que en la medida en que la base de datos normalizado y si vas a hacer un VLDB luego de partición correctamente, entonces usted debe estar bien. otras prácticas incluyen el uso de la BASURA para los procedimientos almacenados y asegurar que todas las tablas de la cascada correctamente. la mayoría de todo lo demás es subjetivo. El uso de «S/N» es de la vieja escuela de la base de datos de programación de poco cuando no ha sido introducida todavía. También puede ser utilizado para la escalabilidad como «S/N», «Quizás», pero si ese fuera el caso bast prácticas diría que normalizar y hacer una tabla de búsqueda.

  13. -1

    Un concepto que usamos por aquí que ha demostrado ser muy buena es la de «Búsqueda de Código» de la tabla. Si usted tiene una base de datos que tiene un montón de referencias a elementos que efectivamente los códigos, o tipos, o similares, de mantener todos ellos en una sola LookupCode tabla que se basa en cosas de una CodeGroup y el propio Código.

    Mantenemos una marca adicional para el estado activo del código, así como un par de opcionales en las columnas numéricas que se puede utilizar si se le da de búsqueda de código debe ser ordenada o calculado en cualquier tipo de moda.

    Al hacerlo, se puede eliminar la necesidad de toneladas de pequeñas mesas distribuidas alrededor de su esquema. Ahora una de las desventajas de esto es que la clave primaria de la tabla es el código de grupo y al propio código, así que no hay una clave externa conectada a la «maestra» de la tabla que hace referencia a un código dado, pero un poco de orden en la aplicación es fácilmente para acomodar esto.

    • -1: Esto también oscurece la cardinalidad de se une a la mesa, hace que la integridad de los datos más difíciles de hacer cumplir, y es bastante ampliamente considerado como una mala práctica.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein