Base de datos con eficiencia?

Iniciado por #Aitor, 6 Marzo 2018, 01:54 AM

0 Miembros y 1 Visitante están viendo este tema.

#Aitor

Quisiera crear una base de datos relativamente simple, sin embargo creo que la manera en la que estoy enfocando la base de datos no es la mejor manera en cuánto a eficiencia.

Solo necesito el nombre de las personas, y un valor booleano, tal que así.



El problema está como se puede apreciar que necesito controlarlo para todas las fechas posibles. Mi idea sería crear un programa que preguntase si en la tabla existe X fecha, y sino existe crearla, sin embargo no lo veo eficiente, porque al cabo de un año tendré una tabla entera con 366 columnas. Sinceramente no tengo mucha idea de bases de datos, ¿hay alguna forma de evitarse este problema?
Mi algoritmo en PHP (estupideces y más).
Código (php) [Seleccionar]
while($Se_feliz){
  Piensa_un_OBJETIVO(); // Sin excusas!
  if($Tienes_un_objetivo){
    Suspira(); // Sé paciente.
    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
      //RETURN; ¿O volvemos a empezar?
    }else{
      Inténtalo_de_nuevo();
    }
  }
}

EFEX

No, no es buena practica agregar nuevas columnas, modificar la db puede corromperla si no sabes lo que haces, ademas el formato de tiempo(YYYY/MM/DD) no es bueno para definir una columna. Lo mejor seria crear otra tabla y relacionar los datos.

Código (sql) [Seleccionar]

id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
email VARCHAR(50)
);

CREATE TABLE attend (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT(6) UNSIGNED,                                        /* Lo relacionamos con el id del usuario */
date DATE
);


Y luego en nuestra consulta pedimos los datos ordenados como lo queramos..
Código (sql) [Seleccionar]

/* Obtener todas fechas y usuarios */
SELECT user.id, firstname, date
FROM attend
INNER JOIN user ON attend.user_id = user.id;



http://sqlfiddle.com/#!9/7307a7/1
GITHUB 

#Aitor

Cita de: EFEX en  6 Marzo 2018, 02:53 AM
No, no es buena practica agregar nuevas columnas, modificar la db puede corromperla si no sabes lo que haces, ademas el formato de tiempo(YYYY/MM/DD) no es bueno para definir una columna. Lo mejor seria crear otra tabla y relacionar los datos.

Código (sql) [Seleccionar]

id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
email VARCHAR(50)
);

CREATE TABLE attend (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT(6) UNSIGNED,                                        /* Lo relacionamos con el id del usuario */
date DATE
);


Y luego en nuestra consulta pedimos los datos ordenados como lo queramos..
Código (sql) [Seleccionar]

/* Obtener todas fechas y usuarios */
SELECT user.id, firstname, date
FROM attend
INNER JOIN user ON attend.user_id = user.id;



http://sqlfiddle.com/#!9/7307a7/1



Vale, tiene sentido, no sabía de la existencia de las relaciones...  ;-)

¡Muchas gracias!  :-*
Mi algoritmo en PHP (estupideces y más).
Código (php) [Seleccionar]
while($Se_feliz){
  Piensa_un_OBJETIVO(); // Sin excusas!
  if($Tienes_un_objetivo){
    Suspira(); // Sé paciente.
    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
      //RETURN; ¿O volvemos a empezar?
    }else{
      Inténtalo_de_nuevo();
    }
  }
}