ot: AYUDA SOBRE COMO HACER ESTE DISEñO ?

13/12/2004 - 23:28 por Luis Nivar | Informe spam
Hola amigos,

Estoy disenando una nueva aplicacion de gestion y contabilidad para sql
server y tengo una gran confusion en lo siguiente:
El sistema manejara varios modulos auxiliares de la contabilidad
(inventario, cuentas por cobrar, cuentas por pagar, bancos, etc.) y esta el
modulo de Mayor general que se alimenta en linea desde cada modulo.. En cada
modulo se generan o digitan diferentes tipos de transacciones o documentos.
El problema es que por requerimiento del cliente nos piden que cada
transaccion de cada modulo auxiliar genere o pida las cuentas contables para
fines de postearse en linea al mayor general con su numero original de modo
que en cualquier momento se puedan consultar desde el modulo mayor general
todos los movimientos detallados con sus documentos origen (su numero) no
importa el modulo. Por ejemplo si se registra un debito en el modulo
auxiliar de CXC se generen los asientos contables en el mayor general
detallados, no en resumen como uno suele hacerlo.
El problema que veo es que como uno normalmente tiene tablas separadas para
cada tipo de transaccion, ejemplo: una para cheques, otra para depositos,
otra para facturas de compra, otra para facturas de venta, otra para recibos
de ingreso, otra para conduces de inventario, etc...etc.. la tabla de
asientos contables deberia entonces relacionarse a todas esas tablas y a la
vez no relacionarse a ninguna lo cual como que no me cuadra mucho con un
diseño de BD por aquello de la integridad referencial. Incluso cuando en el
mayor general se consulten los movimientos de una cuenta tendria que accesar
varias tablas header para ver la informacion especial de cada documento.

He estado pensando algunas cosas como: a) tener una sola tabla encabezado
con todos los datos que usan todos los tipos de documentos (que pueden ser
muy disimiles entre si) y entonces tener la tabla general de asientos
contables relacionada a esta tabla. Esto haria crecer mucho en columnas sin
uso la tabla encabezado pues para cada tipo de doc. solo se llenaran las
columnas que utilice ese tipo.

b) Otra alternativa seria crear una tabla de asientos nueva para cada tipo
de transaccion de cada modulo y tener un par encabezado-detalle contable
para cada tipo de documento, sin embargo implicaria que para cuando en
contabilidad vayan a consultar los movimientos de una cuenta o listar las
transacciones entre fechas, tendria que hacer una UNION de todas estas
tablitas, locual pienso podria ser muy lento, o no serlo, realmente no se.
Pense tambien en vistas pero como no estoy muy claro.


Me podrian dar una opinion o recomendacion respecto a este diseño ? o si han
visto alguno similar por alli referirme para ver como es una forma mas o
menos aceptable de manejarlo y que no degrade significativamente el
performance.


Muchas Gracias por la ayuda

Luis Nivar
CYC sistemas
Puerto Plata
Rep. Dom.

Preguntas similare

Leer las respuestas

#6 Javier Loria
15/12/2004 - 17:34 | Informe spam
Hola:
No tendria ningun problema en que contradijeras mi opinion :D
En principio la razon de mi diseno es la siguiente:
a) Entidades, cada Tabla en este diseno representa una entidad, las
Facturas, no son asientos contables, ni los Cheques son asientos contables,
las Facturas y o Cheques PRODUCEN asientos contables. Son entidades
separadas por ende van en tablas separadas.
b) Los documentos (Facturas, Cheques, ...) tienen atributos diferentes
(son entidades diferentes) por ende deben ir en tablas separadas.
c) Los Asientos podrian tener referencia a los documentos o los
documentos a los asientos. Si asientos referenciara a las tablas de
documentos habria que manejar un sinnumero de columnas (una para cada tipo
de documento) si se quiere mantener la integridad referencial. Es mas facil
mantener la integridad si cada uno de los documentos referencia a Contables.
Las ventajas de este diseno son:
a) Bajo Acoplamiento: A no conocer la Movimientos Contables de los
Documentos hacemos mas facil su mantenimiento. Esto es si agregas un nuevo
Sub-Sistema (Activos Fijos) no hay que realizar cambios en el sistema
contable excepto en el check de TipoDocumento. Esto hace mas facil darle
mantenimiento al sistema.
b) Mayor Cohesion: Es mas facil desarrollar codigo que solo trabaje en
Contabilidad o solo en Facturacion. Haciendo mas facil el desarrollo y mas
facil el mantenimiento.
c) Integridad: Es mas facil mantener la integridad de los movimientos
contables con una tabla que los represente. Es posible hacerlo sobre otros
disenos pero es mas facil con este.
d) Desempeno: Son mas rapidas las consultas sobre movimientos contables.
Las deventaja mas importante:
Redundancia: Es posible eliminar algunos de los datos ya que se duplican
entre la tabla del documento y el movimiento contable (Fechas, Montos, Num.
Documento). La redundancia se traduce en mas lentitud al
ingresar/modificar/borrar datos, en posibles inconsistencias (debe
controlarse extrictamente de forma procedimental) y en espacio.
En principio el UNION ALL producira problemas de desempeno, pero no
siempre. De hecho si se hace con cuidado podria ser mas eficiente que la
tabla unica, siempre y cuando tengas dispositivos de disco separados para
cada una de las tablas. utilize o si no se va a usar indices.
Saludos,


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

"Pedro Jose Caceres" wrote in message
news:

Hola.

A mi tambien me interesa ese tema. Una pregunta ya a nivel educativo: Cual
serian los pros y contras de tener para cada entidad de tipo de documento


un
para de tablas encabezado y detalle(esta para las cuentas contables). Ej.
facturaE y facturaD, chequeE y chequeD, reciboE y reciboD, y asi por el
estilo ?

Mi opinion es que si es para fines contables cuando se quieran consultar


los
movimientos de una cuenta podria recorrerse cada tabla de detalles


buscando
la cuenta o haciendo una UNION ALL. O es que esto seria muy lento ?


Favor
aclararme, no es contradiciendo tu opinion es solo para aprender un poco


mas
al respecto.

Gracias
Pedro Jose Caceres





"Javier Loria" wrote in message
news:%
> Hola:
> Tal vez es es mas claro si escribo el SQL, pero me gustaria


enfatizar
> que este diseno no es mas una opinion:
> => > CREATE TABLE AsientosContables(
> CodigoAsiento CHAR(8) NOT NULL
> PRIMARY KEY
> , FechaAsiento SMALLDATETIME NOT NULL
> , FechaRegistro SMALLDATETIME NOT NULL
> Otras Columnas
> )
>
> CREATE TABLE DetalleAsientosContables(
> CodigoAsiento CHAR(8) NOT NULL
> FOREIGN KEY REFERENCES AsientosContables(CodigoAsiento)
> , NumeroMovimiento INT NOT NULL
> , CodigoCuentaContable CHAR(10) NOT NULL
> FOREIGN KEY REFERENCES CatalogoContable(CodigoCuentaContable)
> , TipoDocumento INT
> NOT NULL
> CHECK(TipoDocumento IN (1,2,3,4,5))
> , NumeroDocumento VARCHAR(15) NOT NULL -- Puede ser nulo?
> , MontoMovimiento DECIMAL(15,2) NOT NULL
> , CONSTRAINT PKDetalleAsientosContables
> PRIMARY KEY (CodigoAsiento, NumeroMovimiento)
> )
>
> CREATE TABLE Facturas( -- O cualquier otro Documento
> NumeroFactura CHAR(8) NOT NULL
> CHECK(NumeroFactura LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
> PRIMARY KEY
> , FechaFacturacion SMALLDATETIME NOT NULL
> , MontoFacturado DECIMAL(15,2) NOT NULL -- Puede ser Nulol?
> , AsientoContable CHAR(8) NOT NULL
> FOREIGN KEY REFERENCES AsientosContables(CodigoAsiento)
> )
> ==> > Asientos Contables y Detalle de Asientos no tienen relacion con las
> Tablas de Documentos (no por SQL), unicamente tienen una referencia del
> origen del asiento en TipoDocumento, NumeroDocumento. En este caso asumi
que
> en un solo asiento pueden contabilizarse multiples documentos por eso el
> estas columnas estan en el detalle del asiento. Si decides hacer un
asiento
> por cada documento entonces deben ir las columnas en la tabla de


asientos
> contables.
> Por otra parte la tabla de documentos (en este caso facturas) SI


tiene
> relacion con Asientos Contables, en este caso la defini "floja", en el
> sentido que no hace referencia exacta al movimiento donde fue


registrada.
> Si quieres hacerla "fuerte" me parece deberias hacer una tabla para
cada
> documento que detalle la forma en que fue contabilizado. Esta tabla NO
puede
> ser Detalle de Asientos, ya que lo Asientos NO deben "conocer" de los
> documentos, los documentos si deben conocer de los asientos.
> Espero haberme explicado y que espero te sirva,
>
>
> 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
>
> "Luis Nivar" wrote in message
> news:
> > Hola y gracias por la respuesta.
> >
> > A ver si entendi bien: Te refieres a la opcion de tener los headers de
los
> > documentos en tablas separadas y una tabla unica para los asientos ? o
> tener
> > tanto una tabla de asientos para c/documento y una general


(redundante)
de
> > asientos ?
> >
> >
> > Saludos
> >
> >
> > "Javier Loria" wrote in message
> > news:
> > > Hola:
> > > Es mi opinion, que aun cuando un Cheque/Deposito genera un
asiento,
> no
> > > son lo mismo. O sea desde el punto de vista de diseno relacional


esta
> bien
> > > mantener una entidad independiente para cada uno de los documentos


de
> los
> > > diferentes modulos y luego mantener por separado la tabla de


Asientos.
> > > Dicho de otra forma este es un caso donde esta bien NO EVITAR LA
> > > REDUNDANCIA que produce mantener la informacion en 2 tablas. Si los
> > > documentos (Cheques, Depositos, Facturas, Recibos, etc.) producen
> > > movimientos contables estos documentos son "independientes".
> > > Es por supuesto un problema coordinar las transacciones para
evitar
> > que
> > > quede algun documento sin contabilizar o mal contabilizado, pero


esto
es
> > > codigo que se puede manejar "facilmente" en procedimientos


almacenados
> de
> > > mantenimiento o incluso en triggers.
> > > Saludos,
> > >
> > >
> > > 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
> > >
> > > "Luis Nivar" wrote in message
> > > news:#
> > > > Hola amigos,
> > > >
> > > > Estoy disenando una nueva aplicacion de gestion y contabilidad


para
> sql
> > > > server y tengo una gran confusion en lo siguiente:
> > > > El sistema manejara varios modulos auxiliares de la contabilidad
> > > > (inventario, cuentas por cobrar, cuentas por pagar, bancos, etc.)


y
> esta
> > > el
> > > > modulo de Mayor general que se alimenta en linea desde cada


modulo..
> En
> > > cada
> > > > modulo se generan o digitan diferentes tipos de transacciones o
> > > documentos.
> > > > El problema es que por requerimiento del cliente nos piden que


cada
> > > > transaccion de cada modulo auxiliar genere o pida las cuentas
> contables
> > > para
> > > > fines de postearse en linea al mayor general con su numero


original
de
> > > modo
> > > > que en cualquier momento se puedan consultar desde el modulo mayor
> > general
> > > > todos los movimientos detallados con sus documentos origen (su
numero)
> > no
> > > > importa el modulo. Por ejemplo si se registra un debito en el
modulo
> > > > auxiliar de CXC se generen los asientos contables en el mayor
general
> > > > detallados, no en resumen como uno suele hacerlo.
> > > > El problema que veo es que como uno normalmente tiene tablas
separadas
> > > para
> > > > cada tipo de transaccion, ejemplo: una para cheques, otra para
> > depositos,
> > > > otra para facturas de compra, otra para facturas de venta, otra


para
> > > recibos
> > > > de ingreso, otra para conduces de inventario, etc...etc.. la tabla
de
> > > > asientos contables deberia entonces relacionarse a todas esas
tablas
> y
> > a
> > > la
> > > > vez no relacionarse a ninguna lo cual como que no me cuadra mucho
con
> un
> > > > diseño de BD por aquello de la integridad referencial. Incluso
cuando
> en
> > > el
> > > > mayor general se consulten los movimientos de una cuenta tendria


que
> > > accesar
> > > > varias tablas header para ver la informacion especial de cada
> documento.
> > > >
> > > > He estado pensando algunas cosas como: a) tener una sola tabla
> > encabezado
> > > > con todos los datos que usan todos los tipos de documentos (que
pueden
> > ser
> > > > muy disimiles entre si) y entonces tener la tabla general de
asientos
> > > > contables relacionada a esta tabla. Esto haria crecer mucho en
> columnas
> > > sin
> > > > uso la tabla encabezado pues para cada tipo de doc. solo se


llenaran
> las
> > > > columnas que utilice ese tipo.
> > > >
> > > > b) Otra alternativa seria crear una tabla de asientos nueva para
cada
> > tipo
> > > > de transaccion de cada modulo y tener un par encabezado-detalle
> contable
> > > > para cada tipo de documento, sin embargo implicaria que para


cuando
en
> > > > contabilidad vayan a consultar los movimientos de una cuenta o
listar
> > las
> > > > transacciones entre fechas, tendria que hacer una UNION de todas
estas
> > > > tablitas, locual pienso podria ser muy lento, o no serlo,


realmente
no
> > se.
> > > > Pense tambien en vistas pero como no estoy muy claro.
> > > >
> > > >
> > > > Me podrian dar una opinion o recomendacion respecto a este diseño


?
o
> si
> > > han
> > > > visto alguno similar por alli referirme para ver como es una forma
mas
> o
> > > > menos aceptable de manejarlo y que no degrade significativamente


el
> > > > performance.
> > > >
> > > >
> > > > Muchas Gracias por la ayuda
> > > >
> > > > Luis Nivar
> > > > CYC sistemas
> > > > Puerto Plata
> > > > Rep. Dom.
> > > >
> > > >
> > >
> > >
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida