Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-05-2017
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Question Campo "tipo Bits" en Firebird

Buenas, me explico.
Necesito poner en un campo de una tabla los números que me salen de un sorteo. Es decir, siempre salen 10 números en cada sorteo (sobre un universo de 90 números). La idea era poner un 0 o un 1 según el valor que haya salido en la posición correcta.
De ahí, si salieron los números: 10, 12, 14, 16; tendría algo así. (El universo lo hago de 20 para achicar la cosa)

00000000010101010000 <-- Hay 20 posiciones y los "1" marcan los lugares que salieron sorteados.

Ahora bien, este tipo de notación ¿cómo la pongo en Firebird 2.5? ¿Solamente tengo la opción de un varchar(20)? Teniendo en cuenta que después tengo que hacer algunas cosas con eso, como por ejemplo: "decir cuáles son los números que salieron en pantalla".
Una de las cosas que también debo hacer con esto en un "AND". Esto sería, cierta progresión de números (de 20 lugares, 0 o 1) contra otras que están almacenadas (de 20 lugares, 0 o 1)

Si tengo otra progresión, digamos: 00100100010010000000; tengo que hacer (00100100010010000000 AND 00000000010101010000) y ver el que salió.

¿Cómo es conveniente guardar estos datos para luego poder manipularlos de la mejor manera?
Bueno, espero haber sido claro.

Gracias.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.

Última edición por santiago14 fecha: 05-05-2017 a las 23:41:19.
Responder Con Cita
  #2  
Antiguo 06-05-2017
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Parece que FB tiene soporte parcial, usando un campo integer y funciones de BIT:

https://stackoverflow.com/questions/...-to-bit-in-sql

Código SQL [-]
Integer field: 7 = 00000111

SELECT 
   bin_and(field, 1) as bit1, 
   bin_and(field, 2) as bit2, 
   bin_and(field, 4) as bit3,
   bin_and(field, 8) as bit4,
   ... 
FROM T
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 06-05-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y por qué no guardas los números tal cual, en campos integer?
Recuerdo haber guardado cosas en bits, pero de eso hace muchos años, cuando el espacio en disco era muy limitado, los primeros discos duros que usé eran de 4 Megas
Responder Con Cita
  #4  
Antiguo 06-05-2017
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Si entiendo, de lo que hablas no es de almacenar un valor binario como tal si no de guardar el resultado del sorteo de una manera que solo tu sistema lo logre entender y que en este caso se parece a un valor binario.

(10 posiciones)

1 = 1000000000
2 = 0100000000
3 = 0010000000
..
10 = 0000000001

Y si el resultado del sorteo es 4, 7, 10 almacenas la cadena 0001001001.

No se porque lo harás así, pensaría que porque de esta manera quien observe los datos directamente en la base de datos no los comprenderá inmediatamente y al verlo que se parecen a un binario pensará que es eso y no podrá obtener el resultado del sorteo. Solo es especulación.

Si es este el caso, Pues creo que ya tienes una manera bastante curiosa de hacer las cosas y las rutinas que interpretan estas cadenas no creo que sean demoradas. Otra posibilidad sería guardar los valores del sorteo cifrados en la DB y así hasta podrías almacenarlos en diferentes columnas o en tablas detalles. Seoane en su web tiene bibliotecas muy buenas para esto

Si no es el caso, olvídalo
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #5  
Antiguo 06-05-2017
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por Casimiro Notevi Ver Mensaje
..cuando el espacio en disco era muy limitado, los primeros discos duros que usé eran de 4 Megas
Los bitarrays tienen usos muy interesantes (no solo es para ahorrar espacio!):

http://blog.getspool.com/2011/11/29/...redis-bitmaps/

Ahora que he leido un monton sobre arquitecturas de bases de datos, los bitmap index permiten de forma eficiente hacer un monton de cosas:

https://stackoverflow.com/questions/...ndexes-helpful

En especial, acelerar un monton de tareas relacionadas con analiticas, optimizar consultas del tipo AND, OR, NOT, COUNT, etc.

------

Cita:
No se porque lo harás así, pensaría que porque de esta manera quien observe los datos directamente en la base de datos no los comprenderá inmediatamente y al verlo que se parecen a un binario pensará que es eso y no podrá obtener el resultado del sorteo.
Pero si la razon de esto es hacer "seguridad mediante oscuridad" es la razon equivocada.

SQL es un lenguaje relacional, y tiene excelente soporte para tareas de conjuntos.

La razon de usar bitarrays es para obtener eficiencia a escala y formas creativas de hacer estadisticas.
__________________
El malabarista.

Última edición por mamcx fecha: 06-05-2017 a las 01:16:32.
Responder Con Cita
  #6  
Antiguo 06-05-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por mamcx Ver Mensaje
Los bitarrays tienen usos muy interesantes (no solo es para ahorrar espacio!):
Ya, la primera vez que usé 'bitarrays' fue para guardar "estados" en un sistema de base de datos multiusuario que creé en 1994. Lo apliqué a una gestión comercial hecha en lenguaje C, al igual que la base de datos, del tipo c-isam. Quedó un sistema rapidísimo en red local, tanto con msdos, drdos y win31, que es lo que había por aquella época.

Edito: Esa fue la segunda vez, la primera vez fue antes, en 1987, ahí sí que lo usé para ahorrar espacio en disco.
Responder Con Cita
  #7  
Antiguo 06-05-2017
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Tambien los Set:

http://www.delphibasics.co.uk/RTL.asp?Name=Set

Son una implementacion de bitarray. Asi que es algo muy usado en Pascal
__________________
El malabarista.
Responder Con Cita
  #8  
Antiguo 06-05-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por mamcx Ver Mensaje
Tambien los Set:

http://www.delphibasics.co.uk/RTL.asp?Name=Set

Son una implementacion de bitarray. Asi que es algo muy usado en Pascal
Responder Con Cita
  #9  
Antiguo 08-05-2017
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Wink

Jajajajja. La razón no es "seguridad mediante la oscuridad", la razón es mas simple.

Cada sorteo tiene alrededor de 200.000 cartones, los cuales pueden tener 1 o varias combinaciones de 10 número cada uno. Todo esto con un universo de 90 números (1 al 90) para el sorteo.

Si mi tabla de registros de cartones tuviera 10 campos, cada uno INTEGER, para un único sorteo necesitaría 4 bytes * 200.000 registros = 800.000 bytes que son 781 KBytes aprox por sorteo. Si bien no es tanto, suena mas engorroso trabajar con esto que con un valor único que contenga a los valores en un solo campo (bueno, no se)

Si de repente, mi cliente decide hacer un sorteo con 12 números (o de 8), en lugar de 10, ya tendría que pensar en una estructura (tabla) propia para poner los números de la generación de cartones. Para esto tendría que poner otra tabla.

En realidad, estoy buscando la mejor manera de registrar en la BBDD los números correspondiente a los cartones que voy a generar. Son muchos por sorteo y estoy pensando a futuro, para no tener que penar con estructura monstruosas. De ahí que acepto todas las sugerencias que me puedan dar al respecto.

Gracias.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #10  
Antiguo 08-05-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por santiago14 Ver Mensaje
... son 781 KBytes aprox por sorteo.
Eso no es nada
Responder Con Cita
  #11  
Antiguo 09-05-2017
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
[...] los primeros discos duros que usé eran de 4 Megas
Así eran aquellos discos duros en los tiempos mozos de Casimiro:



Responder Con Cita
  #12  
Antiguo 09-05-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Al González Ver Mensaje
Así eran aquellos discos duros en los tiempos mozos de Casimiro:
Ese era ya el modelo nuevo, con bus de datos de 2 bits
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿No funciona el componente "TWebBrowser" en Delphi 64 bits? dec Varios 5 15-09-2016 14:53:03
Error "Error while trying to open file" al conectar Server Centos 6.4 64 bits lavtaro Firebird e Interbase 25 26-01-2014 10:48:19
Sobre componentes del tipo "TChart" o similares, preguntas varias dec Gráficos 2 22-11-2007 14:50:47
Tipo de Variable."String" ó "Double" UTECYBER OOP 7 15-12-2003 21:25:39
Problemas con Query campo tipo Date "Oracle" Marrano Oracle 4 27-05-2003 13:09:56


La franja horaria es GMT +2. Ahora son las 07:45:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi