Recomendaciones en numero de campos

02/07/2004 - 13:42 por Elena | Informe spam
Hola grupo,
tengo algunas dudas sobre que es más eficiente en el tema de la cantidad de
campos en una tabla.
¿una tabla de 80 campos o hacer dos tablas de 40 campos?
¿intentar que 2 campos coincidan y hacer una tabla de 40 campos e
insertaríamos 2 registros?
¿cuál es el máximo de campos en una tabla?

Muchas gracias

Preguntas similare

Leer las respuestas

#6 Emilio Boucau
02/07/2004 - 17:09 | Informe spam
Maxi,

eso pasa porque vos diseñaste y cargaste todo tu catalogo en una sola fila
de tabla ;-)


Saludos !

Emilio Boucau
Buenos Aires - Argentina
http://www.portalsql.com
Respuesta Responder a este mensaje
#7 Maxi
02/07/2004 - 18:00 | Informe spam
jeje yo no deseñe ;-) es un Soft Americano, pero te aseguro que esta bien
hecho el turro, lo que sucede que el maestro de articulos es muy particular
pero no hay datos repetidos ni nada de nada!! Un sistema de produccion como
el que tenemos nosotros tiene muchos campos la tabla PART por muchas razones
de diseño que luego de revisarlas y revisarlas les di la mano derecha :-)


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Emilio Boucau" escribió en el mensaje
news:
Maxi,

eso pasa porque vos diseñaste y cargaste todo tu catalogo en una sola fila
de tabla ;-)


Saludos !

Emilio Boucau
Buenos Aires - Argentina
http://www.portalsql.com







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.707 / Virus Database: 463 - Release Date: 15/06/2004
Respuesta Responder a este mensaje
#8 Elena
05/07/2004 - 09:12 | Informe spam
Hola,
un ejemplo de tabla sería ésta, son todas más o menos iguales: con un campo
bit para decidir si lo tiene o no, y una descripcion. Luego habría una tabla
identica LOG como histórico para almacenar todos los cambios que se van
haciendo:

CREATE TABLE [dbo].[POLI_HistoriaMedica] (
[IdPOLI_HistoriaMedica] [int] IDENTITY (1, 1) NOT NULL ,
[Cardiovascular] [bit] NOT NULL ,
[HTA] [bit] NULL ,
[DescripcionHTA] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
,
[Coagulacion] [bit] NULL ,
[DescripcionCoagulacion] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Cardiaca] [bit] NULL ,
[DescripcionCardiaca] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,
[Valvular] [bit] NULL ,
[DescripcionValvular] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,
[OtraCardio] [bit] NULL ,
[DescripcionOtraCardio] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Infecciosa] [bit] NOT NULL ,
[Hepatitis] [bit] NULL ,
[DescripcionHepatitis] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,
[VIH] [bit] NULL ,
[DescripcionVIH] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
,
[OtraInfecciosa] [bit] NULL ,
[DescripcionOtraInfecciosa] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Reumatismo] [bit] NOT NULL ,
[Artritis] [bit] NULL ,
[DescripcionArtritis] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,
[Artrosis] [bit] NULL ,
[DescripcionArtrosis] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,
[Articular] [bit] NULL ,
[DescripcionArticular] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,
[OtraReumatismo] [bit] NULL ,
[DescripcionOtraReumatismo] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Endocrina] [bit] NOT NULL ,
[Diabetes] [bit] NULL ,
[DescripcionDiabetes] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,
[Tiroides] [bit] NULL ,
[DescripcionTiroides] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,
[Psiquiatrica] [bit] NOT NULL ,
[Depresion] [bit] NULL ,
[DescripcionDepresion] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,
[Esquizofrenia] [bit] NULL ,
[DescripcionEsquizofrenia] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Ansiedad] [bit] NULL ,
[DescripcionAnsiedad] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,
[OtraPsiquiatrica] [bit] NULL ,
[DescripcionOtraPsiquiatrica] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Neurologica] [bit] NOT NULL ,
[Retraso] [bit] NULL ,
[DescripcionRetraso] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,
[Motora] [bit] NULL ,
[DescripcionMotora] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,
[OtraNeurologica] [bit] NULL ,
[DescripcionOtraNeurologica] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Digestivo] [bit] NOT NULL ,
[Estomago] [bit] NULL ,
[DescripcionEstomago] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,
[Higado] [bit] NULL ,
[DescripcionHigado] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,
[OtraDigestivo] [bit] NULL ,
[DescripcionOtraDigestivo] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Pulmonar] [bit] NOT NULL ,
[Asma] [bit] NULL ,
[DescripcionAsma] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
,
[Insuficiencia] [bit] NULL ,
[DescripcionInsuficiencia] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[TBC] [bit] NULL ,
[DescripcionTBC] [varchar] (500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
,
[OtraPulmonar] [bit] NULL ,
[DescripcionOtraPulmonar] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[OtraGeneral] [bit] NULL ,
[DescripcionOtraGeneral] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[CodigoUsuarioPerfilPaciente] [int] NOT NULL ,
[CodigoUsuarioPerfilAlumno] [int] NOT NULL ,
[CodigoUsuarioPerfilProfesor] [int] NOT NULL ,
[Fecha] [smalldatetime] NOT NULL ,
[Validado] [bit] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[POLI_HistoriaMedica] ADD
CONSTRAINT [DF_POLI_HistoriaMedica_Fecha] DEFAULT (getdate()) FOR [Fecha],
CONSTRAINT [DF_POLI_HistoriaMedica_Validado] DEFAULT (0) FOR [Validado],
CONSTRAINT [PK_POLI_HistoriaMedica] PRIMARY KEY CLUSTERED
(
[IdPOLI_HistoriaMedica]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[POLI_HistoriaMedica] ADD
CONSTRAINT [FK_POLI_HistoriaMedica_UsuarioPerfil] FOREIGN KEY
(
[CodigoUsuarioPerfilPaciente]
) REFERENCES [dbo].[UsuarioPerfil] (
[IdUsuarioPerfil]
),
CONSTRAINT [FK_POLI_HistoriaMedica_UsuarioPerfil1] FOREIGN KEY
(
[CodigoUsuarioPerfilAlumno]
) REFERENCES [dbo].[UsuarioPerfil] (
[IdUsuarioPerfil]
),
CONSTRAINT [FK_POLI_HistoriaMedica_UsuarioPerfil2] FOREIGN KEY
(
[CodigoUsuarioPerfilProfesor]
) REFERENCES [dbo].[UsuarioPerfil] (
[IdUsuarioPerfil]
)
GO

"Javier Loria" escribió en el mensaje
news:eG80n$
Hola:
No creo que exista un "optimo" de columnas en una Tabla, pero si


quieres
hablar de numeros: el Maximo es 1024 y en mi caso cuando tienen mas de 15
columnnas son sospechosas.
Si vas a modelar tablas es crititico que revises los conceptos de
normalizacion. Las formas normales: evitan redundancias en la BD y hacen


las
aplicaciones mas rapidas y consistentes. Una vez que tienes un modelo


logico
de datos normalizado puedes, en algunas ocaciones, desnormalizar e
implementarlo fisicamente de forma diferente.
Si posteas aqui el caso algunos particpantes de este grupo te daran su
opinion de como modelarian las tablas, para que lo puedas tomar como
ejemplo.
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.

Elena escribio:
> Hola grupo,
> tengo algunas dudas sobre que es más eficiente en el tema de la
> cantidad de campos en una tabla.
> ¿una tabla de 80 campos o hacer dos tablas de 40 campos?
> ¿intentar que 2 campos coincidan y hacer una tabla de 40 campos e
> insertaríamos 2 registros?
> ¿cuál es el máximo de campos en una tabla?
>
> Muchas gracias


Respuesta Responder a este mensaje
#9 Carlos Sacristan
05/07/2004 - 09:38 | Informe spam
Elena, la forma de diseñar la tabla es errónea: no puedes poner cada una
de las posibles enfermedades como campos. ¿Qué pasa cuando tengas que
incorporar una nueva? ¿Vuelves a modificar el diseño? No es muy práctico,
¿verdad?

Creo que tiene más sentido crear una tabla con los datos identificativos
del paciente (los que tú consideres como propios de él) y luego otra tabla
que liste las posibles enfermedades que puedan existir (con los campos que
veas, pero al menos un código, nombre corto y descripción de la misma). Por
último creas otra tabla que relacione el paciente con las enfermedades que
ha tenido (codigo de paciente, código de enfermedad, observaciones, fecha,
etc).

Lo que te propongo es una simple relación muchos a muchos entre dos
tablas: una del paciente y otra de las posibles enfermedades que se pueden
tratar


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
Respuesta Responder a este mensaje
#10 Javier Loria
05/07/2004 - 16:09 | Informe spam
Hola:
Creo al igual que Carlos que el diseno que propones te va a dar muchos
dolores de cabeza. La teoria relacional recomendaria que crees una tabla de
Enfermedades y mantengas una relacion muchos a muchos entre la tabla de
historia Medica y Enfermedades.
Para esto puedes usar la Clasificacion Internacional de Enfermedades y
Problemas relacionados con la Salud (ICD-10). Luego puedes o directamente
relacionar los las 2 tablas HistoriaMedica y Enfermedades o en el caso de
entrevistas "filtrar" algunas de las enfermedades usando una Tabla
Intermedia de Formularios. Asumo el primer caso:
=CREATE TABLE Enfermedades(
CodigoICD10 CHAR(4) NOT NULL
PRIMARY KEY
CHECK (CodigoICD10 LIKE '[A-Z][0-9][0-9][0-9]'
OR CodigoICD10 LIKE
'[A-Z][0-9][0-9]')
, NombreEnfermedad VARCHAR(50)
<<Otras Columnas??? >>>
)

CREATE TABLE EnfermedadesDeclaradasPerfil(
CodigoPerfil INT NOT NULL --???
, CodigoICD10 CHAR(4) NOT NULL
FOREIGN KEY REFERENCES Enfermedades(CodigoICD10)
, AnotacionesMedico VARCHAR(500) NOT NULL
, CONSTRAINT PK_EnfermedadesDeclaradasPerfil
PRIMARY KEY (CodigoPerfil, CodigoICD10)
)

= La razon por la que tanto a Carlos como a mi no nos gusta el diseno
original es que rompe la primer forma Normal (1NF) que exige que las tablas
no tengan grupos repetidos y que cada columna sea escalar/atomica y no un
arrego o lista de algo.
En tu caso las columnas son "arreglos" de enfermedades y hay
dependencias entre los campos Bit (tiene o no tiene enfermedad) y las
descripciones.
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.
Elena escribio:
Hola,
un ejemplo de tabla sería ésta, son todas más o menos iguales: con un
campo bit para decidir si lo tiene o no, y una descripcion. Luego
habría una tabla identica LOG como histórico para almacenar todos los
cambios que se van haciendo:

CREATE TABLE [dbo].[POLI_HistoriaMedica] (
[IdPOLI_HistoriaMedica] [int] IDENTITY (1, 1) NOT NULL ,
[Cardiovascular] [bit] NOT NULL ,
[HTA] [bit] NULL ,
[DescripcionHTA] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Coagulacion] [bit] NULL ,
[DescripcionCoagulacion] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Cardiaca] [bit] NULL ,
[DescripcionCardiaca] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Valvular] [bit] NULL ,
[DescripcionValvular] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[OtraCardio] [bit] NULL ,
[DescripcionOtraCardio] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Infecciosa] [bit] NOT NULL ,
[Hepatitis] [bit] NULL ,
[DescripcionHepatitis] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[VIH] [bit] NULL ,
[DescripcionVIH] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[OtraInfecciosa] [bit] NULL ,
[DescripcionOtraInfecciosa] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Reumatismo] [bit] NOT NULL ,
[Artritis] [bit] NULL ,
[DescripcionArtritis] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Artrosis] [bit] NULL ,
[DescripcionArtrosis] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Articular] [bit] NULL ,
[DescripcionArticular] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[OtraReumatismo] [bit] NULL ,
[DescripcionOtraReumatismo] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Endocrina] [bit] NOT NULL ,
[Diabetes] [bit] NULL ,
[DescripcionDiabetes] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Tiroides] [bit] NULL ,
[DescripcionTiroides] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Psiquiatrica] [bit] NOT NULL ,
[Depresion] [bit] NULL ,
[DescripcionDepresion] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Esquizofrenia] [bit] NULL ,
[DescripcionEsquizofrenia] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Ansiedad] [bit] NULL ,
[DescripcionAnsiedad] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[OtraPsiquiatrica] [bit] NULL ,
[DescripcionOtraPsiquiatrica] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Neurologica] [bit] NOT NULL ,
[Retraso] [bit] NULL ,
[DescripcionRetraso] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Motora] [bit] NULL ,
[DescripcionMotora] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[OtraNeurologica] [bit] NULL ,
[DescripcionOtraNeurologica] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Digestivo] [bit] NOT NULL ,
[Estomago] [bit] NULL ,
[DescripcionEstomago] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Higado] [bit] NULL ,
[DescripcionHigado] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[OtraDigestivo] [bit] NULL ,
[DescripcionOtraDigestivo] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Pulmonar] [bit] NOT NULL ,
[Asma] [bit] NULL ,
[DescripcionAsma] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[Insuficiencia] [bit] NULL ,
[DescripcionInsuficiencia] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[TBC] [bit] NULL ,
[DescripcionTBC] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[OtraPulmonar] [bit] NULL ,
[DescripcionOtraPulmonar] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[OtraGeneral] [bit] NULL ,
[DescripcionOtraGeneral] [varchar] (500) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,
[CodigoUsuarioPerfilPaciente] [int] NOT NULL ,
[CodigoUsuarioPerfilAlumno] [int] NOT NULL ,
[CodigoUsuarioPerfilProfesor] [int] NOT NULL ,
[Fecha] [smalldatetime] NOT NULL ,
[Validado] [bit] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[POLI_HistoriaMedica] ADD
CONSTRAINT [DF_POLI_HistoriaMedica_Fecha] DEFAULT (getdate()) FOR
[Fecha], CONSTRAINT [DF_POLI_HistoriaMedica_Validado] DEFAULT (0)
FOR [Validado], CONSTRAINT [PK_POLI_HistoriaMedica] PRIMARY KEY
CLUSTERED (
[IdPOLI_HistoriaMedica]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[POLI_HistoriaMedica] ADD
CONSTRAINT [FK_POLI_HistoriaMedica_UsuarioPerfil] FOREIGN KEY
(
[CodigoUsuarioPerfilPaciente]
) REFERENCES [dbo].[UsuarioPerfil] (
[IdUsuarioPerfil]
),
CONSTRAINT [FK_POLI_HistoriaMedica_UsuarioPerfil1] FOREIGN KEY
(
[CodigoUsuarioPerfilAlumno]
) REFERENCES [dbo].[UsuarioPerfil] (
[IdUsuarioPerfil]
),
CONSTRAINT [FK_POLI_HistoriaMedica_UsuarioPerfil2] FOREIGN KEY
(
[CodigoUsuarioPerfilProfesor]
) REFERENCES [dbo].[UsuarioPerfil] (
[IdUsuarioPerfil]
)
GO

"Javier Loria" escribió en el mensaje
news:eG80n$
Hola:
No creo que exista un "optimo" de columnas en una Tabla, pero si
quieres hablar de numeros: el Maximo es 1024 y en mi caso cuando
tienen mas de 15 columnnas son sospechosas.
Si vas a modelar tablas es crititico que revises los conceptos de
normalizacion. Las formas normales: evitan redundancias en la BD y
hacen las aplicaciones mas rapidas y consistentes. Una vez que
tienes un modelo logico de datos normalizado puedes, en algunas
ocaciones, desnormalizar e implementarlo fisicamente de forma
diferente. Si posteas aqui el caso algunos particpantes de este
grupo te daran su opinion de como modelarian las tablas, para que lo
puedas tomar como ejemplo.
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.

Elena escribio:
Hola grupo,
tengo algunas dudas sobre que es más eficiente en el tema de la
cantidad de campos en una tabla.
¿una tabla de 80 campos o hacer dos tablas de 40 campos?
¿intentar que 2 campos coincidan y hacer una tabla de 40 campos e
insertaríamos 2 registros?
¿cuál es el máximo de campos en una tabla?

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