Foros del Web » Programando para Internet » PHP »

[Ayuda] Como es mejor?

Estas en el tema de [Ayuda] Como es mejor? en el foro de PHP en Foros del Web. Hola, hago este post rapidito ya que ando medio apurado y necesito saber una respuesta pronto... Tengo una web en dos idiomas, ingles y español, ...
  #1 (permalink)  
Antiguo 11/12/2008, 15:46
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 16 años
Puntos: 0
Pregunta [Ayuda] Como es mejor?

Hola, hago este post rapidito ya que ando medio apurado y necesito saber una respuesta pronto...

Tengo una web en dos idiomas, ingles y español, a la cual la actualizo mas o menos seguido agregando noticias...

Y quiero que segun el idioma que el usuario eligio, muestre las noticias segun el idioma... Como me conviene hacer las tablas de MySQL de las noticias?

a) en una misma base de datos 'noticias' creo las tablas:
noticiaTituloEs,
noticiaTituloEn,
noticiaTextoEs,
noticiaTextoEn
?
b) en dos base de datos separadas: 'noticias_es' y 'noticias_en'?

las noticias las agrego desde el panel de administracion q he creado, a traves de un formulario...

Y ovbiamente, creo que lo tendria que hacer en dos campos, o sea...

en el form tendre dos campos de titulo: uno en Español, y el otro en ingles, lo mismo con el texto.

O alguien sugiere algo distinto? pregunto para saber de que manera es mas ordenado...

No pido scripts ni nada, simplemente q me digan como seria mejor y mas ordenado...

espero q me ayuden, gracias...
  #2 (permalink)  
Antiguo 11/12/2008, 15:59
 
Fecha de Ingreso: julio-2008
Ubicación: El Puerto de Santa María
Mensajes: 62
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: [Ayuda] Como es mejor?

Yo creo que es mejor una tabla con diferentes campos:
ID - TituloES - TituloEN - TextoES - TextoEN - Fecha
  #3 (permalink)  
Antiguo 11/12/2008, 16:01
 
Fecha de Ingreso: septiembre-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: [Ayuda] Como es mejor?

Lo mejor es que hagas dos tablas una llamada noticias con uno de los campos llamdo idioma y otra tabla llamada idioma que es la que usaras para almacenar no solo el español o el ingles sino en un futuro alema, italiano etc, etc.

Luego a la hora de colgar las noticias simplemente escribes la noticia y le asignas el id del idioma al que pertenece.

Espero te sirva.

Un saludo.
  #4 (permalink)  
Antiguo 11/12/2008, 16:59
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Respuesta: [Ayuda] Como es mejor?

Coincido con lo de tablas separadas.

Yo lo haría con tres tablas:
Noticias, con todos los campos de la noticia menos los que se traducen.
Idiomas, con un código de idioma y el resto de datos que sean necesarios
y una tercera tabla con el código de la notica, el del idioma y los campos que sean necesarios (Título, Texto, etc...)
  #5 (permalink)  
Antiguo 11/12/2008, 17:13
 
Fecha de Ingreso: septiembre-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: [Ayuda] Como es mejor?

Una cosilla solamente, para que quereis separar las noticias por idiomas solo tiene que crear una estructura estandar para las noticias y luego indicar por el id de idioma si es español o inlges da igual que una noticia tenga el id 20 en castellano y la traduccion el id 40 si lo troceais mas estareis complicando el mantenimiento y no tendria lugar hacer la tabla de idiomas ya que los estariais separando fisicamente.

No se si me explico...
  #6 (permalink)  
Antiguo 11/12/2008, 17:53
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 16 años
Puntos: 0
Respuesta: [Ayuda] Como es mejor?

gracias... veo que todos tienen una forma distinta... por eso es que preguntaba, porke no sabia cual era la mejor, pero como ahora tienen todos una opinion distinta, tendre que ir probando y elegir... jeje... gracias a todos, voy a ver como queda mejor...
porque antes de continuar haciendo la aplicacion necesito tener un orden establecido con las tablas, si no, mas adelante tendre q modificar los script de las funciones y es un lio, asi q mejor decidirse como hacer las tablas antes de empezar...

saludos!
  #7 (permalink)  
Antiguo 11/12/2008, 17:58
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Respuesta: [Ayuda] Como es mejor?

Una tabla para cada idioma es mejor, pienso yo, ya que por un lado es más cómodo y ordenado, y por otro lado, es más escalable si algún día decides añadir más idiomas.
  #8 (permalink)  
Antiguo 11/12/2008, 18:12
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 16 años
Puntos: 0
Respuesta: [Ayuda] Como es mejor?

O sea que se puede hacer asi: (perdonen q por ahi soy un poco tonto...)

creo una tabla 'news'
y coloco los valores:

ID_NEWS - el id de la noticia
ID_LANG - el id del lenguaje (Ej: 0=ES | 1=EN)

(CORRIJO) Creo que no se necesitarian valores para cada uno... jeje

titulo
texto

y para gregar la noticia lo hago en un formulario con:

Campo del titulo,
campo del texto,
botones radio del idioma en el cual kiero poner la noticia.

para mostrarlas en ingles, elegiria que muestra las q tienen ID_LANG=0 para español, ID_LANG=1 para ingles...

creo q kedaria algo asi:

Cita:
DROP TABLE IF EXISTS news;
CREATE TABLE news (
ID_NEWS INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
ID_LANG INT(10) UNSIGNED NOT NULL,
newsTitle VARCHAR(120) NOT NULL,
newsContent TEXT NOT NULL,
newsDate TIMESTAMP(14) NOT NULL,
PRIMARY KEY(ID_NEWS)
) TYPE=MyISAM DEFAULT CHARSET=utf8;

Última edición por thepancher; 11/12/2008 a las 18:29
  #9 (permalink)  
Antiguo 11/12/2008, 18:18
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 16 años
Puntos: 0
Respuesta: [Ayuda] Como es mejor?

Cita:
Iniciado por Bonez Ver Mensaje
Una tabla para cada idioma es mejor, pienso yo, ya que por un lado es más cómodo y ordenado, y por otro lado, es más escalable si algún día decides añadir más idiomas.
Y puede ser... pasa que se requeririan muchas tablas si algun dia se añaden muchos idiomas... jeje
  #10 (permalink)  
Antiguo 11/12/2008, 18:30
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: [Ayuda] Como es mejor?

1 tabla para idiomas:
---------------
id_idioma smallint(3) autoincrement
nombre_idioma varchar(30)

1 tabla para noticias:
---------------
id_noticia int(10) autoincrement
id_idioma smallint(3)
fecha (yo uso siempre int(10) y guardo el time() de php)
titulo varchar(120)
contenido text

Asi puedes agregar todos los idiomas que quieras y crear las noticias eligiendo el idioma, no necesariamente debe estar la traduccion en el mismo registro
__________________
- León, Guanajuato
- GV-Foto
  #11 (permalink)  
Antiguo 11/12/2008, 18:35
 
Fecha de Ingreso: septiembre-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: [Ayuda] Como es mejor?

eso es thepancher, con esa sencilla operacion tienes tu tabla de noticias con los idiomas que te de la gana de hecho la tabla de idiomas es solo para que puedas consultar a que idioma pertenece la noticia sin tener que acordarte a que idioma pertenece el id 1 o el 2 o el 3 etc, etc.

un saludo.
  #12 (permalink)  
Antiguo 11/12/2008, 18:56
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 16 años
Puntos: 0
Respuesta: [Ayuda] Como es mejor?

Cita:
Iniciado por Triby Ver Mensaje
1 tabla para idiomas:
---------------
id_idioma smallint(3) autoincrement
nombre_idioma varchar(30)

1 tabla para noticias:
---------------
id_noticia int(10) autoincrement
id_idioma smallint(3)
fecha (yo uso siempre int(10) y guardo el time() de php)
titulo varchar(120)
contenido text

Asi puedes agregar todos los idiomas que quieras y crear las noticias eligiendo el idioma, no necesariamente debe estar la traduccion en el mismo registro
Si, parecido a lo mio pero nada mas q los idomas en otra tabla, asi como dijiste, puedo agregar los idiomas q kiera... bueno gracias a todos por su opinion, ahora mismo hago los cambios en el install.sql jeje

saludos!
  #13 (permalink)  
Antiguo 11/12/2008, 19:17
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: [Ayuda] Como es mejor?

De hecho fue elbetonet quien lo sugirio pero creo que no te quedo muy claro; el reconocimiento es para el.
__________________
- León, Guanajuato
- GV-Foto
  #14 (permalink)  
Antiguo 12/12/2008, 01:32
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Respuesta: [Ayuda] Como es mejor?

Discrepo....

Sigo opinando que la forma que planteé con tres tablas es más limpia.

Parto del hecho de que en la tabla de noticias puede haber infinitos campos comunes a todos los idiomsa (fecha, autor, categoria, y todos los campos que sean necesarios). Teniendo las noticias y las traducciones en una sola tabla obliga a duplicar toda esa información y dificulta enormememte el mantenimiento.
  #15 (permalink)  
Antiguo 12/12/2008, 02:45
 
Fecha de Ingreso: diciembre-2003
Ubicación: Salamanca
Mensajes: 123
Antigüedad: 20 años, 11 meses
Puntos: 3
Respuesta: [Ayuda] Como es mejor?

¿Puedo?...
Yo estoy con Keysher.
Una tabla para idiomas, otra para noticias y la tercera para para el id de la noticia con los campos imprescindibles.
  #16 (permalink)  
Antiguo 12/12/2008, 04:09
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 16 años
Puntos: 0
De acuerdo Respuesta: [Ayuda] Como es mejor?

Bueno, me dijeron q las gracias se las debo a betonet, jeje, si el fue el q me sugirio con lo q me kede, ovbiamente sabe que le doy las gracias... pero yo siempre agradesco a todos, porq lo q cuenta es el participar! ya q si solamente le agrasco al q me soluciono el problem, kedo egoista con el resto, y si le agradesco a todos, por ahi kedo egoista con el q me lo soluciono xD jeje... espero q me entiendan, asi ke GRACIAS A TODOS!!! :P

les cuento como me kedo la tabla...

Código PHP:
DROP TABLE IF EXISTS languages;
CREATE TABLE languages (
ID_LANG TINYINT(3UNSIGNED NOT NULL AUTO_INCREMENT,
langCode VARCHAR(4NOT NULL,
langName TINYTEXT NOT NULL,
PRIMARY KEY(ID_LANG)
TYPE=MyISAM DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS news;
CREATE TABLE news (
ID_NEWS SMALLINT(5UNSIGNED NOT NULL AUTO_INCREMENT,
ID_LANG TINYINT(3UNSIGNED NOT NULL,
newsTitle VARCHAR(120NOT NULL,
newsContent TEXT NOT NULL,
newsAuthor VARCHAR(30NOT NULL,
newsDate TIMESTAMP(14NOT NULL,
PRIMARY KEY(ID_NEWS)
TYPE=MyISAM DEFAULT CHARSET=utf8
mas adelante seguramente voy a kerer a hacer una funcion, asi ke capas q les pida de nuevo ayuda xD jeje, para importar idiomas con un formulario desde el panel de admin, por ej.

tengo un archivo ZIP con los archivos de las traducciones supongamos: frances (fr.php) q descomprima los archivos en cierta carpeta, ej: 'lang' y agregue el idioma a la tabla 'languages'...

por si kieren saber, es porke estamos tratando de armar algo asi como un espacio... y keremos ser bien ordenados con las tablas, porke son muchas... hasta ahora usamos 25, pero con lo q falta, al menos se agregaran unas 15-25 mas... depende d lo q se le agregue...

bueno, grax de nuevo a todos...
  #17 (permalink)  
Antiguo 12/12/2008, 04:23
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 20 años
Puntos: 48
Respuesta: [Ayuda] Como es mejor?

Yo en news usaria langCode en lugar de id_lang, si es que langCode es el codigo ISO del idioma. id_lang al ser autoincrement depende del orden de insercion, pero el idioma de la noticia sera siempre el mismo sea cual sea el orden de insercion en la tabla languages.

Tambien podrias hacer una tabla para relacionar las noticias traducidas.
  #18 (permalink)  
Antiguo 12/12/2008, 04:36
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 16 años
Puntos: 0
Respuesta: [Ayuda] Como es mejor?

Y la verdad que tenes razon DarkJ, ya q el orden no se utilizaria... Pero talves sea util para algo, como por ej, si en el panel de administracion kiero visualizar todos los idiomas que se han "instalado", creo que seria bueno usar el ID para ordenarlos, del primer agregado, al ultimo... o al revez... o tambien se le puede agregar un campo mas, para saber la fecha en la cual el idioma fue agregado, etc... por ahi esto no es util... pero creo q a la hora de administrar el sitio, es bueno tener un orden, ya que son muchas cosas...

o sino tambien se le puede sacar el campo 'langCode' y dejar solo 'ID_LANG' y 'langName',
asi al utilizar cierto idioma utilizamos el ID, y el nombre serviria para identificar el lenguaje, para no tener q recordad cual es cual segun el numero...

la verdad q hay muchas maneras xD creo q esto llego a ser todo un debate jaja

pero bueno, creo q al ir probando, vere cual keda mas comodo, porke te digo q desde q postie esto, he cambiado el codigo varias veces, gracias a todos uds q postearon, con el fin de mejorar el orden y uso de las tablas...

saludos!
  #19 (permalink)  
Antiguo 12/12/2008, 09:53
 
Fecha de Ingreso: septiembre-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: [Ayuda] Como es mejor?

Hola a todos que conste que estoy deacuerdo con Keysher en el formato de 3 tablas pero estaras conmigo keysher que para 1 campo en comun que puede ser no traducible, 3 tablas una de ellas con un solo campo no merece la pena...

Darkj mu bueno lo del LangCode no se me paso por la cabeza.

un saludo a todos.
  #20 (permalink)  
Antiguo 12/12/2008, 10:05
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Respuesta: [Ayuda] Como es mejor?

Bueno, que merezca o no la pena ya es una cuestión más subjetiva...

Está claro que con un par de campos no se duplican muchos datos, pero si se quiere crear un sistema escalable y con una fácil actualización me decantaría por las tres tablas.

Pero vamos, es un tema personal, para un sistema tan pequeñito lo mismo da una forma que otra.
  #21 (permalink)  
Antiguo 12/12/2008, 10:41
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 8 meses
Puntos: 15
Respuesta: [Ayuda] Como es mejor?

No he leído otras respuestas, pero a vuelo... lo mejor para mi es:

Crear una tabla idiomas:

Create table idiomas(
ID_Idioma char(3) not null,
Idioma varchar(15),
Primary key(ID_Idioma)
);

En cada tabla de tu base de datos, al guardar la informacion se especifica el idioma:
digamos:
Create table XXX(
ID...
ID_Idioma...
Contenido...
);

Donde ID_Idioma: Almacena por ejemplo(ESP, ENG, FRH...) y el campo Idioma Almacena la descripción completa: (Español , Ingles, Frances...).

Existen muchas formas, pero esto te facilitaría el mantenimiento en caso de que se agregue un nuevo idioma.

IMPORTANTE:
- Te recomiendo detectar el idioma a través de javascript o php, y luego redireccionar al usuario a la sección específica del idioma.
- Debes tener muy en cuenta la codificación de la Pagina web, si es ingles usar UTF-8 y si es español o latín usar ISO-8859-1, y así para otros idiomas...
- También debes tener en cuenta la codificación de la BD.

Yo en tu lugar, usaría UTF-8 para todo php y html, xml... es lo que en general se recomienda... he igual para la BD. Mysql tiene una característica muy potente con que puedes especificar a unos campos trabajar con UTF-8 y otros con ISO-(Muy útil cuando se habla de internacionalización de sitios web).

- Muy importante si piensas usar AJAX en tu sistema.

Un, saludo desde Colombia!
  #22 (permalink)  
Antiguo 12/12/2008, 11:31
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Respuesta: [Ayuda] Como es mejor?

Cita:
Iniciado por Keysher Ver Mensaje
Discrepo....

Sigo opinando que la forma que planteé con tres tablas es más limpia.

Parto del hecho de que en la tabla de noticias puede haber infinitos campos comunes a todos los idiomsa (fecha, autor, categoria, y todos los campos que sean necesarios). Teniendo las noticias y las traducciones en una sola tabla obliga a duplicar toda esa información y dificulta enormememte el mantenimiento.

Cita:
Iniciado por dobeto Ver Mensaje
¿Puedo?...
Yo estoy con Keysher.
Una tabla para idiomas, otra para noticias y la tercera para para el id de la noticia con los campos imprescindibles.

En mi opinión y en la de cualquier persona que ha estudiado base de datos en la facultar, en normalización de datos esto es lo correcto, tenga uno o mil campos.


Cita:
Iniciado por Keysher
Pero vamos, es un tema personal, para un sistema tan pequeñito lo mismo da una forma que otra.
Acá no estoy de acuerdo para nada. Sea chico o gigante la idea es siempre trabajar como es correcto, y nunca puede dar lo mismo hacer las cosas bien que mal.

Ah, y el tema deja de ser personal cuando lo estamos debatiendo en un foro :P
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #23 (permalink)  
Antiguo 12/12/2008, 15:03
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Respuesta: [Ayuda] Como es mejor?

Jaja, pero a veces la diferencia entre hacer lo correcto y lo "no tan correcto" no es apreciable.

Dudo mucho que haya alguna aplicación informática programada totalmente de forma correcta! (bueno, es un poco exagerado).

Yo, pese a las pocas ventajas prácticas que aporta, lo hubiese hecho con las tres tablas porque es como he aprendido que es la mejor forma (o la correcta, vaya), pero reconozco que en éste caso no hay muchos beneficios reales de hacerlo así.

Incluso en algunos casos hacer las cosas del modo correcto puede acarrear más desventajas que ventajas (pero no es el caso).

Claro que sería lo ideal que todo el mundo programase de la mejor forma posible, pero eso es una útopia.

De todos modos esta es una discusión que se podría extender mucho! Habrá opiniones de todo tipo, desde los que prefieren algo sencillo de programar, hasta los que son partidarios de algo que sea mucho más enrevesado en el código pero con una capa más alta que lo haga más escalable, los que siguen a rajatabla las normas y las "buenas practicas"..... Así que si se quiere debatir el tema, mejor en otro post, para no desviar mucho éste!
  #24 (permalink)  
Antiguo 14/12/2008, 06:46
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 16 años
Puntos: 0
Respuesta: [Ayuda] Como es mejor?

Y yo finalmente lo deje de la manera que me parecio mejor... aparte hay que acordarse que no es bueno tener muchas tablas en una base de datos... mientras menos mejor y tampoco se trata de poner todo junto y complicarnos la vida jaja... pero en mi caso, que son varias cosas distitnas, necesito muchas tablas si o si, por eso trato de facilitarmelas... Finalmente lo deje asi:

Cita:
DROP TABLE IF EXISTS languages;
CREATE TABLE languages (
ID_LANG TINYINT(2) UNSIGNED NOT NULL AUTO_INCREMENT,
langCode VARCHAR(2) NOT NULL,
langName TINYTEXT NOT NULL,
langDefault TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY(ID_LANG)
) TYPE=MyISAM DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS news;
CREATE TABLE news (
ID_NEWS SMALLINT(4) UNSIGNED NOT NULL AUTO_INCREMENT,
ID_LANG TINYINT(2) UNSIGNED NOT NULL DEFAULT 1,
newsTitle VARCHAR(128) NOT NULL,
newsContent TEXT NOT NULL,
newsAuthor VARCHAR(64) NOT NULL,
newsDate TIMESTAMP(14) NOT NULL,
PRIMARY KEY(ID_NEWS)
) TYPE=MyISAM DEFAULT CHARSET=utf8;
creo que es una forma optimizada y ordenada... si me equivoco en algo, porfavor que me diga asi dejo mejor las tablas... :D

Ademas, la tabla de lenguajes no solo puede funcionar para las noticias, sino para todo el sitio...

Saludos...
  #25 (permalink)  
Antiguo 15/12/2008, 06:56
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Respuesta: [Ayuda] Como es mejor?

De esa manera no tenés traducción, sino noticias en un idioma...y me gustaría saber de donde sacaste eso de:
Cita:
no es bueno tener muchas tablas en una base de datos
Es todo relativo a cada caso, pero normalmente no es así, te recomendaría leer algo de normalización de datos ;)

Saludos.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:55.