La cantidad de campos que es ‘demasiados’ en una tabla?

Tengo un compañero de trabajo que es la planificación de una base de datos para una nueva aplicación que va a tener varias tablas con más de 30 campos de cada uno. Es este exceso? Tal vez es solo que no estoy enterprisey suficiente para comprender.

Edit: Además, una gran cantidad de los campos de opción de tipo tipo de cosas (como en un formulario de solicitud, le gustaría que su widget a ser de color amarillo o verde, que tiene un campo de ‘color’ con un enum). Es muy probable que estos se agrega o se elimina a través del tiempo. Realmente no he hecho diseño de base de datos y tratar de mantenerse alejado de mí mismo, así que tal vez estoy siendo completamente estúpido, pero seguro que hay una manera mejor de hacer esto??

12 Kommentare

  1. 12

    Tablas de base de datos puede legítimamente tienen 30 o más campos que hay en ellos. Lo que usted necesita para tener en cuenta es la normalización de los datos y si que la normalización tiene ningún sentido. Normalmente, el cambio en el futuro, así. Pero, usted desea para tratar de minimizar ese.

    Por ejemplo, si usted tiene una tabla en la que se aborda en ella, cómo incluir la ciudad, estado y código postal campos de esa tabla? O, ¿sólo incluyen un campo que «apunta» a un registro en una tabla separada para esos valores? La tabla contendrá única ciudad, estado, código postal combinaciones. El efecto de dividir los datos en dos tablas es una reducción en la cantidad de datos almacenados (lo más probable, pero no absoluta), pero un poco de mayor complejidad cuando se vaya a ejecutar consultas contra la base de datos. Ahora, usted tiene que tratar con 2 tablas, en lugar de sólo uno. Pero, en el lado positivo, es mucho más limpio, y mucho más pequeña (probable).

    La verdadera respuesta es que salga de la ciudad, estado y código postal datos en la tabla de direcciones en las circunstancias adecuadas. O, usted podría desear para «normalizar» a cabo. Ambos están bien.

    Encontrar un buen administrador de base de datos y los contratan a corto plazo para revisar el plan, si es en el presupuesto. No valdrá la pena en el largo plazo.

    • La división de la dirección en una tabla separada sólo tiene sentido si cada dirección puede ser utilizada más de una vez, pero eso es muy poco probable a menos que usted complicar su interfaz. Si cada dirección sólo es utilizado por una sola persona, lo que han hecho es la partición vertical, no la normalización.
    • Me refería a la división de la Postal,Ciudad,Estado en una tabla con una clave externa en la tabla de direcciones. Por lo general es muy probable que varias direcciones tendrá un código postal asociado con ellos y, por tanto, la Ciudad y el Estado. (Cada código postal afaik se asocian únicamente con una sola ciudad y el estado.) Por lo tanto, si su tabla de direcciones es enorme, se puede pagar a normalizar la duplicación de código Postal, Ciudad y Estado de los datos en una tabla separada.
    • Cremalleras puede estar asociado con varios de la ciudad/estados … por ejemplo, mi código postal (17402) es a la vez «, York, PA» y «Spry, PA»
    • Que es muy interesante. Por lo tanto, podría recibir una carta en la que el código postal no importa en qué ciudad está dirigida a? ¿Cómo es su +4 dígitos?
  2. 12

    El signo más evidente de una mesa requiere de normalización que he visto es que los campos de acabar con enteros: CouponCode1, CouponCode2, CouponCode3.. usted consigue el punto. Habrá excepciones a la regla como siempre, sin embargo.

    • Si conoces alguna excepción a esta regla, por favor no dude en developp. Nunca he conocido a una excepción de ese tipo
    • La primera que viene a la mente sería algo así como un AddressLine columna. Yo no tengo ningún problema con AddressLine2 como un nombre de columna. Opcionalmente, puede ir con AdditionalAddressLine o algo similar, pero como he dicho, en esta excepción, yo estoy bien con ella.
    • Uno de mis colegas siempre dijo «Pulgar de la regla de las Bases de datos de Abajo Siempre Late en Todo!»
  3. 9

    Treinta campos no es demasiado – usted sólo tiene que asegurarse de que sus datos están correctamente normalizadas (por que hay un montón de guías en la web).

    Basado en su edición donde se especifica que el número de columnas será la opción tipo de campos que pueden ser añadidos o eliminados a lo largo del tiempo, sugiero la siguiente es una mejor idea.

    BaseTable:
        Id
        NonOptionFields
    OptionTable:
        Id
        OptionName
        OptionValue
    

    Entonces usted puede hacer todas sus opciones a la base de registro. Esto significa que usted no tiene que añadir y eliminar columnas de las tablas que todo el tiempo ly forma normalizada para lograr lo que desea.

  4. 7

    Por supuesto, la respuesta estándar es depende. Una tabla con muchos campos de hecho, podría hacer un buen montón de sentido en algunas situaciones.

    Pensar acerca de los datos que va a almacenar allí. Es probable que muchos de estos campos será NULO? ¿Cuál es la probabilidad de que estos campos de cambio (por ejemplo: se agregan más)?

    Si sólo ciertos campos se aplican a ciertos objetos, tal vez pensar en poner los campos en otra tabla. Alternativamente, una tienda básica, común en los campos de una tabla, y la información adicional en otra tabla, una fila por cada campo. Como Me sugirió para una pregunta (que puede ser de ayuda para usted):

    refs (id, título, refType) 
    -- título de la referencia, y qué tipo de referencia es 
    
    fieldDef (id, nombre del campo, refType, dataType) 
    - el nombre del campo, que los tipos de referencia se aplica a, y 
    -- ¿qué tipo de datos se almacena en estos campos (RDSI número, fecha, etc) 
    
    campos (refId, id de campo, valor) 
    - donde te agregan los datos de las referencias bibliográficas. 
    

    Tenga en cuenta que este fue votada abajo, y probablemente con razón. Este es una opción, no necesariamente la mejor opción, pero es todavía un método funcional. La más votada respuesta en la pregunta he ligado podría ser la mejor solución, sin embargo.


    Edit: ya que dicen que va a ser la celebración de cosas como la configuración de cada usuario (por ejemplo: el widget de color), me gustaría realmente recomiendo el método descrito anteriormente (con tres tablas). Las posibilidades son que la mayoría de la gente va a dejar las cosas en el valor predeterminado, por lo que tendrás un montón de información inútil que se almacena. Por favor lea mi respuesta en la pregunta debido a que otros lectores han señalado las deficiencias de este método.

  5. 4

    no hay límite arbitrario; lo suficiente para hacer el trabajo es una buena regla del pulgar

    si usted tiene una mejor db diseño, sugieren que

    si quieres más información detallada, publicar el esquema

  6. 4

    El término «muchos» es relativo… no debes dividir una tabla sólo por el bien de reducir el número de campos, especialmente si en cada consulta que usted va a tener que unirse a ellos, porque ellos son esencialmente uno-a-uno con las relaciones. Si los campos se puede descomponer en un aparte, objeto lógico, no tendría sentido. Por ejemplo, en lugar de almacenar la dirección de los campos en una tabla de clientes, se puede mover en una dirección independiente de la tabla. Este es un ejemplo crudo, pero ilustra mi punto.

  7. 3

    OLTP

    De mi experiencia en el diseño de bases de datos, hay muy pocas mesas en un normalizada OLTP, base de datos que contienen un increíblemente gran número de columnas.

    OMI 30 columnas es demasiado.

    Para mí, no más de 10% de mi OLTP tablas tienen un gran número(>10) de las columnas.

    OLAP

    Ahora si vas a hacer un Dimensional /la estructura de los Informes, algunas personas pueden considerar un 30 columna de la tabla a ser estrecho.

  8. 1

    No hay ninguna restricción en el número de campos en la base de datos a la teoría. Una tabla puede ser limitada a una clave principal (aun si esta clave principal se compone de 2 campos), lo que significa que Apocalisp la respuesta no es muy clara. En el opposit, una tabla puede ser hecha de miles de campos, mientras la forma normal de reglas son respetados.

    Cuando los grupos de campos, obviamente, son infrautilizados en una tabla, que puede ser muy inteligente para dividir este grupo de campos de otra tabla con un 0-1 relación entre la tabla principal y la «sub» de la tabla.

    Por razones de seguridad, también fue propuesto a menudo (hace mucho tiempo: creo que fue mi primer libro de relationnal bases de datos, publicado por primera vez en 197?) para dividir la información confidencial de otra tabla con el mismo 0-1 relación entre el principal y el sub. Fue entonces posible restringir fácilmente el acceso de los usuarios a «sub» de la tabla. Dicha configuración puede ahora ser fácilmente manejados a través de las vistas.

  9. 0

    Un delata es justo lo que usted dijo. Él tiene campos que en teoría debería ser dividido en una tabla diferente. Otro regalo es la presencia de muchos campos opcionales.

    Yo diría que un curso en diseño de base de datos está en el orden de la DB «Experto». Y te sugiero que repase es así…sólo puede ayudarle a crecer en su carrera 🙂

Kommentieren Sie den Artikel

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