Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Base de datos MySQL
#1
En mis ratos libres estoy haciendo un pequeño proyecto. Consiste en una base de datos MySQL, a la que accedo mediante una interfaz web para introducir y mostrar datos de unos usuarios.

Estoy en la fase de decidir cuál es la estructura óptima de los datos que quiero introducir, y tengo una duda:

En la tabla de los usuarios, cada fila es un usuario, y entre otros datos, quiero introducir unos teléfonos. Algunos usuarios tendrán un único teléfono, y otros tendrán varios. Algo así:

Teléfono de Pepe Pepéz escribió:900111222 Teléfono de casa

Teléfonos de Paco Pacopaco escribió:911222333 Teléfono de casa
922333444 Teléfono del trabajo
666777888 Móvil personal
677888000 Móvil de su primo Miguelete
etc.

Así que tengo unos pares de números-descripción, en cantidad variable, que quiero introducir en mi base de datos. Mi duda es: ¿cómo los meto? ¿Creo varios pares de columnas nº_de_teléfono - descripción? ¿En un único campo de texto con un formato especial tipo "nº_de_teléfono1":"descripción1";"nº_de_teléfono2":"descripción2";etc.?

Me gustaría saber cómo están organizados los datos en los contactos de Gmail (donde puedes añadir pares de teléfono-etiqueta sin aparente límite).

¿Alguna idea, oh foreros del mal? Y ya que estamos, ¿conocéis algún otro sitio (foro/web de preguntas) para hacer preguntas como esta?


Gracias de piel de ante.
[Imagen: w5URIAL.png]
Responder
#2
Tabla telefonos (PK id, FK usr_id, tipo_telefono, telefono)

y ya en plan fisno, para tener en un combo los "tipos" de telefonos posibles cada vez que quieras meter uno:

Tabla tipo_telefonos (PK id, nombre_tipo_telefono)
Tabla telefonos (PK id, FK usr_id, FK tipo_telefono_id, telefono)

NPI como están en gmail, pero lo que pongo arriba es "legible"
[Imagen: e4jeCf8.png]





Responder
#3
MySQL es matar moscas a cañonazos creo yo.

Respecto a lo de Gmail dudo que nadie sepa la estructura interna con la que almacenan esa información en sus servidores. Lo que sí puedes hacer es descargar tus contactos en un bonito CSV que es lo que más se lleva últimamente para cosas pequeñas por la facilidad para manejarlos. Hay mogollón de cosas para trastear con las Google Spreadsheets.

Pero si quieres aprender MySQL específicamente puedes olvidarte de lo que he dicho.
[Imagen: h0FIGlU.png]
Responder
#4
MySQL=Mas bien matar moscas con pistolas de esas que caben en el liguero.
Para móviles y Android habia otra incluso mas ligera: sqlite, creo, pero nunca la use. En ese caso la estructura sería la misma.
[Imagen: e4jeCf8.png]





Responder
#5
Mysql es perfecto para empezar a trastear en el mundillo de las bases de datos. Te permite hacer animaladas que con otras DDBB más serias ni te podrías plantear.

En cuanto a lo de atomizar las tablas, Guibuu, dependerá de la flexibilidad que quieras tener. Puedes hacer una sola tabla monolítica del tipo:
1. INT Primary Key ID
2. VARCHAR (18) TELEFONO
3. VARCHAR (50) TIPO_TELEFONO
4. VARCHAR (256) NOMBRE
5. VARCHAR (256) DIRECCION
6...

O atomizar los datos que quieras flexibilizar.
Tabla Datos_principal
1. INT Primary Key ID
2. VARCHAR (256) NOMBRE
3. VARCHAR (256) DIRECCION
4...

Tabla Datos_telf
1. INT (Foreign Key) ID_principal
2. INT (Foreign Key) ID_tipo_telefono
3. VARCHAR (18) TELEFONO // <--- Podrías usar este campo incluso para meter emails

Tabla Tipo_telefono
1. INT Primary Key ID_tipo_telefono
2. VARCHAR (50) TIPO_TELEFONO

Y luego para recuperar

SELECT * FROM Datos_principal, Datos_telf, Tipo_telefono WHERE Datos_telf.ID_principal=Datos_principal.ID AND Tipo_telefono.ID_tipo_telefono=Datos_telf.ID_tipo_telefono

No sé si habría que poner un DISTINCT.

PD:
Otra opción, en vez de usar una macroconsulta, atomizarla en dos partes, por un lado un SELECT que te saque los datos de la tabla principal y luego, mediante programa, hacer SELECT de cada teléfono según cada ID principal.

Y otra opción es meter la tabla de tipos_telefono en una Hash y hacer un join sólo de la tabla principal y de la de teléfonos y sacar qué tipo es según los IDs de la base de datos y la Hash que has hecho al principio.

Hay mil maneras de hacer lo mismo...
[Imagen: YpRAA7X.png]
"Es como el que se mataba a pajas con U-jin y hoy en día o es Boku no Piko o ni se le levanta." - AniList
Responder
#6
¿Qué sentido tiene hacer una base de datos para introducir información personal y que está este un único campo? Ninguno. Crea una "columna" para cada dato de forma que si es necesario puedas trabajar con cada dato independientemente del resto, que para eso se crearon las bases de datos.
[Imagen: chicasdeincognito.png]
Responder
#7
(01-15-2013, 09:33 AM)Reboot escribió: Te permite hacer animaladas que con otras DDBB más serias ni te podrías plantear.

GUAT?
[Imagen: e4jeCf8.png]





Responder
#8
(01-15-2013, 09:52 AM)Yumichan escribió:
(01-15-2013, 09:33 AM)Reboot escribió: Te permite hacer animaladas que con otras DDBB más serias ni te podrías plantear.

GUAT?

Las mayores waltrapadas las he hecho con Mysql: Sudármela el orden del query, ni foreign key ni pollas, copiar tablas y bases de datos enteras a capón copiando los directorios donde se encuentran... Cosillas así lulz
[Imagen: YpRAA7X.png]
"Es como el que se mataba a pajas con U-jin y hoy en día o es Boku no Piko o ni se le levanta." - AniList
Responder
#9
Y eso no puede hacerse con... Icon_pato (es a lo que me referia)
[Imagen: e4jeCf8.png]





Responder
#10
Oracle o MSSQL. Que son pijas hasta decir basta. >_<

En Oracle, al menos las versiones que yo tuve en mis manos, como pusieras la query en un orden que no le molara a la DDBB, te montaba full scans por todas las tablas. Bendito TOAD.

Y MSSQL, sí que permite hacer alguna animalada, pero tiene las bases de datos monolíticas en un fichero y hay que usar su gestor para el tema de importaciones-exportaciones.
[Imagen: YpRAA7X.png]
"Es como el que se mataba a pajas con U-jin y hoy en día o es Boku no Piko o ni se le levanta." - AniList
Responder


Salto de foro:


Usuarios navegando en este tema: 3 invitado(s)