Pregunta

En mi solicitud, me gustaría que el usuario seleccione sus días de trabajo. luego almacenarlos en la base de datos. Por supuesto mi aplicación procesará los datos de los usuarios como:. ¿Hoy es un día de trabajo para un usuario específico, que son los usuarios que deben trabajar hoy, etc ...

Mi pregunta es, ¿cuál es la mejor práctica para hacer esto? ¿Debo uso:

  1. campo Bitmasking en la tabla de usuarios
  2. Muchos de muchas mesas relaciones mediante la creación de la tabla por días, los usuarios y days_users. Gracias de antemano.
¿Fue útil?

Solución

Yo diría que los campos de máscara de bits son un anti-modelo relacional.

Un campo debe tener un único valor significativo, de lo contrario se termina con la consulta de temas -. Analizar el campo cada vez que se necesita para usarlo consulta

Tal práctica se requiere documentación adicional, ya que los valores que almacena no son auto describir.

Otros consejos

Bitmasking campo es un poco más críptica en la naturaleza y lo que necesita para crear algo más para interpretar lo que almacena en la máscara de bits.

El segundo enfoque es mucho más transparente y fácil de entender y es un poco más flexible si es necesario agregar más valores. Con la máscara de bits, que de nuevo tiene que hacer de nuevo su mapa de bits decodificador cada vez que se agrega un valor que puede ser una pesadilla mantenimiento en comparación con el enfoque relacional.

He cometido el error de ir con la opción 1, y dada la oportunidad de volver atrás en el tiempo Yo sin duda hacerlo de la otra manera.

Su base de datos es casi seguro que no usar un índice para realizar consultas a nivel de bits en su máscara de bits. Así que si usted quiere encontrar, por ejemplo, todos los martes de trabajo, vas a hacer una exploración de índice cada vez. Como las tablas consiguen grande, esto puede destruir su rendimiento. Se puede tratar de optimizar evitar esto mediante el almacenamiento en caché de un SELECT DISTINCT(bitmaskfield) antes de tiempo, haciendo la lógica máscara de bits en su propia aplicación, y turing en una cláusula WHERE bitmaskfield IN (...) apropiado, pero que rápidamente se convierte en imposible de mantener como usted entonces tiene que actualizar su distinta-máscara de bits caché en cada lugar que se cambian los valores en la base de datos.

Las mesas adicionales y se une puede parecer como un dolor, pero la máscara de bits van a resultar peor. Confía en mí en esto. Utilice su base de datos como una base de datos.

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