De acuerdo al termino que usas ahora y al que usaste en el post anterior, me parece que no logro aclarar bien la situacion.
Vos decis "columna de marca" y me da la impresión de que entendes que coloco una columna en la tabla Direcciones indicando el registro actual (a menos que columna de marca tenga un significado especial). Lo que yo suelo hacer es agregar una columna en la tabla de Clientes que es una FK a la tabla de Direcciones. Por ahí esto se aclara si me das una pista sobre la solucion que vos preferis. Entendi lo del null, tendria que evaluar con mas detalle el impacto de esto en situaciones reales, pero me atreveria a decir que nunca uso un indice por fecha para acceder a las colecciones de este tipo. Otra opcion mucho mas comoda es poner DateTime.MaxValue :). Abrazo Carlos Peix > -----Original Message----- > From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of > Jose Mariano Alvarez > Sent: Lunes, 29 de Octubre de 2007 01:47 p.m. > To: [EMAIL PROTECTED] > Subject: [dbms] Re: [dbms] Diseño de Base de Datos > > Si lo entendi, por eso te dije que no usaria el indice aunque > exista por esa columna de marca. Hay un conocido CRM del > mercado que tiene problemas de ese estilo. > > Ademas, nunca uses NULL y si usa una fecha maxima porque > invalida el uso de indices en SQL Server. > > Saludos > -- > -------------------------------- > Atte. > Ing. Jose Mariano Alvarez > SQL Total Consulting > > > > > > > > > On 10/29/07, Carlos Peix <[EMAIL PROTECTED]> wrote: > > Hola Mariano, > > > > Gracias por seguir la discusion. > > > > Creo que no me explique correctamente. En el caso que > planteo Pablo, tendrias > > una colección de direcciones con su correspndiente periodo > de validez (fecha > > desde hasta) y la ultima direccion tendria un rango abierto > en su extremo > > superior, esto es, la FechaHasta de validez de la direccion > con valor null o con > > valor MaxDate (prefiero lo primero). > > > > La desnormalizacion que yo hago (cuando la evidencia > demuestra que es encesaria) > > es dejar una referencia a la direccion activa en el objeto > principal (ademas de > > la coleccion). Esto, en terminos de la base de datos, > significa que la tabla > > Clientes tendira una columna que se llamaria > IdDireccionActual, una FK a la > > tabla de direcciones. Probablemente esta columna tendria un indice. > > > > La ventaja de esta optimizacion es que puede hacerse si > alterar la interfaz del > > objeto Cliente. > > > > Habias entendido esto? > > > > Por otro lado y creo que fuera del ambito de este thread > esta el caso donde se > > procesa logica en el query, por ejemplo, validar los mil > registros que vos > > mencionas contra los datos del cliente. Esto es otra cosa > distinta. Yo no hago > > esto en un SP, aunque reconozco que la velocidad de proceso > puede ser muy > > superior. Hay un thread que mantuvimos con Maxi en el 2004 > por este tema, con > > ejemplos de codigo (de el y mios), como siempre en casos de > arquitectura, con > > soluciones validas pero con final abierto, dependiendo de > lo que priorice cada > > uno :). > > > > Carlos Peix > > > > > -----Original Message----- > > > From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of > > > Jose Mariano Alvarez > > > Sent: Lunes, 29 de Octubre de 2007 01:08 p.m. > > > To: [EMAIL PROTECTED] > > > Subject: [dbms] Re: [dbms] Diseño de Base de Datos > > > > > > Carlos: > > > > > > Si es así. Coincidimos con eso. > > > En ese caso es eficiente solo si accedes a un registro. > > > > > > Veamos un ejemplo simple. > > > > > > Supongamos que quieres procesar un conjunto pequeño de datos > > > de digamos 1000 registros de ventas provenientes de una > > > interfaz (algo muy clásico y normal en las empresas) y > > > quieres relacionarlo con los datos de los clientes que > > > justamente es un ejemplo de esta tabla que mantiene la > > > historia donde aplicas ese patrón mediante las fechas desde y > > > hasta y la marca de actual (en tu caso hablaríamos de > > > objetos). Aunque tengas los índices, tienes dos opciones, o > > > debes bajarte todos los datos de clientes a una colección en > > > memoria para accederlo de manera eficiente o haces los 1000 > > > accesos a la tabla que aunque sea por índice es al menos > > > varios órdenes de magnitud más lento. Justamente esto es en > > > términos de bases de datos relacionales un JOIN de dos > > > entidades para lo cual la base de datos es muchísimo mas > eficiente. > > > > > > Obviamente esto no tiene sentido considerarlo para una > > > operación individual de acceso a un único registro. > > > > > > Otra cosa importante es que si bien lo que propone Carlos no > > > es lo mejor tampoco es lo peor. > > > > > > Entiendo que es más fácil y eficiente programar y diseñar de > > > la manera que propones pero no es la manera adecuada a mi > > > criterio. La base de datos es uno de los componentes > > > principales de los sistemas y deben ser usados de la manera > > > adecuada. Existen herramientas adecuadas para modelarlas y > > > diseñarlas desde hace muchos años. Cada vez hay más problemas > > > graves con las bases de datos ya que nunca se las considera > > > en los diseños, ni siquiera de la manera en que Carlos la > > > toma en cuanta. > > > > > > Saludos > > > > > > -- > > > -------------------------------- > > > Atte. > > > Ing. Jose Mariano Alvarez > > > SQL Total Consulting > > > > > > > > > > > > On 10/29/07, Carlos Peix <[EMAIL PROTECTED]> wrote: > > > > > > > > > > > > Hola Mariano, > > > > > > > > Perdonen si sigo bajo el mismo thread pero me parece que es > > > util para alguien (por lo menos para mi lo es :-) ). > > > > > > > > Entiendo que te referis al patrin Effectivity. Un patron > > > parecido y mas adecuado al caso es Temporal Property, en la > > > definicion de Fowler. De todas maneras, creo que te referis a > > > la manera de obtener la propiedad actual, cosa que en la > > > implementacion mas sencilla consiste en obtener la propiedad > > > efectiva al dia de hoy (obligando a acceder a la coleccion). > > > > > > > > Casi siempre que he utilizado este patron he tenido que > > > desnormalizar el modelo dejando una referencia persistente a > > > la instancia activa. Esto no ha sido tanto por la performance > > > del acceso a la propiedad como por el motivo de hacer un > > > query eficiente. Justo lo que vos mencionas, segun entiendo. > > > > > > > > Entonces, llego a la misma desnormalizacion pero por via > > > diferente. Lo importante es que en todos los casos, esta > > > desnormalizacion siempre me ha quedado oculta dentro del > > > objeto en cuestion. > > > > > > > > Espero haber interpretado tu comentario. > > > > > > > > Carlos Peix > > > > > > > > > > > > > > > > ________________________________ > > > From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of > > > Jose Mariano Alvarez > > > > Sent: Lunes, 29 de Octubre de 2007 09:21 a.m. > > > > To: [EMAIL PROTECTED] > > > > Subject: [dbms] Re: [dbms] Diseño de Base de Datos > > > > > > > > > > > > > > > > Ven carlos, eso es justamente lo que decia. > > > > > > > > Si sigues ese patron al pie de la letra segun Fowler > > > utilizas de manera ineficiente la base de datos y es muy > > > probable que no puedas usar de manera adecuada los indices. > > > > > > > > > > > > Saludos > > > > > > > > -- > > > > -------------------------------- > > > > Atte. > > > > Ing. Jose Mariano Alvarez > > > > SQL Total Consulting > > > > > > > > > > > > > > > > > > > > On 10/29/07, Carlos Peix <[EMAIL PROTECTED]> wrote: > > > > > > > > > > > > > > > Hola Pablo, > > > > > > > > > > En mi opinion es clave identificar el motivo por el cual > > > estas generando esas copias de la informacion. > > > > > > > > > > Si las estas generando por razones de auditoria, es muy > > > probable que las copias no signifiquen nada para la logica de > > > tu aplicacion. Normalmente esas copias o versiones de cada > > > fila se consultan con aplicaciones especiales de auditoria > > > (que vos mismo construyas). En este caso, lo mas comodo es > > > hacerlo con triggers o con stored procedures, yo prefiero los > > > triggers y asi lo hago cada vez que tengo esta necesidad. > > > > > > > > > > En cambio, si la copia de la informacion tienen un > > > sentido en tu modelo (patron Effectivity por ejemplo), creo > > > que es recomendable implementarlo del lado del codigo. > > > > > > > > > > Tambien es cierto que en las aplicaciones que son solo > > > ABMs es dificil ver la ventaja de implementar la logica en > > > uno u otro lado, ya que, en general, la logica es casi > iniexistente. > > > > > > > > > > Por supuesto, estas son mis preferencias. > > > > > > > > > > Carlos Peix > > > > > > > > > > > > > > > > > > > > ________________________________ > > > From: [email protected] [mailto: [EMAIL PROTECTED] On Behalf Of Pablo > > > Maximo Mazzitelli > > > > > Sent: Sábado, 27 de Octubre de 2007 01:35 p.m. > > > > > To: [EMAIL PROTECTED] > > > > > Subject: [dbms] RE: [dbms] RE: [dbms] Diseño de Base de Datos > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Mmmmm, a ver si entendi… yo tengo una aplicación > > > sencillita. Un panel con botones que habilitan a distintos > > > formularios de allta y modificacion. Otro tipo de opcion para > > > hacer busquedas. O sea algo basico y estandar. Un tipico > > > Alta, Baja, Modificacion y Consulta de datos pero con > > > historial de datos. > > > > > > > > > > > > > > > > > > > > No entiendo bien del hecho de olvidarme de la base de > > > datos ya que casi toda la aplicación esta basada en ella. O > > > sea estoy casi siempre persistiendo. Mi duda vendria en el > > > caso de la opcion de modicacion de datos donde tambien estoy > > > persistiendo. > > > > > > > > > > > > > > > > > > > > Podrian abrirme mas la cabeza al respecto? > > > > > > > > > > > > > > > > > > > > Gracias > > > > > > > > > > Pablo > > > > > > > > > > > > > > > > > > __________ Información de NOD32, revisión 2623 (20071029) > __________ > > > > > > Este mensaje ha sido analizado con NOD32 antivirus system > > > http://www.nod32.com > > > > > > > > > > > > > > __________ Información de NOD32, revisión 2623 (20071029) __________ > > Este mensaje ha sido analizado con NOD32 antivirus system > http://www.nod32.com > >
