Actualizar campo

09/03/2005 - 15:54 por Alonso | Informe spam
Tengo una tabla OBRA (obra,nombre,contratista, etc.) relacionada por el
campo "contratista" a la tabla CONTRATISTA (contratista,nombre,etc.).
Debido a que se hacen muchas consultas por nombre de contratista sobre la
tabla OBRA estoy pensando agregar el campo nombrecontratista a la tabla
OBRA. (desnormalizandola). Eso implica que si un usuario me modifica el
nombre de un contratista debo hacer un update en del campo nombrecontratista
de la tabla OBRA. Como puedo hacer esto de forma eficiente y que maneras
son recomendadas para esto ?


Muchas gracias
Alonso

Preguntas similare

Leer las respuestas

#1 Salvador Ramos
09/03/2005 - 16:04 | Informe spam
Deja tus tablas normalizadas, y si se demora, crea un índice por el campo
contratista de la tabla OBRA. No creo que sea esa la solución en este caso.

También sería interesante que nos pasases la consulta que estás ejecutando,
e información sobre el volumen de datos de estas tablas, nº de usuarios
concurrentes, etc... Así podremos dar una mejor solución a tu problema.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"Alonso" escribió en el mensaje
news:
Tengo una tabla OBRA (obra,nombre,contratista, etc.) relacionada por el
campo "contratista" a la tabla CONTRATISTA (contratista,nombre,etc.).
Debido a que se hacen muchas consultas por nombre de contratista sobre la
tabla OBRA estoy pensando agregar el campo nombrecontratista a la tabla
OBRA. (desnormalizandola). Eso implica que si un usuario me modifica el
nombre de un contratista debo hacer un update en del campo
nombrecontratista
de la tabla OBRA. Como puedo hacer esto de forma eficiente y que maneras
son recomendadas para esto ?


Muchas gracias
Alonso


Respuesta Responder a este mensaje
#2 Alejandro Mesa
09/03/2005 - 16:23 | Informe spam
Alonso,

Si quieres hacerlo pues podrias crear un trigger en la tabla CONTRATISTA el
cual se encargaria de actualizar lla tabla OBRA. Yo estoy de acuerdo con
Salvador, la pregunta es Cual es la razon que te lleva a desnormalizar?. La
frecuencia con que se hace la consulta es un factor importante pero si los
tiempos de respuestas estan en el rango de lo deseado pues entonces para que
complicarse hombre.


AMB


"Alonso" wrote:

Tengo una tabla OBRA (obra,nombre,contratista, etc.) relacionada por el
campo "contratista" a la tabla CONTRATISTA (contratista,nombre,etc.).
Debido a que se hacen muchas consultas por nombre de contratista sobre la
tabla OBRA estoy pensando agregar el campo nombrecontratista a la tabla
OBRA. (desnormalizandola). Eso implica que si un usuario me modifica el
nombre de un contratista debo hacer un update en del campo nombrecontratista
de la tabla OBRA. Como puedo hacer esto de forma eficiente y que maneras
son recomendadas para esto ?


Muchas gracias
Alonso



Respuesta Responder a este mensaje
#3 Alejandro Mesa
09/03/2005 - 16:31 | Informe spam
Aca tienes un ejemplo. Piensalo antes de hacerlo y recuerda crear un indice
basado en la columna nombre_contratista en la tabla OBRA si decides hacerlo
asi.

create trigger tr_contratista_upd on contratista
for update
as
set nocount on

if @@rowcount = 0 return

if update(nombre_contratista)
update
o
set
o.nombre_contratista = i.nombre_contratista
from
obra as o
inner join
inserted as i
on o.contratista_id = i.contratista_id
go


AMB


"Alejandro Mesa" wrote:

Alonso,

Si quieres hacerlo pues podrias crear un trigger en la tabla CONTRATISTA el
cual se encargaria de actualizar lla tabla OBRA. Yo estoy de acuerdo con
Salvador, la pregunta es Cual es la razon que te lleva a desnormalizar?. La
frecuencia con que se hace la consulta es un factor importante pero si los
tiempos de respuestas estan en el rango de lo deseado pues entonces para que
complicarse hombre.


AMB


"Alonso" wrote:

> Tengo una tabla OBRA (obra,nombre,contratista, etc.) relacionada por el
> campo "contratista" a la tabla CONTRATISTA (contratista,nombre,etc.).
> Debido a que se hacen muchas consultas por nombre de contratista sobre la
> tabla OBRA estoy pensando agregar el campo nombrecontratista a la tabla
> OBRA. (desnormalizandola). Eso implica que si un usuario me modifica el
> nombre de un contratista debo hacer un update en del campo nombrecontratista
> de la tabla OBRA. Como puedo hacer esto de forma eficiente y que maneras
> son recomendadas para esto ?
>
>
> Muchas gracias
> Alonso
>
>
>
Respuesta Responder a este mensaje
#4 Alonso
09/03/2005 - 17:08 | Informe spam
Gracias.
Son consultas del tipo siguiente:

select Obra.obra, Obra.nombre, Obra.contratista, Contratista.nombre as
Nombrecontratista, etc. from Obra inner join Contratista on
Obra.contratista=Contratista.contratista where Obra.fechaInicio>=@fecha
order by NombreContratista

Hay muchas otras pero esa es la idea.

Sobre los tamaños, no es que sean tantos pero la tabla de contratista tiene
cerca de 7,000 registros y no crece con frecuencia. La de Obras si va
creciendo con frecuencia y en la actualidad tiene unos 30,000.00.



"Salvador Ramos" wrote in message
news:%
Deja tus tablas normalizadas, y si se demora, crea un índice por el campo
contratista de la tabla OBRA. No creo que sea esa la solución en este


caso.

También sería interesante que nos pasases la consulta que estás


ejecutando,
e información sobre el volumen de datos de estas tablas, nº de usuarios
concurrentes, etc... Así podremos dar una mejor solución a tu problema.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"Alonso" escribió en el mensaje
news:
> Tengo una tabla OBRA (obra,nombre,contratista, etc.) relacionada por el
> campo "contratista" a la tabla CONTRATISTA (contratista,nombre,etc.).
> Debido a que se hacen muchas consultas por nombre de contratista sobre


la
> tabla OBRA estoy pensando agregar el campo nombrecontratista a la tabla
> OBRA. (desnormalizandola). Eso implica que si un usuario me modifica el
> nombre de un contratista debo hacer un update en del campo
> nombrecontratista
> de la tabla OBRA. Como puedo hacer esto de forma eficiente y que


maneras
> son recomendadas para esto ?
>
>
> Muchas gracias
> Alonso
>
>


Respuesta Responder a este mensaje
#5 Salvador Ramos
09/03/2005 - 18:09 | Informe spam
Creo que el problema puede estar en el número de filas que te está
devolviendo la consulta. Te va bien si le pasas una fecha que te devuelva
pocas filas ? Es para ir descartando.

También te puede ayudar bastante si vas al query analyzer, escribes esta
consulta, o si es un procedimiento almacenado, una llamada a éste, y
ejecutas el asistente para la optimización de índices. Se puede hacer una
optimización manual, pero ahí ya hay que analizar sobre todo la granularidad
de tus datos. Si a pesar del volumen de datos que tienes, estás haciendo
peticiones que devuelvan pocas filas (menos de 100) no debes tener ningún
problema, salvo que el servidor esté saturado por otros motivos.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"Alonso" escribió en el mensaje
news:
Gracias.
Son consultas del tipo siguiente:

select Obra.obra, Obra.nombre, Obra.contratista, Contratista.nombre as
Nombrecontratista, etc. from Obra inner join Contratista on
Obra.contratista=Contratista.contratista where Obra.fechaInicio>=@fecha
order by NombreContratista

Hay muchas otras pero esa es la idea.

Sobre los tamaños, no es que sean tantos pero la tabla de contratista
tiene
cerca de 7,000 registros y no crece con frecuencia. La de Obras si va
creciendo con frecuencia y en la actualidad tiene unos 30,000.00.



"Salvador Ramos" wrote in message
news:%
Deja tus tablas normalizadas, y si se demora, crea un índice por el campo
contratista de la tabla OBRA. No creo que sea esa la solución en este


caso.

También sería interesante que nos pasases la consulta que estás


ejecutando,
e información sobre el volumen de datos de estas tablas, nº de usuarios
concurrentes, etc... Así podremos dar una mejor solución a tu problema.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"Alonso" escribió en el mensaje
news:
> Tengo una tabla OBRA (obra,nombre,contratista, etc.) relacionada por
> el
> campo "contratista" a la tabla CONTRATISTA (contratista,nombre,etc.).
> Debido a que se hacen muchas consultas por nombre de contratista sobre


la
> tabla OBRA estoy pensando agregar el campo nombrecontratista a la tabla
> OBRA. (desnormalizandola). Eso implica que si un usuario me modifica
> el
> nombre de un contratista debo hacer un update en del campo
> nombrecontratista
> de la tabla OBRA. Como puedo hacer esto de forma eficiente y que


maneras
> son recomendadas para esto ?
>
>
> Muchas gracias
> Alonso
>
>






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