usa fecha como parte de la clave primaria

07/10/2004 - 09:38 por Mara | Informe spam
hola a todos:

queria crear una aplicacion en la que registrar eventos para una lista de
clientes

tengo los clientes con toda su informacion y un numero de identificacion
unica en una tabla

en una segunda tabla tendre el id_cliente mas los detalle de cada una de sus
eventos, por ello debo utilizar una clave primaria doble para identificar el
id_cliente-evento

nunca se produciran dos eventos el mismo dia

por ello mi pregunta, resutara optimo usar id_cliente-fecha como clave
primaria o mejor usar id_cliente-id_evento y fecha como un atributo mas ??
(id_evento tal que 1 para el primero 2 para el segundo...)

gracias por adelantado

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
07/10/2004 - 11:26 | Informe spam
Si tienes una clave natural disponible (como pueda ser en este caso
idCliente + fechaEvento), úsala. Ahora bien, si no quieres usar un tipo de
dato DATETIME (por no complicarte o porque no te interesa la hora) puedes
usar un CHAR de 8 posiciones para almacenar la fecha del evento en formato
ANSI (yyyymmdd).


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Mara" escribió en el mensaje
news:
hola a todos:

queria crear una aplicacion en la que registrar eventos para una lista de
clientes

tengo los clientes con toda su informacion y un numero de identificacion
unica en una tabla

en una segunda tabla tendre el id_cliente mas los detalle de cada una de


sus
eventos, por ello debo utilizar una clave primaria doble para identificar


el
id_cliente-evento

nunca se produciran dos eventos el mismo dia

por ello mi pregunta, resutara optimo usar id_cliente-fecha como clave
primaria o mejor usar id_cliente-id_evento y fecha como un atributo mas ??
(id_evento tal que 1 para el primero 2 para el segundo...)

gracias por adelantado


Respuesta Responder a este mensaje
#2 Mara
07/10/2004 - 12:26 | Informe spam
mi principal preocupacion es si no sera muy complejo con el DATETIME, me
refiero a lento, etc...

pero la idea de yyyymmdd me gusta, y supongo que el mismo rendimiento que 1,
2, 3, 4...


gracias por la explicacion



"Carlos Sacristan" <csacristan ARROBA mvps.org> wrote in message
news:u%232j8%
Si tienes una clave natural disponible (como pueda ser en este caso
idCliente + fechaEvento), úsala. Ahora bien, si no quieres usar un tipo de
dato DATETIME (por no complicarte o porque no te interesa la hora) puedes
usar un CHAR de 8 posiciones para almacenar la fecha del evento en formato
ANSI (yyyymmdd).


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Mara" escribió en el mensaje
news:
> hola a todos:
>
> queria crear una aplicacion en la que registrar eventos para una lista


de
> clientes
>
> tengo los clientes con toda su informacion y un numero de identificacion
> unica en una tabla
>
> en una segunda tabla tendre el id_cliente mas los detalle de cada una de
sus
> eventos, por ello debo utilizar una clave primaria doble para


identificar
el
> id_cliente-evento
>
> nunca se produciran dos eventos el mismo dia
>
> por ello mi pregunta, resutara optimo usar id_cliente-fecha como clave
> primaria o mejor usar id_cliente-id_evento y fecha como un atributo mas


??
> (id_evento tal que 1 para el primero 2 para el segundo...)
>
> gracias por adelantado
>
>


Respuesta Responder a este mensaje
#3 plozano
07/10/2004 - 13:44 | Informe spam
si el numero de identificacion es unico, este ya es clave
y no hace falta ampliarlo



hola a todos:

queria crear una aplicacion en la que registrar eventos


para una lista de
clientes

tengo los clientes con toda su informacion y un numero de


identificacion
unica en una tabla

en una segunda tabla tendre el id_cliente mas los detalle


de cada una de sus
eventos, por ello debo utilizar una clave primaria doble


para identificar el
id_cliente-evento

nunca se produciran dos eventos el mismo dia

por ello mi pregunta, resutara optimo usar id_cliente-


fecha como clave
primaria o mejor usar id_cliente-id_evento y fecha como


un atributo mas ??
(id_evento tal que 1 para el primero 2 para el segundo...)

gracias por adelantado


.

Respuesta Responder a este mensaje
#4 Javier Loria
07/10/2004 - 15:04 | Informe spam
Hola:
Si Carlos me permite, las fechas son excelentes como parte de la llaves
primarias y buenas candidatas para formar parte del indice clustered (por
comportamiento predeterminado las primarias son indice clustered). Es
importante porque muchas consultas se hacen por fecha, por lo que es bueno
ponerlas de primero en la llave.
Una columna SMALLDATETIME solo ocupa 4 bytes que es tan pequena como un
entero. Si la aplicacion tuviera millones de filas y quisieras mejorar el
desemepeno podrias crear una tabla con fechas con smalldatetime y con un
numero smallint, luego usas el numero en la tabla y usas un join, esto se
hace en las tabla de hechos de las bodegas de datos, pero normalmente en un
transaccional no se usa.


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"Mara" wrote in message
news:
mi principal preocupacion es si no sera muy complejo con el DATETIME, me
refiero a lento, etc...

pero la idea de yyyymmdd me gusta, y supongo que el mismo rendimiento que


1,
2, 3, 4...


gracias por la explicacion



"Carlos Sacristan" <csacristan ARROBA mvps.org> wrote in message
news:u%232j8%
> Si tienes una clave natural disponible (como pueda ser en este caso
> idCliente + fechaEvento), úsala. Ahora bien, si no quieres usar un tipo


de
> dato DATETIME (por no complicarte o porque no te interesa la hora)


puedes
> usar un CHAR de 8 posiciones para almacenar la fecha del evento en


formato
> ANSI (yyyymmdd).
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> Por favor, responder únicamente al foro
> Se agradece la inclusión de sentencias DDL
>
>
> "Mara" escribió en el mensaje
> news:
> > hola a todos:
> >
> > queria crear una aplicacion en la que registrar eventos para una lista
de
> > clientes
> >
> > tengo los clientes con toda su informacion y un numero de


identificacion
> > unica en una tabla
> >
> > en una segunda tabla tendre el id_cliente mas los detalle de cada una


de
> sus
> > eventos, por ello debo utilizar una clave primaria doble para
identificar
> el
> > id_cliente-evento
> >
> > nunca se produciran dos eventos el mismo dia
> >
> > por ello mi pregunta, resutara optimo usar id_cliente-fecha como clave
> > primaria o mejor usar id_cliente-id_evento y fecha como un atributo


mas
??
> > (id_evento tal que 1 para el primero 2 para el segundo...)
> >
> > gracias por adelantado
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Adrian D. Garcia
07/10/2004 - 15:06 | Informe spam
Es todo contrario,
1) si utilizas un CHAR(8) luego tendras que realizar todas las conversiones
para cuando tengas que realizar busquedas, insert, updates, etc.
2) Una columna del tipo DATETIME ocupa 8 bytes, lo mismo que un CHAR(8),
ahora, si utilizas una columna SMALLDATETIME entonces solo ocuparas 4 bytes,
con lo cual tu indice sera mucho mas eficiente.
3) Si utilizas una colunna del tipo DATETIME o SMALLDATETIME entonces
tendras todas las funciones de fechas y horas disponibles. Podras realizar
muy facilmente queries del tipo... Cual es el promedio dias entre los
eventos de un cliente? y otras parecidas.
4) Analiza el orden de la clave primaria: Que es mas importante, la fecha o
el id del cliente? Quizas tus queries mas usados sean "Traer los eventos
para una fecha determinada o entre tal y cual fecha, en ese caso te
recomiendo que armes tu clave primaria : fecha + cliente , de esta forma el
motor podra utilizar el indice cluster para busqueda de rangos de fechas en
forma terriblemente eficiente ; ahora si tus queries ma usados estan
relacionados con un cliente entonces: cliente + fecha.

Saludos
Adrian D. Garcia
MCSD
NDSoft Consultoria y Desarrollo

"Mara" wrote in message
news:
mi principal preocupacion es si no sera muy complejo con el DATETIME, me
refiero a lento, etc...

pero la idea de yyyymmdd me gusta, y supongo que el mismo rendimiento que


1,
2, 3, 4...


gracias por la explicacion



"Carlos Sacristan" <csacristan ARROBA mvps.org> wrote in message
news:u%232j8%
> Si tienes una clave natural disponible (como pueda ser en este caso
> idCliente + fechaEvento), úsala. Ahora bien, si no quieres usar un tipo


de
> dato DATETIME (por no complicarte o porque no te interesa la hora)


puedes
> usar un CHAR de 8 posiciones para almacenar la fecha del evento en


formato
> ANSI (yyyymmdd).
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> Por favor, responder únicamente al foro
> Se agradece la inclusión de sentencias DDL
>
>
> "Mara" escribió en el mensaje
> news:
> > hola a todos:
> >
> > queria crear una aplicacion en la que registrar eventos para una lista
de
> > clientes
> >
> > tengo los clientes con toda su informacion y un numero de


identificacion
> > unica en una tabla
> >
> > en una segunda tabla tendre el id_cliente mas los detalle de cada una


de
> sus
> > eventos, por ello debo utilizar una clave primaria doble para
identificar
> el
> > id_cliente-evento
> >
> > nunca se produciran dos eventos el mismo dia
> >
> > por ello mi pregunta, resutara optimo usar id_cliente-fecha como clave
> > primaria o mejor usar id_cliente-id_evento y fecha como un atributo


mas
??
> > (id_evento tal que 1 para el primero 2 para el segundo...)
> >
> > gracias por adelantado
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida