elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  necesito opinión e ideas sobre mi base de datos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: necesito opinión e ideas sobre mi base de datos  (Leído 11,467 veces)
N4X

Desconectado Desconectado

Mensajes: 74



Ver Perfil WWW
necesito opinión e ideas sobre mi base de datos
« en: 6 Enero 2010, 02:41 am »

Bueno primero tengo mucho sueño, asi que si me dejo algo me lo hacen saber y mañana lo publcio  :silbar:

Estoy diseñando la base de datos para un sitio que queremos hacer con unos amigos.

Esto es lo que tengo diseñado:
url:http://img266.imageshack.us/img266/8137/esquemamysql.jpg
esta todo compactado para que entre en la imagen  :-X

1. Las tablas son myisam y llevan foreing keys (FK) algún problema en ello??

Bueno e separado las diferentes partes por colores, las que no tienen color son funciones generales.

Los mediumint(8) son valores de un id de usuario smf.. no e puesto la tabla porque es un lio  :rolleyes:

Todas las relaciones son 1:N con FK.

Empiezo a explicar:

Amarillo superior:
es un sistema de noticias con comentarios, una tabla de noticias y otra de comentarios.
la tabla secciones es porque habrá varias páginas que usen el sistema de noticias, entonces con esa tabla me ahorro hacer varias tablas iguales.
(el web_ es solo un prefijo para distinguir de smf)

Azul:

es una area de consultas, sigue un sistema casi igual que el de las noticias.
la tabla de secciones se refiere al area de consulta que se hará.
ejemplo: sección: informatica; sección:medio ambiente, etc

Verde pequeño:
Es una bd que solo linka con el responsable de la ong.
Contiene una descripcion y esas cosas xD

verde grande:
es un sistema de peticiones de oración [ok si no creen me da igual, de que trata la web no es el caso  :silbar: :silbar:] y mas abajo otro sistema de noticias.
El sistema de noticias solo varia en los otros que se guardan noticias para todo tipo de users-visitantes y noticias de ambito privado (un grupo concreto de users).

El sistema de oración es lo mas complicado de toda la web creo yo, lo explico mas o menos:

Contamos con un responsable de país (un admin), responsable de Comunida autonoma, provincia, comarca y ciudad.
Bien, a los usuarios se les presentan los datos según los datos que dieron de donde son y cuando envian una petición esta se envia al responsable directo (lease el de ciudad), si el de ciudad cree que es una peticion de caracter comarcal la envia a su superior (el responsable de comarca).
Para eso habia pensado usar el campo de "relevancia" cuanto mas alto mas arriba busca en la bd, pero aun no lo tengo del todo claro....
el resto son categorias de oracion y los votos.

Bueno también se pensó el crear un Top10 de las peticiones para cada zona.

Explico como va esa parte:

El responsable de una ciudad recive X peticiones de las cuales toma 10 como importantes, esas 10 se guardan en un top10 de su ciudad.
Esas mismas 10 se envian al responsable de comarca (las de todas las ciudades de la comarca), el responsable recive todas ellas y selecciona 10 que agrega al top 10 de la comarca, esas 10 se envian a la provincia y así hasta llegar al final.

Esa parte no se como diseñarla, así que si hay ideas son bien recibidas  :xD

Rosa:

Es como una red social, los usuarios se agregan a las categorias que les gustan en la pagina principal se listan las ultimas noticias de todas las redes y en cada red las noticias de esa red.

Amarillo abajo:

es una zona de indignados, ejemplo: estoy indignado "porque el pan es caro"  ;-)

entonces hay ciertas tematicas (indignaciones politicas, de familia, dinero... etc)
y la gente puede comentarlas y votar por ellas.


y eso es todo!
el modlog es un log de las acciones de los mod's
y la papelera no es mas que eso  :o

el id_mod también linka con la tabla de usuarios smf, pero en estos casos le id_mod suele ser quien acepta los comentarios que requieren moderacion

Este es mi segundo diseño de una bd tan grande así que no me maten!!! el primero fue al finalizar el FP I... y espero ancioso el FP II el año que viene para poder darle mas caña al mysql...
si hay grandes catastrofes en el diseño me pegan un poco y lo corrijo  :o

Desde ya mis mas sinceras gracias por el simple hecho de leer esto.
Y si amportan alguna idea será bien recibida y valorada.

Cualquier dato extra que necesiten haganmelo saber!

saludos
nax


En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: necesito opinión e ideas sobre mi base de datos
« Respuesta #1 en: 6 Enero 2010, 13:59 pm »

1 - No existe foreign keys en tablas Myisam es un motor no transaccional
(Si quieres controlar las actualizaciones, eliminaciones de una tabla padre a una tabla hijo, requeriras apoyarte
en la creacion de TRIGGERS)

2 - En la sección Amarilla Superior, donde hace mencion a Noticias & Comentarios. En relacion al campo 'hora'
si realmente vas a guardar una hora te convendria el tipo de dato TIME en vez de INTEGER, ya que supongo la hora
sera colocada tipo '03:00:20' por ejemplo, y el tipo INTEGER espera valores enteros (sin puntos).
O si prefieres puedes dar uso del tipo de dato TIMESTAMP en el campo hora, asi de manera automatica cada vez que
un usuario postee algo, se publicara de manera automatica la fecha y hora (Del servidor en cuestion) dentro del campo hora sin que tu particularmente
tengas que llevar control de esto.

3 - Recuerda que el tipo de dato TEXT y VARCHAR tienen la misma capacidad de almacenamiento de caracteres
(Siempre y cuando tengas un servidor MySQL superior a la version 5.0.3) la diferencia me parece es que
VARCHAR puedes controlar la cantidad de caracteres que recibira especificandole un tamanio de almacenamiento
(Por ejemplo VARCHAR(65,400)) Esto soportara 65,400 caracteres maximo. En cambio el tipo de dato TEXT no
puedes indicarle de forma manual el maximo de caracteres a soportar (Aunque TEXT como VARCHAR tiene un maximo
de 65,500 caracteres me parece ) No puedes especificarselo manualmente, el control del maximo del tipo TEXT
lo controla una variable dentro del archivo de configuracion de MySQL llamada 'max_allowed_packet' si esta
variable dice que el maximo son por ejemplo 20,000 bytes, aun TEXT teniendo capacidad de soporte de 65,500
el hara caso a la variable anterior, por ende no podran insertarse mas de 20,000 caracteres maximo (si hay mas
seran truncados tu sabes). Por lo tanto si vas a alojar tu proyecto en un servidor compartido o similar,
y decides seguir dando uso del tipo TEXT averigua el maximo de esta variable, para que no te lleves una sorpresa
nada agradable. (Tampoco te recomiendo usar MEDIUMTEXT por ejemplo, consume mas bytes en memoria que VARCHAR,
y VARCHAR sigue soportando un poco mas de 65,000 caracteres).

4 - Espero que estes consciente que aunque coloques un limite de almacenamiento en los tipos de datos
numericos (TINYINT, INTEGER, etc) esto no implica que el maximo de numeros que se puedan insertar son
los que indiques al declarar el almacenamiento... por ejemplo, si tu creas un campo asi:

NUMERO INTEGER(3)

Por ejemplo, esto no indica bajo ningun concepto, que el campo NUMERO solo te acceptara cifras de 3 numeros
ni tampoco va a truncar y dejar 3 numeros si tu insertas por ejemplo '12450'. Dicho campo acceptara sin mucho
inconveniente la insercion de 12450 y no lo truncara, ya que la especificacion de almacenamiento se refleja
hacia cuantos datos se van a mostrar en la aplicacion (ya sea web, o una aplicacion grafica) es ahi que se van
a mostrar 3 numeros, no que el campo como tal solo va a recibir 3 numeros y lo otro a truncar, el campo recibira
siempre la cantidad inferior de su maximo total sin problema alguno.


Seguramente, habran tablas que podran obviarse utilizar para ahorrarle al motor la busquedad y verificacion
en una tercera tabla de algun dato que podrias relacionar en 2 tablas.. pero, como yo particularmente desconozco
de que va el proyecto lol.. no puedo especificarte que se puede poner o que se puede quitar. Pero haz hecho
buen intento y es lo que vale ;)  recuerdate dar uso del EXPLAIN en cada consulta que vayas a realizar
para que sepas cuales estan mas cercanas a una buena optimizacion (digo cercana no exacta porque EXPLAIN se
base en estadisticas no en hechos reales) pero tendras una buena aproximacion.

Si te vas a inclinar por tablas Myisam nada mas, y tienes facilidad de modificar my.cnf o my.ini
recuerda al menos darle 256MB de ram a la variable 'key_buffer' (que seria el espacio compartido
que le estarias otorgando a todos los indices de todas tus tablas Myisam en memoria) o si quieres manipularlo
de forma mejor, puedes otorgarle a cada indice de cada tabla su propio espacio independiente en memoria ram...
si te interesa saber como en MySQL solo avisame ;)


En línea

N4X

Desconectado Desconectado

Mensajes: 74



Ver Perfil WWW
Re: necesito opinión e ideas sobre mi base de datos
« Respuesta #2 en: 6 Enero 2010, 16:46 pm »

gracias por tu respuesta  ;D

en parte habia leido respuestas tuyas por el area y me parecieron muy bien explicadas.

Ahora... en mySQL soy un verdadero desastre  :o pero me informaré de lo que dices!!!

1. TRIGGERS no se que son xD pero ahora lo busco.

El tema principal es que estoy integrando la web a SMF y por tanto.. ellos usan myisam pero yo siempre e trabajado con innoDB. Entonces las FK las uso muchisimo... si logro entender los triggers usaré eso xD
Pero abria algun problema en mesclar tablas innodb con myisam?

2. Eso lo pensé, pero como SMF usaba un integer y luego la convertia.. no se... quise dejarlo así.. que tal se lleva el campo timestamp con las comparaciones? para, por ejemplo, ordenar los comentarios de una noticia por la hora y no por el id.

3. lo tendré en cuenta, muchas gracias

4. bien, no era conciente... pero donde hay un integer(3) me parece que son las categorias que como un id muy alto espero se inserte un 99 y no mucho mas...
de todas formas lo tendré en cuenta en cuanto haga la revisión.


muchas gracias por el soporte.

felices reyes  ;D
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: necesito opinión e ideas sobre mi base de datos
« Respuesta #3 en: 6 Enero 2010, 17:35 pm »

1- TRIGGERS, los conocidos disipadores, digamos que son atributos o condiciones que se aplican a una tabla antes o despues que se realiza una transaccion en esta.

2 - No hay ningun problema en usar InnoDB con Myisam, pero recuerda que Myisam es un motor no transaccional y InnoDB si, con esto te digo que InnoDB a pesar de las ventajas que posee, tiene desventajas como que ocupa mas espacio en disco, consume mas RAM fisica, entre otras cositas que posiblemente no te preocupen sino son muchas tablas ya que asumo quieres cuidar la integridad de tus datos.

4 - Si estas consciente que el ID mas alto de un campo no va a sobrepasar de el numero 127 deberias en lugar de INTEGER usar TINYINT ya que TINYINT ocupa menos espacio de disco y controla que la data no sea mayor de la cifra 127. Ya que INTEGER(3) no va a controlar la cantidad que entre, INTEGER acceptara cualquier valor insertado hasta su maxima capacidad.

PD: Se me habia olvidado lol... no hay ningun problema con el tipo de dato TIMESTAMP y el metodo de ordenacion con ORDER BY puedes darle uso sin problema alguno  ;)
« Última modificación: 6 Enero 2010, 17:52 pm por ^TiFa^ » En línea

N4X

Desconectado Desconectado

Mensajes: 74



Ver Perfil WWW
Re: necesito opinión e ideas sobre mi base de datos
« Respuesta #4 en: 7 Enero 2010, 23:40 pm »

muchas gracias ^Tifa^, a partir de estos consejos trabajaré en los cambios al llegar a casa y si no hay problema dejo un nuevo modelo y me lo comentas  :xD

no me agrada la idea de mezclar myisam con innodb, se que este ultimo ofrece mayor integridad y por tanto es mas lento y ocupa mas...

simpre e trabajado con innodb pero mezclar las tablas SMF myisam con las de mi proyecto innodb.. no me convence... así y todo estarian linkadas solo mediante los usuarios y en teoria no deberia haber mayores problemas... veré como lo hago

lo de los integers ok, los cambiaré por tinyint en aquellos valores que creo serán escasos. de todas formas estudiaré algunos que, posiblemente, podrian superar los 127.

el tema de timestamp, bueno aun tengo la duda de en que formato se guarda y como puedo ponerlo en formato españa. Pero bueno, a base de tocar y provar, cuando llegue a casa lo confirmaré.
Si funciona como lo esperado ahorrará bastante trabajo en el php en cuanto a conversiones y demás.

muchas gracias por el tiempo otorgado.

un saludo
n4x
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: necesito opinión e ideas sobre mi base de datos
« Respuesta #5 en: 8 Enero 2010, 00:49 am »

Gracias N4X

me agrada que te guste mucho todo el tema relacionado a optimizacion. En el caso de Base de datos el resumen es tan extenso que yo misma no lo conozco 100%  ;D  pero trato de conocer lo mas que pueda.

Sobre mezclar tablas Myisam con InnoDB no es que exista un problema a gran escala, pueden convivir juntas pero, habran cosas que deberas analizar el triple si vas a dar uso de estas dos o mas, por ejemplo dividir la distribucion de la RAM fisica entre la cache buffer de InnoDB (Que lo usa para guardar indice y data) y la cache buffer de Myisam (Que lo usa unicamente para guardar los indices... la data se la deja el motor para que la guarde el sistema operativo en su cache). Entonces a la hora de dividir la ram para el motor tienes que analizar muy bien como lo haces (Si es con 1 solo motor es mas comodo porque de antemano solo deberas trabajar 1 sola vez) Entre otras cositas como el sistema de bloqueo que tiene cada motor de almacenamiento... pero no hay que extenderse demasiado.

Generalmente lo que yo suelo hacer, para no mezclar motores y no mortificarme dividiendo la ram fisica y los segmentos de area compartida del SO, tengo un Mysql maestro con todas las tablas InnoDB y un Mysql esclavo con las mismas tablas pero en Myisam, y todas las inserciones de datos se hacen al Maestro (para proteger la integridad de los datos) y la solicitud de dichos datos (SELECT) se hacen al esclavo.  ;) Asi le sacas el mayor provecho que tiene el motor Myisam que es ser rapido con la lectura y aprovechas InnoDB para hacer las inserciones y proteger a mayor nivel tu data  :D y asi de igual manera configuras Myisam para sacar mayor ventaja de la ram para su buffer y a InnoDB por su otro lado su ventaja para su buffer. (Es que InnoDB por recomendacion requeriria 80% de tu ram fisica para distribuirla en sus segmentos, buffers, procesos etc, en cambio Myisam con un 50% de tu ram fisica podria ser manejable...) Aunque todo depende el exceso de trabajo que se le monte a la DB.

Pero para hacer lo anterior requeririas de 2 servidores, uno para que sirva de Mysql maestro y otro para que sirva de Mysql esclavo... dicho esclavo puede ser un PC remoto no importa.

Sobre TIMESTAMP no se en que formato lo querras convertir, hasta lo que me concierne Mysql al menos en sistemas Unixes y Linux lo maneja en modo UTC. Mira un ejemplo de una tabla y un campo fecha con tipo de dato TIMESTAMP

Código
  1.  
  2. mysql> DESCRIBE ejemplo;
  3. +-------+-----------+------+-----+-------------------+-----------------------------+
  4. | FIELD | TYPE      | NULL | KEY | DEFAULT           | Extra                       |
  5. +-------+-----------+------+-----+-------------------+-----------------------------+
  6. | fecha | TIMESTAMP | NO   |     | CURRENT_TIMESTAMP | ON UPDATE CURRENT_TIMESTAMP |
  7. +-------+-----------+------+-----+-------------------+-----------------------------+
  8. 1 ROW IN SET (0.00 sec)                                                            
  9.  
  10. mysql> INSERT INTO ejemplo VALUES(NULL);
  11. Query OK, 1 ROW affected (0.00 sec)    
  12.  
  13. mysql> INSERT INTO ejemplo VALUES(NULL);
  14. Query OK, 1 ROW affected (0.00 sec)    
  15.  
  16. mysql> INSERT INTO ejemplo VALUES(NULL);
  17. Query OK, 1 ROW affected (0.00 sec)    
  18.  
  19. mysql> SELECT * FROM ejemplo;
  20. +---------------------+      
  21. | fecha               |      
  22. +---------------------+      
  23. | 2010-01-07 19:22:02 |      
  24. | 2010-01-07 19:22:34 |      
  25. | 2010-01-07 19:23:16 |      
  26. +---------------------+      
  27. 3 ROWS IN SET (0.00 sec)    
  28.  
  29. mysql> INSERT INTO ejemplo VALUES('2010-01-07');
  30. Query OK, 1 ROW affected (0.00 sec)            
  31.  
  32. mysql> SELECT * FROM ejemplo;
  33. +---------------------+
  34. | fecha               |
  35. +---------------------+
  36. | 2010-01-07 19:22:02 |
  37. | 2010-01-07 19:22:34 |
  38. | 2010-01-07 19:23:16 |
  39. | 2010-01-07 00:00:00 |
  40. +---------------------+
  41.  
  42.  

Si le insertas la fecha lo mas que hara es no colocarle los segundos, pero si insertan null se colocara la fecha junto a hora y segundos (acorde al reloj del sistema operativo)
En línea

N4X

Desconectado Desconectado

Mensajes: 74



Ver Perfil WWW
Re: necesito opinión e ideas sobre mi base de datos
« Respuesta #6 en: 12 Enero 2010, 17:11 pm »

lo de los 2 servidores dejemoslo por imposible, de momento,  :rolleyes:

gracias por la muestra del timestamp, trabaja como me imaginé asi que creo que lo usaré para un funcionamiento mas optimo y menos engorroso.



anoche seguia dandole vueltas a la región_03 en la imagen (verde inferior).
es la mas importante así que voy a explicarla un poco mejor para que se entienda lo que quiero hacer y a ver si se les ocurren mejoras.

pero antes:
la tabla web_oracion_news y web_news se diferencian de 1 solo campo: public (tinyint)
e estado pensando en fusionar ambas tablas y con ello me quito 2 tablas de encima
y el campo public situarlo como boolean y en posibilidad de nulo. ya que solo seria usado en la categoria 'oracion'.
(las news de las redes las dejo tal cual, prefiero que sean tablas separadas, por un tema de frecuencia de uso).


Entonces paso a explicar dicha región, el tema noticias lo salto, sino en el tema pedidos oración y demás.

podriamos imaginar que es una empresa. y en la empresa se envian diferentes circulares.
La empresa tiene un representante en cada pueblo de españa. Un representante en cada comarca, uno en cada provincia, etc.

si un miembro del pueblo 'reus' quiere enviar una circular, el responsable de ese pueblo la revisa y la envia.

El responsable puede hacer 2 cosas:
1- Enviar la circular a reus.
2- Considerar que la circular puede ser de interes a la comarca, y por tal caso enviarla al responsable comarcal

el responsable comarcal la recibe y puede hacer las 2 acciones anteriores, enviarla a toda la comarca, o enviarla a su superior directo.

para esta parte del planteamiento yo pense, en un principio, el campo relevancia de la tabla web_oracion. cuando la petición se envia a la ciudad tiene relevancia 1, si el responsable la envia a la comarca adquiere relevancia 2, etc...

sigo:
una vez se hace el tramite de las circulares, cada responsable de ciudad, elige las 10 mas divertidas  ;-)
y esas 10 se publican en un top 10.
A la vez que las elige y publica, esas 10 se envian al responsable de comarca (junto con todo el resto de top10 de ciudades que pertenecen a esa comarca).

El responsable comarcal recive todos los top10 de cada ciudad, y elige las 10 que mas gracia le causaron... y las publica y las envia a su superior. etc

para esta parte (que aun no tengo tablas) pensé en crear una tabla top10 para ciudad, otra para comarca, etc.
relacionando el top 10 con el id de ciudad, para la tabla top10_ciudad.

la tabla top10_ciudad contendria algo así:

table: top10_ciudad
rows: id_top id_ciudad id_peticion posicion
          int       int            int               int (de 1 a 10)

y eso es todo creo...
mi preocupación mas grande viene con el tema relevancia.. pues el método no me convence mucho...
podria agregar a web_oracion una columna para cada id...
ejemplo id_ciudad id_comarca etc...

con posibilidad de null, si la id_ciudad es 1 pero la id_comarca es null quiere decir que tiene relevancia de ciudad, si la id_comarca es 3 es de relevancia comarcal..

pero no se si tendria que relacionar todas las tablas de ciudades, comarcas, etc a la tabla principal (web_oracion) o de la manera que está ahora podria hacerlo sin problemas...

el tema es que si es este ultimo caso, creo que la metodologia es igual que la de 'relevancia'  :rolleyes: :-X

alguna idea :huh:  :)

gracias por toda la ayuda  ;)

pd. vaya post mas pesado me a quedado! mis disculpas!  :laugh: :xD
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: necesito opinión e ideas sobre mi base de datos
« Respuesta #7 en: 12 Enero 2010, 20:01 pm »

Hola N4X.

De antemano te habia hecho la sugerencia que efectivamente hay tablas que se pueden reducir o compenetrar con otra. Pero no puedo especificarte de antemano cuales serian porque aunque te explicas (disculpa que aun no entienda 100% del todo tu aplicacion final).

Es relativo separar o dejar 1 sola tabla con muchos campos y separarse de la normalizacion de datos. Aveces si es mas efectivo desnormalizar una tabla para optimizar tu aplicacion ya que para el motor es mucho mejor y mas rapido acceder a la data dentro de una sola tabla que conseguir una data buscando en 2,3,4 o mas tablas, tu entenderas que para una aplicacion de gran tamano (digase miles o millones de registros) es mas forsozo para el motor tener que sacar varios registros de un JOIN de 2 o 3 o mas tablas, pero si esos miles o millones estuviesen en 1 sola tabla todos, el proceso es mas rapido. Pero aunque algunas veces es bueno apoyarse en la desnormalizacion no te fies siempre de ello.. ya que desnormalizar implica tener logs, datafiles mucho mas grandes en un solo archivo no distribuido en varios archivos como si tuvieramos normalizacion.. entre otras cosas. Tu conoces el tipo de proyecto que debes realizar si es un proyecto pequeno o mediano-pequeno, puedes darte el permiso de desnormalizar algunas tablas para optimizar, pero procura elegir tablas que tu sepas que en un futuro no va a afectar los registros que tengas dentro por alguna actualizacion que debas hacer, que esto no afecte la relacion.

Ahora, sobre considerar los valores NULL en los campos no te lo recomendaria ni en modelo normalizado ni desnormalizado. La razon? recuerda que NULL no es un tipo de dato es nada.. vacio, nisiquiera es 0 o espacio vacio es nada. Sin embargo todos los campos que tu declaras en un motor de DB tienen un tipo (integer, char, varchar, text, etc) cuando tu creas un campo y le asignas un tipo de dato, le estas diciendo al motor que cuando reciba un registro reserve memoria para ese tipo de dato recibido (sea texto, numero, decimales, fechas, etc) pero si tu ingresas un dato NULL cuando el motor reserva memoria para un INTEGER por ejemplo.. a la hora que haces una consulta a una tabla donde existe ese NULL por ejemplo, el motor cuando llegue al registro donde existe ese NULL se detendra unos segundos a analizar que realmente en ese espacio reservado hay un valor NULO cuando el esperaba encontrar un INTEGER, despues que el analiza esto entonces sigue su recorrido.

Es como por ejemplo, que yo tenga 20 botellas de plastico para guardar agua y te diga N4X sal de este departamento pero antes de que tu salgas verificame de las 20 botellas cuales tienen agua, y tu pasas caminando vas con los pies tentando y sabes que tienen agua sigues de largo, pero de repente si toqueteas una y la sientes liviana te detendras unos segundos al menos para verificar que dicha botella no tiene agua... esta vacia, asi mas o menos reacciona el motor.

Toma eso en cuenta, coloca cualquier valor ya sea 'espacio' o cero pero no consideres los nulos.

Otra cosa si tu de antemano sabes, que llegara un punto donde deberas relacionar todas las tablas a traves de 1 tabla padre, ve considerando agregar 1 indice que contenga el mismo valor y relacione todas las tablas que sospechas llegara un punto que se van a relacionar.
En línea

N4X

Desconectado Desconectado

Mensajes: 74



Ver Perfil WWW
Re: necesito opinión e ideas sobre mi base de datos
« Respuesta #8 en: 12 Enero 2010, 22:02 pm »

entiendo que no se entienda (valga la redundancia  :rolleyes:)

si bien en el equipo nos vemos una ves a la semana en algun lugar y nos podemos pasar 6 horas hablando del tema y no siempre llegamos a algo xD

así que es normal que no puedas dar tu total opinión del proyecto.. pero si te queda duda de algo.. asmelo saber.

el campo null lo descarto entonces y usaré un valor cualquiera para hacer referencia a un nulo (como el 0 que en php evalua null :D)

así es como lo tengo con los top10.

http://img15.imageshack.us/img15/2834/dibujovai.jpg

si tuviera que poner un campo para ciudad, comunidad, etc... eso ya seria un desmadre de relaciones!!! (solo lo puse a modo de ejemplo en ciudad)

me e equivocado en algo?  :rolleyes: :rolleyes: :rolleyes: :o
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: necesito opinión e ideas sobre mi base de datos
« Respuesta #9 en: 13 Enero 2010, 01:25 am »

SI mas o menos entiendo tu punto en no querer tener tantos datos relevantes y repetidos cuando haces referencia a una misma cosa exceptuando 1 solo campo en la tabla que uses de relacion.

Tu dices que hay 1 representante por cada pais, y que hay 1 representante por cada provincia de cada pais, y que hay 1 comarca (que no se que es esto) que es el que recibe la informacion top10 por parte del representante de un pais, no sin antes este representante recibir todas las circulares de todos los representantes de cada provincia? Lol eso es lo que entiendo  :xD

Seria algo como:

Tabla_rep_provincia  --> Tabla_rep_pais --> Tabla_Comarca --> Tabla_top10

Seria mas o menos asi la relacion??? o sea la info pasa primero al representante de la provincia, luego pasa al representante de dicho pais, luego pasa al Comarca y finalmente pasa a una tabla top10? 

Sobre tu imagen mostrada, y de antemano puedo decirte una completa ignorancia y mal consejo porque no capto en su totalidad que estas buscando lograr. A simple vista no podria ser las tablas:

web_oracion_pais_t10
web_oracion_cat_10
web_oracion_provincia_t10

Una sola tabla? lo mismo expreso y pregunto para las tablas superiores:

web_oracion_pais
web_oracion_ca
web_oracion_provincia

No podrian ser una sola tabla? digo analizalo sino te afecta las relaciones en algun punto. Hay varias maneras de relacionar entidades, de forma desglosada como la tienes actualmente (Y mas entendible para cualquier DBA futuro) o de manera conjunta (La cual yo utilizo bastante para evitarle al motor tantos recorridos y perdida de tiempo al optimizador interno  :xD)
Pero no te digo que sea lo mas recomendable, a mi me gusta porque me gusta ahorrar trabajo al motor y porque yo de antemano se donde puede o no afectarme una relacion de entidades si mezclo tablas, pero en tu caso me queda un poco lejano porque aun no tengo la idea clara del escenario que compone los datos de tus tablas.

Pero dime si no es posible juntar esas tablas mencionadas anteriormente y porque.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Necesito muchas ideas sobre los usos de punteros y clases.
Programación C/C++
anonimo12121 2 2,123 Último mensaje 5 Marzo 2011, 20:03 pm
por anonimo12121
Necesito estresar una base de datos al punto de corromperla
Hacking
Bud4 2 3,996 Último mensaje 1 Marzo 2012, 22:43 pm
por tragantras
Opinion sobre estructura de datos
Dudas Generales
cefagure 6 4,874 Último mensaje 11 Julio 2015, 15:17 pm
por MinusFour
sobre base datos
Dudas Generales
Raulhispano 1 1,887 Último mensaje 4 Enero 2020, 01:44 am
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines