(id,nombre)
Para saber cual es la Home. puedo crear una tabla home que luego solo
tendra un registro con el id de la pagina.
O bien puedo añadir un campo booleano a la tabla de paginas
(id,nombre,home).
Lo primero me parece mas bonito y correcto pero... suelto aqui el
planteamiento por si a alguien se le ocurre algun motivo para decantarme
por uno u otro.
Saludos
--
Alex Estevez
Si lo que deseas es almacenar el nombre de una página por un sitio y
su URL por otra lo primero que has planteado es incorrecto porque
estás hablando de una relación 1:1.
Existen varias "normas" para diseñar una base de datos. Pásate por
aquí (buscando tutoriales de bases de datos en google):
http://www.abcdatos.com/tutoriales/programacion/basesdedatos/varios.html
Si existiera la posibilidad de que un nombre pueda tener varias
páginas web entoces sí que habría que usar el primer método. Mientras
el segundo es el más adecuado.
>Saludos
Saludos.
--
Óscar Javier García Baudet
LinaresDigital
http://redstar.linaresdigital.com/
Es una relacion 1:1 y no hay nada de nombres ni de urls. Se trata solo
de una relacion de registros.
miro la tabla home, me da un id , busco ese id en la tabla paginas y
consigo los datos de esa registro (y otras cosas y los muestro.
El tema es que en php y mysql habria algun motivo para decantarse por
una u otra? Yo personalmente me he decantado por la primera que es la
correcta, pero a veces... da pena tener una tabla con un registro con un
campo :)
Saludos
--
Alex Estevez
Si es una relación 1:1, y si entiendo a lo que te refieres, a todas luces es
mejor añadir un campo a la tabla que crear una tabla nueva con un id + el
campo.
>
> miro la tabla home, me da un id , busco ese id en la tabla paginas y
> consigo los datos de esa registro (y otras cosas y los muestro.
>
> El tema es que en php y mysql habria algun motivo para decantarse por una
> u otra?
En mysql y en cualquier formato, el motivo es la lógica de los datos y la
facilidad de programación.
>Yo personalmente me he decantado por la primera que es la correcta, pero a
>veces... da pena tener una tabla con un registro con un campo :)
Si para cada campo utilizas una tabla... No pega mucho con la teoría de
cientos de años.
Salu2.
*_buki_*
Creo que has leido mal... he dicho que la primera es INcorrecta.
No puedes tener una tabla para un único campo cuando ese campo debe
existir por cada registro (relación 1:1).
>miro la tabla home, me da un id , busco ese id en la tabla paginas y
>consigo los datos de esa registro (y otras cosas y los muestro.
>El tema es que en php y mysql habria algun motivo para decantarse por
>una u otra?
Deberías mirar algo sobre "formas normales" para aprender a normalizar
tu base de datos.
He leido muy mal y conozco la normalizacion aunque reconozco que la
tengo olvidada.
Veamos. no ha de existir un valor para cada registro. Voy a poner un
ejemplo:
Pagina
+----+--------------------+
| id | name |
+----+--------------------+
| 1 | Esto es una pagina |
| 2 | Esta es otra |
| 3 | Esta sera la home |
| 4 | Esta es otra |
.
.
.
| N | Esta es otra |
+----+--------------------+
Home
+--------+
| pagina |
+--------+
| 3 |
+--------+
Esta es la opcion que me parece correcta.
La otra opcion seria
Pagina
+----+--------------------+------+
| id | name | Home |
+----+--------------------+------+
| 1 | Esto es una pagina | 0 |
| 2 | Esta es otra | 0 |
| 3 | Esta sera la home | 1 |
| 4 | Esta es otra | 0 |
.
.
.
| N | Esta es otra | 0 |
+----+--------------------+----- +
Si el dia de mañana estas tablas guardasen distintas webs (no se dara el
caso) la primera opcion seria la unica correcta (la tabla home tendria
mas informacion y habria mas registros). Y la segunda opcion es un tanto
mas sucia. por no decir muy sucia.
Peeeero imagino que es mucho mas rapido un
SELECT * FROM Pagina WHERE home = '1';
que un:
SELECT Pagina.* FROM Pagina,home WHERE pagina.id = home.pagina;
Saludos
--
Alex Estevez
Me refiero a que una cosa es la teoria y luego, en la practica se suelen
desnormalizar cosas porque resulta mas beneficioso segun donde y como
funciona.
Saludos
--
Alex Estevez
Tal y como tienes pensada la base de datos tener dos tablas es la
mejor opción, pero no lo es bajo ciertas circunstancias.
Imagínate que tienes una tabla donde almacenas los usuarios de tu
sistema (los que almacenan sus páginas web). En esa tabla es donde
deberías indicar cual es su página de inicio añadiendo un nuevo campo
al típico nombre de usuario y contraseña.
>Peeeero imagino que es mucho mas rapido un
>SELECT * FROM Pagina WHERE home = '1';
>que un:
>SELECT Pagina.* FROM Pagina,home WHERE pagina.id = home.pagina;
No te creas que es tan "mucho más rápido". Creo que el ahorro de
espacio puede compensar unos microsegundos de espera.
Nooo no no, a ver... si se podria, pero no es necesario ni seria
efectivo. Una web es una web. Y tiene una home. Independientemente de
que usuarios la editen... no? vamos, que puestos a refinar lo que
mencionas tampoco seria "lamejorsolucion" :)
>
>
>>Peeeero imagino que es mucho mas rapido un
>>SELECT * FROM Pagina WHERE home = '1';
>>que un:
>>SELECT Pagina.* FROM Pagina,home WHERE pagina.id = home.pagina;
>
>
> No te creas que es tan "mucho más rápido". Creo que el ahorro de
> espacio puede compensar unos microsegundos de espera.
>
Bueno, lo planteo porque a veces alguien te dice "NO HOMBRE... esto con
este truco tal y tal". Y piensas coñe! como no se me habia ocurrido
antes. Porque una solucion es mas correcta, la otra mas rapida pero
ninguna es del todo elegante. Y a veces una idea "paralela" por asi
decirlo te lo soluciona. De todos modos, esas diferencias de
microsegundos a veces son importantes y cada vez mas. Ultimamente veo
que proliferan mucho los servidores virtuales, cada vez mas, y a veces
esos microsegundos se convierten en milisegundos... y a la larga pueden
convertirse en segundos :)
Es bueno tenerlo en cuenta para "picar" un codigo de un modo que el dia
de mañana rapidamente puedas cambiar al otro concepto :)
Saludos
--
Alex Estevez
Quizá soy yo que no entiendo lo que quieres hacer. Yo me estoy
imaginando un repositorio de páginas web favoritas o algo así, pero
estoy viendo que... ¿intentas montar una página web a través de
mysql/php? :)
No lo intento :) Y si se trata de una web administrada via web con
mysql/php. Lo tipico y habitual, un CMS simple con lo justo.
No es esto (es mucho mas complicado), pero para que me entiendas:
tabla Pagina = id, nombre, contenido
tabla Home = pagina.
Una administracion que permita
crear,modificar,borrar paginas.
Seleccionar una como home.
y luego un simple index.php que al entrar a la web:
si hay un $_GET['id'] muestre el contenido del registro con mismo id en
pagina.
Si no lo hay lo lea de home y entonces muestre el contenido del registro
de pagina indicado en home.
Al 'complicarlo' en la administracion pueden entrar diversos usuarios a
editar distintas cosas pero de un mismo site. no tendria sentido homes
por usuarios. Si quisera guardar varios sites entonces tendria sentido
una tabla home con (pagina,site).
Eso pretendia decir :)
Saludos
--
Alex Estevez
Al entrar en escena un elemento común que sí que tiene una relación
1:1 con la página "home" podrás meter la referencia en la tabla de
usuarios como un campo adicional tal y como te dije.
Ejemplo:
tabla Usuarios = id, usuario, clave, alta, activado, home
NO (tm) :) que no Oscar, que no van por ahi los tiros, los usuarios no
tienen home. La home es una (grande y libre?) :)
Una home para todos :)
Saludos
--
Alex Estevez
Creo que ahora sé por donde van los tiros.
La página inicial es la página inicial del cms... vamos.. que quieres
meter el nombre de las páginas en la base de datos..
En ese caso puedes usar un nombre fijo (al igual que se usa
"index.html" en las páginas html).
Quizá eso te ayude :)
Si no, sigue siendo válida la solución de una segunda tabla (aunque es
un desperdicio tenerla para solo un elemento que va a ser fijo).
>Saludos
Si solo hay una no sé para qué quieres meterla en una base de datos.
Página de inicio: index.php
Si aparte de eso quieres almacenar la url, el código o lo que sea de cada
página o páginas de usuario, en ese caso si tiene sentido crear una tabla
páginas y otra tabla usuarios.
Incluso yo lo haría con dos tablas aunque cada usuario solo pudiera tener
una página, ya que páginas y usuarios son objetos distintos.
Salu2.
*_buki_*
Bien perfecto :) solo has fallado en una cosa.
>
> En ese caso puedes usar un nombre fijo (al igual que se usa
> "index.html" en las páginas html).
>
En esto. La pagina, aunque la misma, es generada, asi que php :) Creo
que el matiz esta en que no hablo de la pagina inicial del CMS sino de
la pagina inicial de la web que genera ese CMS
Saludos
---
Realmente lo que dices es cierto, y de hecho el progreso consiste en
plantearse y solucionar cosas que hasta ese momento nadie se había
planteado. El que primero se las plantea es el que más mérito tiene.
Genio!!!
Viendo las otras ramas, de tu pregunta, supongo que ...
- Una tabla para almacenar todas las paginas.
- Una (solo una) pagina principal para todo 'el conjunto'.
- Los posibles clientes tienen sus páginas y (aunque esto no me ha quedado
muy claro) cada uno tiene su página principal.
Por partes ...
pagina = id + nombre + ... (hasta aquí todos de acuerdo)
Como solo hay una página principal y el campo de autoincremento empieza
desde '1', el '0' podría ser la indicación de la página principal.
Cuando empiecen los clientes siempre se puede crear otra tabla con las
páginas principales de cada uno ...
cliente = id + home + ... ('id' del cliente y 'home' es la referencia
de su página principal o raíz de sus páginas)
--
----o---( )---o----
Saludos de Victor Lopez Sabio
v.lo...@ono.com ...
--------oooo--------