Tipo campo

16/11/2003 - 16:21 por Alejandro Esteve | Informe spam
hola...
tengo un campo en todas las tablas que contendrá las 'palabras clave' para realizar las búsquedas, de forma que tendrá una, dos o como máximo tres palabras

¿qué tipo de campo es el adecuado, las separo por espacio o por comas?

y otra pregunta, para un valor lógico (SI/NO) qué tipo de campo me recomendáis?

gracias a todos por vuestros consejos
Alejandro Esteve
http://www.BibliotecaInformatica.Net
ftp://217.126.217.218

Preguntas similare

Leer las respuestas

#1 Salvador Ramos
16/11/2003 - 23:03 | Informe spam
Hola:

Con respecto a la primera pregunta, y partiendo de la información que nos
indicas, yo pondría tres campos (si estás seguro de que el máximo es tres,
si no haría una tabla donde almacenase esas palabras clave). Si no te vale
esta solución indicanos con más detalle la situación y si puedes envianos un
script del DDL actual e intentaremos ayudarte.

Tienes un tipo de datos Bit, que almacena valores 0/1.

Un saludo
Salvador Ramos
www.helpdna.net

"Alejandro Esteve" escribió en el mensaje
news:
hola...
tengo un campo en todas las tablas que contendrá las 'palabras clave' para
realizar las búsquedas, de forma que tendrá una, dos o como máximo tres
palabras

¿qué tipo de campo es el adecuado, las separo por espacio o por comas?

y otra pregunta, para un valor lógico (SI/NO) qué tipo de campo me
recomendáis?

gracias a todos por vuestros consejos
Alejandro Esteve
http://www.BibliotecaInformatica.Net
ftp://217.126.217.218
Respuesta Responder a este mensaje
#2 dbuendiab
17/11/2003 - 00:19 | Informe spam
"Alejandro Esteve" wrote in message news:...
hola...
tengo un campo en todas las tablas que contendr las 'palabras clave'
para realizar las b squedas, de forma que tendr una, dos o como
m ximo tres palabras
qu tipo de campo es el adecuado, las separo por espacio o por
comas?



Alternativas:
1.- Un campo varchar. Usa un carácter que no vaya a aparecer en las
palabras, así podrás utilizar LIKE o CHARINDEX() para localizar la
ocurrencia.

2.- Ya como más bonito usa una tabla de claves (mucho más rápida)

Create Table TablaBusquedas (
Id int NOT NULL PRIMARY KEY
...
)

Create Table TablaClaves (
Id int NOT NULL,
Clave varchar(n) NOT NULL
)

donde en esta segunda tabla el campo Id referencia al Id de la
primera, entonces para buscar

Caso 1.-

Select CampoBuscado
From TablaBusquedas
Where CampoClaves LIKE '%UnValorDado%'

Caso 2.-

Select CampoBuscado
From TablaBusquedas
Inner Join TablaClaves On TablaClaves.Id = TablaBusquedas.Id
Where TablaClaves.Clave = 'UnValorDado'


y otra pregunta, para un valor l gico (SI/NO) qu tipo de campo me
recomend is?



En plan económico esta el bit, pero no es portable (sea lo que sea lo
que quiera decir eso :-) y yo me he acostumbrado a malgastar y uso un
integer normal y corriente, tomando el 0 como NO y cualquier otra cosa
como SÍ. Pero son manías...

Saludos,

Diego Buendia
Barcelona Spain
Respuesta Responder a este mensaje
#3 Alejandro Esteve
17/11/2003 - 11:05 | Informe spam
gracias a ambos...
no había pensado en la tabla de búsquedas, os explico lo que quiero hacer:

como veréis la estructura de mi sitio web es muy simple y repetitiva: Indice, manuales, programas/tools, articulos kb, links (5 campos siempre)

sin embargo, la temática es extremadamente amplia ya que abarca todos los campos de la informática

había pensado hacer una tabla por cada tema: XML, SQL, etc..
en cada entrada de la DDBB un campo de palabras clave para asignar cada una a una sección (ya que un mismo tema puede tener varios subtemas), al buscar se podría hacer por este campo o el título

Ejemplo de busquedas:
manuales--> general, mostraría todas las entradas catalogadas como manuales
manuales->Windows2000-> mostraría los campos clave con man &w2k
manuales->seguridad-> mostraría los manuales referentes a seguridad

etc...

ahora estoy diseñando la estructura de la DDBB y me han aconsejado que la realice por secciones y la verdad, estoy ya liado :))
Alejandro Esteve
http://www.BibliotecaInformatica.Net
ftp://217.126.217.218


"Diego Buendia" wrote in message news:
"Alejandro Esteve" wrote in message news:...
> hola...
> tengo un campo en todas las tablas que contendr las 'palabras clave'
> para realizar las b squedas, de forma que tendr una, dos o como
> m ximo tres palabras
> qu tipo de campo es el adecuado, las separo por espacio o por
> comas?

Alternativas:
1.- Un campo varchar. Usa un carácter que no vaya a aparecer en las
palabras, así podrás utilizar LIKE o CHARINDEX() para localizar la
ocurrencia.

2.- Ya como más bonito usa una tabla de claves (mucho más rápida)

Create Table TablaBusquedas (
Id int NOT NULL PRIMARY KEY
...
)

Create Table TablaClaves (
Id int NOT NULL,
Clave varchar(n) NOT NULL
)

donde en esta segunda tabla el campo Id referencia al Id de la
primera, entonces para buscar

Caso 1.-

Select CampoBuscado
From TablaBusquedas
Where CampoClaves LIKE '%UnValorDado%'

Caso 2.-

Select CampoBuscado
From TablaBusquedas
Inner Join TablaClaves On TablaClaves.Id = TablaBusquedas.Id
Where TablaClaves.Clave = 'UnValorDado'

>
> y otra pregunta, para un valor l gico (SI/NO) qu tipo de campo me
> recomend is?

En plan económico esta el bit, pero no es portable (sea lo que sea lo
que quiera decir eso :-) y yo me he acostumbrado a malgastar y uso un
integer normal y corriente, tomando el 0 como NO y cualquier otra cosa
como SÍ. Pero son manías...

Saludos,

Diego Buendia
Barcelona Spain
Respuesta Responder a este mensaje
#4 dbuendiab
17/11/2003 - 15:58 | Informe spam
Amigo Alejandro:

Yo te explico cómo lo haría yo:

1.- Tabla de Temas, con una columna IdT y otra Texto
2.- Tabla de Secciones, con una columna IdS y otra Seccion
3.- Tabla de Apartados, con IdA y Apartado

Supongamos que esta es la estructura jerárquica de la BD, es decir,
dado un apartado se muestran las secciones y dentro de cada sección
hay varios temas

Necesito tablas adicionales para relacionarlas:

1.- Tabla SeccionesTemas, con columnas IdS y IdT
2.- Tabla ApartadosSecciones, con columnas IdA y IdS

En estas tablas se guardan pares de Ids que relacionan las
correspondientes Tablas asociadas

¿Modo de uso de todo ésto? Ya que leí en tu web que estás dudando
entre SQL Server y MySQL, te daré un argumento para usar SQL Server
escribiéndolo el interfaz con procedimientos almacenados:


CREATE TABLE Apartados (
IdA int NOT NULL PRIMARY KEY,
Apartado varchar( 50 ) NOT NULL )

INSERT Apartados ( IdA, Apartado ) VALUES ( 1, 'Informática' )
INSERT Apartados ( IdA, Apartado ) VALUES ( 2, 'Derecho' )

CREATE TABLE Secciones (
IdS int NOT NULL PRIMARY KEY,
Seccion varchar( 50 ) NOT NULL )

INSERT Secciones ( IdS, Seccion ) VALUES ( 1, 'XML' )
INSERT Secciones ( IdS, Seccion ) VALUES ( 2, 'ASP' )
INSERT Secciones ( IdS, Seccion ) VALUES ( 3, 'SQL' )

INSERT Secciones ( IdS, Seccion ) VALUES ( 4, 'Derecho Romano' )
INSERT Secciones ( IdS, Seccion ) VALUES ( 5, 'Derecho Internacional'
)

CREATE TABLE Temas (
IdT int NOT NULL PRIMARY KEY,
Tema ntext NOT NULL )

INSERT Temas ( IdT, Tema ) VALUES ( 1, 'XML: una nueva tecnología,
etc...' )
INSERT Temas ( IdT, Tema ) VALUES ( 2, 'XML PATH...' )
INSERT Temas ( IdT, Tema ) VALUES ( 3, 'XML y XLT...' )
INSERT Temas ( IdT, Tema ) VALUES ( 4, 'ASP: visión servidor...' )
INSERT Temas ( IdT, Tema ) VALUES ( 5, 'ASP y el cliente...' )
INSERT Temas ( IdT, Tema ) VALUES ( 6, 'SQL: crucigramas...' )
INSERT Temas ( IdT, Tema ) VALUES ( 7, 'SQL y cubos de datos...' )
INSERT Temas ( IdT, Tema ) VALUES ( 8, 'SQL Rendimiento y ...' )


CREATE TABLE ApartadosSecciones (
IdA int NOT NULL,
IdS int NOT NULL,
PRIMARY KEY CLUSTERED ( IdA, IdS ),
CONSTRAINT FK_AS_A FOREIGN KEY ( IdA ) REFERENCES Apartados ( IdA
),
CONSTRAINT FK_AS_S FOREIGN KEY ( IdS ) REFERENCES Secciones ( IdS
),
)

INSERT ApartadosSecciones ( IdA, IdS ) VALUES ( 1, 1 )
INSERT ApartadosSecciones ( IdA, IdS ) VALUES ( 1, 2 )
INSERT ApartadosSecciones ( IdA, IdS ) VALUES ( 1, 3 )
INSERT ApartadosSecciones ( IdA, IdS ) VALUES ( 2, 4 )
INSERT ApartadosSecciones ( IdA, IdS ) VALUES ( 2, 5 )

CREATE TABLE SeccionesTemas (
IdS int NOT NULL,
IdT int NOT NULL,
PRIMARY KEY CLUSTERED ( IdS, IdT ),
CONSTRAINT FK_ST_S FOREIGN KEY ( IdS ) REFERENCES Secciones ( IdS ),
CONSTRAINT FK_ST_T FOREIGN KEY ( IdT ) REFERENCES Temas ( IdT )
)

INSERT SeccionesTemas ( IdS, IdT ) VALUES ( 1, 1 )
INSERT SeccionesTemas ( IdS, IdT ) VALUES ( 1, 2 )
INSERT SeccionesTemas ( IdS, IdT ) VALUES ( 1, 3 )
INSERT SeccionesTemas ( IdS, IdT ) VALUES ( 2, 4 )
INSERT SeccionesTemas ( IdS, IdT ) VALUES ( 2, 5 )
INSERT SeccionesTemas ( IdS, IdT ) VALUES ( 3, 6 )
INSERT SeccionesTemas ( IdS, IdT ) VALUES ( 3, 7 )
INSERT SeccionesTemas ( IdS, IdT ) VALUES ( 3, 8 )


GO

CREATE PROC Menu_Principal
AS
SET NOCOUNT ON
SELECT IdA, Apartado
FROM Apartados
RETURN

GO

CREATE PROC Menu_Apartado
@IdA int
AS
SET NOCOUNT ON

SELECT S.IdS, S.Seccion
FROM Secciones S
INNER JOIN ApartadosSecciones A On A.IdS = S.IdS
WHERE A.IdA = @IdA

RETURN

GO

CREATE PROC Menu_Seccion
@IdS int
AS
SET NOCOUNT ON

SELECT T.IdT, T.Tema
FROM Temas T
INNER JOIN SeccionesTemas S On S.IdT = T.IdT
WHERE S.IdS = @IdS

RETURN

GO

CREATE PROC Tema
@IdT int
AS

SELECT T.Tema
FROM Temas T
WHERE T.IdT = @IdT

GO

EXEC Menu_Principal
EXEC Menu_Apartado 1
EXEC Menu_Seccion 3
EXEC Tema 6


'-- FICHERO PRUEBA.ASP -

<html><body>
<%

Dim Apartado, Seccion, Tema

Apartado = Request("Apartado")
Seccion = Request("Seccion")
Tema = Request("Tema")

Dim cn
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "PROVIDER=SQLOLEDB.1;" _
"Data Source=<tu servidor>;" _
"User Id=<tu usuario SQL>;" _
"Password=<tu contraseña>;" _
"Initial Catalog=<tu base de datos>"

Dim rs
If Apartado = "" And Seccion = "" And Tema = "" Then
Set rs = cn.Execute( "EXEC Menu_Principal" )
ElseIf Apartado <> "" Then
Set rs = cn.Execute( "EXEC Menu_Apartado " & Apartado )
ElseIf Seccion <> "" Then
Set rs = cn.Execute( "EXEC Menu_Seccion " & Seccion )
ElseIf Tema <> "" Then
Set rs = cn.Execute( "EXEC Tema " & Tema )
End If

response.write "<table>"

do until rs.eof
response.write "<tr><td>"
if Tema <> "" Then
response.write rs(0)
else
response.write "<a href=" &
Request.ServerVariables("SCRIPT_NAME") & "?"
if Seccion <> "" Then
response.write "tema=" & rs(0)
elseif Apartado <> "" Then
response.write "seccion=" & rs(0)
else
response.write "apartado=" & rs(0)
end if
response.write ">"
response.write rs(1) & "</a>"
end if
response.write "</td></tr>"
rs.movenext
loop

response.write "</table>"

%>
</body></html>

'-- FIN FICHERO PRUEBA.ASP --

Espero no haber sido demasiado pesado, pero es que estoy de vacaciones
y echo de menos mis servidores :(

Saludos,

Diego Buendia
Barcelona, Spain
Respuesta Responder a este mensaje
#5 Alejandro Esteve
18/11/2003 - 00:40 | Informe spam
gracias Diego...ya tengo para estudiar un rato
y comentarte que la duda entre SQL & MySQL se basa en los extremos:

- Software GNU y libre de costos $$
- migrar a la plataforma *NIX, seguramente Red Hat 9 por tema de seguridad ya que acabo de pasar por una pérdida de datos y (sin entrar en polémicas) lo cierto es que para *NIX hay menos virus y ataques que contra los sistemas de Microsoft
- aprender sobre ambas plataformas: ASP.Net y MySQL/PHP

otro punto, para más adelante, es el XML que deseo implementar ya que pienso que mi espacio se puede trasladar fácilmente con las innumerables ventajas que aporta...

te deseo que pases unas buenas vacaciones :))
Alejandro Esteve
http://www.BibliotecaInformatica.Net
ftp://217.126.217.218


"Diego Buendia" wrote in message news:
Amigo Alejandro:

Yo te explico cómo lo haría yo:
...//...
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida