Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ^Tifa^

#521
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.
#522
Bases de Datos / Re: Consulta Ultimos mensajes
12 Enero 2010, 19:35 PM
De nada Ari. Si es la primera opcion que te propuse lo que estas solicitando entonces si.. tienes alguito que restructurar con tu codigo y MySQL  :xD si es lo segundo propuesto por mi o N4X iras bien 1 sola linea de consulta SQL.

Un saludito  :D
#523
Bases de Datos / Re: Consulta Ultimos mensajes
12 Enero 2010, 19:21 PM
Tomar los 10 ultimos siempre de todos los registros de la tabla??? se haria asi por ejemplo no seria problema, pero vas a tener que aprender a jugar con el contador  ;)  me explico, observa este ejemplo.

Tengo 8 registros en 1 campo de una tabla ejemplo:

Código (sql) [Seleccionar]


mysql> select * from ejemplo;
+---------+
| palabra |
+---------+
| Coco    |
| Mango   |
| Pera    |
| Uva     |
| Fresa   |
| Manzana |
| Melon   |
| Sandia  |
+---------+
8 rows in set (0.02 sec)



Y yo quiero por ejemplo los 2 ultimos (Melon & Sandia) entonces:

Código (sql) [Seleccionar]


mysql> select * from ejemplo limit 6,8;
+---------+
| palabra |
+---------+
| Melon   |
| Sandia  |
+---------+
2 rows in set (0.00 sec)




Ahora quiero no esos 2 ultimos sino los antepenultimos... entonces haria:

Código (sql) [Seleccionar]


mysql> select * from ejemplo limit 4,7;
+---------+
| palabra |
+---------+
| Fresa   |
| Manzana |
| Melon   |
| Sandia  |
+---------+
4 rows in set (0.00 sec)

mysql> select * from ejemplo limit 1,3;
+---------+
| palabra |
+---------+
| Mango   |
| Pera    |
| Uva     |
+---------+
3 rows in set (0.00 sec)




Vas entendiendo como va muchacho  :D  juega con tu contador o bucle  ;) para ir obteniendo los 10 ultimos y los 10 antepenultimos y asi sucesivamente.

Ahora si es solo tomar los 10 ultimos de todos los registros de la tabla 1 sola vez, pues:

SELECT * FROM TABLA ORDER BY fecha DESC LIMIT 10;
#524
Ejercicios / Re: Juego ejercicios [Python]
11 Enero 2010, 00:09 AM
Pues nada escanear servidores web con puerto 80 mediante 1 rango de IP estaticas.

Código (python) [Seleccionar]


import httplib, socket

class Escaneo:
  def __init__(self, parametro):
    self.valor = parametro

  def Scan(self):
    try:
      for b in range(len(self.valor)):
connecion = httplib.HTTPConnection(self.valor[b], 80, timeout=2)
connecion.request("GET", "/index.html")
r = connecion.getresponse()
print(self.valor[b],r.getheader('Server'))
       
    except Exception:
print("No existe el servidor :: ", self.valor[b])
    finally:
connecion.close()

class Validacion:
  def Valida(self, parametro1):
    param1 = parametro1.split('/')

    for a in range(len(param1)):
      try:
socket.inet_aton(param1[a])
Objecto1 = Escaneo(param1)
Objecto1.Scan()

      except socket.error:
print("Rango de IP insertado es Incorrecto :: ", param1[a])

ip=raw_input("Inserta rango de IP ex:( 200.55.4.1/190.4 ) ::  ")
Objeto = Validacion()
Objeto.Valida(ip)


Citarbash-3.1$ python perla.py
Inserta rango de IP ex:( 200.55.4.1/190.4 ) ::  127.0.0.1/190.56.7.8/19c.56.7.1
('127.0.0.1', 'Apache/2.2.13 (Unix) DAV/2')
('No existe el servidor :: ', '190.56.7.8')
('127.0.0.1', 'Apache/2.2.13 (Unix) DAV/2')
('No existe el servidor :: ', '190.56.7.8')
('Rango de IP insertado es Incorrecto :: ', '19c.56.7.1')


No tengo cabeza para los numeros... si idealizan algo que no incluya numeros estare mas feliz
#525
Scripting / Re: Calculadora Python
9 Enero 2010, 19:16 PM
Ultimamente me ha agradado bastante la POO de python

Mi calculadora (un poco mas extensa pero es POO y validaciones)

Código (python) [Seleccionar]


#!/usr/bin/python

class Calculadora:
  def __init__(self, uno, dos):
    self.numero = uno
    self.numerito = dos

  def Suma(self):
    print "La suma de los 2 numeros es :: ", (self.numero+self.numerito)

  def Resta(self):
    print "La resta de los 2 numeros es :: ", (self.numero-self.numerito)

  def Multiplicacion(self):
    print "La multiplicacion de los 2 numeros es :: ", (self.numero*self.numerito)

  def Division(self):
    try:
      print("La division de los 2 numeros es  ", (self.numero/self.numerito))
    except Exception:
      print("No se puede dividir con cero!\n")

  def __del__(self):
    self.numero = None
    self.numerito = None

try:

  primero=int(raw_input("inserta un Numero :: "))
  segundo=int(raw_input("Inserta otro Numero :: "))

  Objeto=Calculadora(primero,segundo)

  try:
    opcion=int(input("Desea\n1 - Sumar\n2 - Restar\n3 - Nultiplicar\n4 - Dividir\n"))
    if (opcion == 1):
Objeto.Suma()
    elif (opcion == 2):
Objeto.Resta()
    elif (opcion == 3):
Objeto.Multiplicacion()
    elif (opcion == 4):
Objeto.Division()
    else:
print("Debes elegir o uno o dos\n")

  except Exception:
      print "Debes Insertar un numero!"

except Exception:

  print "Debes Insertar solamente Numeros!\n"

#526
leliCabello, de verdad fuese agradable ayudarte, pero estas solicitando que te estructuren y armen un diseno entidad-relacion de una base de datos cuando es un tema la verdad bastante extenso de exponer en 1 o 2 lineas. Podemos darte una referencia de ayuda en preguntas claves que hagas, pero resulta un poco imposible exponerte todo lo que debes hacer y dartelo... si hacemos eso perfecto pasarias dicha materia (Si se trata de una tarea) pero estarias pasando una materia con un vacio porque no sabrias porque todo esta hecho de esa manera, y mas adelante cuando te topes con una materia futura que use de prerequisito esta que estas tomando ahora, y tu tutor vea que no manejas bien el diseno de una base de datos vas a tener problemas.

ALgunos puntos de referencia hare en cuanto a las 3 tablas expuestas por ti y los campos que elegiste como primary key y definiste una tabla padre-hijo mediante una foranea. Ok, pero explicame algo:

Primary Key de la tabla Recepcionista: (cod_recepcionista)
Primary Key de la tabla Llamadas: (cod_llamadas)

Donde segun tu afirmacion hay una foreign key aca, asumire que la foreign key es cod_llamadas hacia cod_recepcionista. Si esto es asi, ten pendiente que al ambos campos ser Primary Key no pueden repetirse jamas, por ende si cod_recepcionista = 1 (por ejemplo)
entonces cod_llamadas = 1 tambien, Por ende la recepcionista 1 solo podra recibir 1 sola llamada con codigo 1 y mas nunca podra recibir mas llamadas solo una, una sola entrante para la recepcionista con cod_recepcionista = 1..... Entonces como haras la relacion futura?? Digamos que la recepcionista del codigo 1 trabaja todos los dias recibiendo llamadas entrantes desde las 8:00 am hasta las 3:00 pm.... como llenaras este campo (la de la tabla hijo cod_llamadas) si basandote en la relacion :

cod_recepcionista --> cod_llamadas

si recepcionista es codigo 1 y codigo de llamadas debera ser 1 tambien... pero resulta que cod_llamadas es una primary key no se puede repetir valores...

En resumidas ve considerando agregar una llave secundaria a la tabla Llamadas para que hagas la relacion 1:N (Ya que una recepcionista va a recibir muchas llamadas).

Segundo punto, Llamadas y Clientes en que punto se relacionan???  Tendras que elegir 1 llave candidata que sea la que relacione las 3 tablas... podria ser por ejemplo cod_recepcionista.

#527
Quisieramos ayudarte... pero me temo que sin el analisis previo poco se puede hacer  :huh:  uno de antemano puede imaginarse y mas o menos suponer las entidades y relacion entre las llamadas y un empleado (Como el ejemplo expuesto por Shell Root) pero todo va a depender bastante de la organizacion que lleve X empresa para entonces tu hacer tu analisis y estructurar tus tablas...

Pero, basandome en el ejemplo expuesto por Shell Root en sus tablas. No te olvides de colocar un campo de TIMESTAMP en las tablas donde se guarden las llamadas entrantes, asi se colocara la fecha y hora con segundos de manera automatica de X llamada entrante. (Desconozco si el tipo de dato TIMESTAMP existe en SQL Server, espero que si, sino es el caso tendras que buscar un tipo de dato similar pero en SQL Server o controlar esta informacion a traves de la aplicacion que reciba la llamada y que esta guarde ese dato en la DB)

Sobre cuantas llamadas se han registrado diariamente cada 24 horas en la o las tablas... bueno puedes crearte un evento o tarea programada dentro del motor (No se si SQL Server soporta esta funcionalidad ojala alguien aporte esta confirmacion, en caso que no lo soporte tendras que hacer algun BATCH como tarea programada cada 24 horas y que se conecte al motor SQL Server) y especifica que dicha tarea programada se ejecute cada 24 horas diariamente, asi cada 24 horas esa tarea programada hara una especie de SELECT COUNT(llamadas) y ese total que lo guarde en algun archivo de texto dentro del PC.

Lo anterior son solo ideas que podrias realizar que conste, no se puede abundar mucho si se desconoce a ciencia cierta el tipo de requerimientos que te piden y de que dispones.
#528
Perdoname de antemano que no comprenda tu pregunta del todo....

A que te refieres cuando dices nomemclatura??? a Esquemas (Sino sabes esquemas son digase distintas bases de datos en Oracle). Y en que sentido quieres manejar esto? conectarte? sacar que tipo de informacion??? que cosa?
#529
Bases de Datos / Re: HTTP CODE: 302!
8 Enero 2010, 19:27 PM
Vas a perdonarme por no poder ayudarte en ese punto con GET porque totalmente desconozco su funcionamiento interno o con quien se relaciona.

La siguiente afirmacion:

CitarRecuerdo que hace un tiempo tuve el mismo inconveniente y lei algo que se referia al dominio de la web, que al redireccionar a la localizacion exacta del servidor se perdian las variables largas mandadas por GET.

Es bastante similar a la funcionalidad que tiene la variable de MySQL 'max_allowed_packet' ya que el motor y el cliente MySQL se transfieren los datos mediante paquetes en un Buffer o similar, y si por alguna razon sobrepasas el limite maximo de data enviada (paquetes) de ese Buffer pos sencillamente se pierde toda la data.... (Si fuese la maxima cantidad soportada en el tipo de dato  la data fuera truncada pero no se perdiera toda completamente, sino tan solo una parte).

Pero tu mismo ya haz verificado que todo esta relacionado con GET y no con el motor DB en si. Posiblemente un webmaster tenga mas idea que yo en cuanto a los limites de GET como tal en un servidor.
#530
Bases de Datos / Re: HTTP CODE: 302!
8 Enero 2010, 13:30 PM
Pusha que pena A2Corp   :o  pero que bien que pudiste deducir finalmente cual era el inconveniente. Aunque en otros casos suele influir la variable que menciono pero solo para el motor DB.

En tu caso, si ya dedujiste que el problema es el limite de GET y tu le envias una data mayor al limite... y no dispones por el momento de otro servidor con mas capacidad de GET, haz considerado no se, dividir la data que transfieres por GET antes de enviarla al servidor? A lo mejor si divides toda la data hasta el maximo soportado por GET se lo vas enviando por trozos haber si te lo accepta asi, en vez de enviarle todo junto y que te lo corte...

Es una sugerencia, no digo que vaya a funcionar.