MySQL - Problema lógico al crear una base de datos

 
Vista:
sin imagen de perfil

Problema lógico al crear una base de datos

Publicado por Alan (1 intervención) el 11/04/2017 05:02:28
Hola amigos programadores y entusiastas, soy nuevo en el foro y al mismo tiempo nuevo en casi todo lo referente a la programación.

Pero sin más que agregar tengo el siguiente problema:

Quiero crear una base de datos con la tabla periódica dividida en familias y según yo tengo lo siguiente:

1
2
3
4
5
6
7
8
9
CREATE TABLE Elemento(
	nombre VARCHAR(20) not null,
	simbolo CHAR(3) not null,
	numero_atomico INT not null,
	grupo_periodico INT,
	periodo INT not null,
	masa_molar DOUBLE not null,
	CONSTRAINT PRIMARY KEY(numero_atomico)
)

Mi problema radica que aunque yo siento que está bien lo que estoy haciendo no se como dividir por familias de elementos las tablas, que es lo que debería hacer?

Les agradecería mucho la ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Problema lógico al crear una base de datos

Publicado por leonardo_josue (414 intervenciones) el 11/04/2017 17:03:33
Hola Alan:

El modelado de una Base de Datos puede ser tan simple o tan complejo como tú lo decidas, ¿qué quiere decir esto? que no hay una "mejor" o "peor" forma, sino que simplemente son modelos distintos, sin embargo hay algunos puntos que debes tomar en cuenta.

Usualmente, cuando hablas de Modelos Entidad - Relación, (E-R) lo primero que debes reconocer son las "Entidades" o datos que te interesa modela... de acuerdo a lo que tú quieres hacer, de entrada se puede hablar de dos tipos de "entidades" o de información que te interesa: Los Elementos y las Familias.

Por lo tanto, esto de da las dos primeras tablas que debe tener tu modelo, es decir, por un lado debes tener una Entidad o Tabla que te almacene los ELEMENTOS(con todos los atributos que te interesen de ellos, peso, número atómico, Masa etc) y por otro lado tienes las FAMILIAS donde deberías también almacenar la información referente que te interesa... a manera de ejemplo podrías poner algo así:

Para los elementos;

1
2
3
4
5
6
7
8
9
10
11
+-----------+---------+---------+
|id_elemento|  nombre | simbolo |
+-----------+---------+---------+
|          1|HIDROGENO|	       H|
+-----------+---------+---------+
|          2|HELIO    |	      He|
+-----------+---------+---------+
|          3|LITIO    |	      Li|
+-----------+---------+---------+
|         10|NEON     |	      Ne|
+-----------+---------+---------+

Para las familias:

1
2
3
4
5
6
7
8
9
+----------+-------------+
|id_familia|descripcion  |
+----------+-------------+
|         1|Gases Nobles |
+----------+-------------+
|         2|Alcalinos    |
+----------+-------------+
|         3|Metales      |
+----------+-------------+

Ahora bien, lo siguiente es determinar cómo se relacionan estas dos tablas: puede haber una relación 1 a 1 (es decir, un elemento puede formar parte de 1 y sólo 1 familia), una relación 1 a muchos (es decir, un elemento puede pertenecer a 1 o más familia) o una relación muchos a muchos (es decir, muchos elementos pueden estar en muchas familia)... dependiendo de cual sea el caso entonces es el modelo que debes seguir.

Recordando mis clases de química, podríamos pensar de dos formas:

1. 1 elemento puede pertenecer a 1 y sólo 1 familia. Si piensas modelarlo así, entonces lo que haces es AGREGAR LA LLAVE DE TU TABLA FAMILIA COMO UN ATRIBUTO DE TU TABLA ELEMENTOS, es decir, quedaría algo así:

1
2
3
4
5
6
7
8
9
10
11
+-----------+---------+---------+----------+
|id_elemento|  nombre | simbolo |id_familia|
+-----------+---------+---------+----------+
|          1|HIDROGENO|	       H|          |
+-----------+---------+---------+----------+
|          2|HELIO    |	      He|         1|
+-----------+---------+---------+----------+
|          3|LITIO    |	      Li|         2|
+-----------+---------+---------+----------+
|         10|NEON     |	      Ne|         1|
+-----------+---------+---------+----------+

De aquí se observa que tanto el Helio como el Neón forman parte de la misma familia. Ahora bien, hay un caso especial con el Hidrógeno. Si no mal recuerdo mis clases de química, el Hidrógeno NO PERTENECE A NINGÚN GRUPO O FAMILIA, por lo tanto con este modelo deberías dejar el valor con null (LO CUAL NO ESTÁ MAL, PERO TAMPOCO ES CORRECTO SI QUIERES NORMALIZAR TUS TABLAS)... o pensar en una segunda forma de relacionar.

1. 1 elemento puede pertenecer a 0 o más familias... es decir, sería el caso que te comento del hidrógeno o imagina que se descubre un nuevo elemento que aun no pertenece a ninguna familia, en ese caso, lo que tienes que hacer es CREAR UNA NUEVA TABLA RE RELACIONES con los índices de tus dos tablas catálogos, es decir, tendrías algo así:

ELEMENTOS-FAMILIAS

1
2
3
4
5
6
7
8
9
+-----------+----------+
|id_elemento|id_familia|
+-----------+----------+
|          2|         1|
+-----------+----------+
|          3|         2|
+-----------+----------+
|         10|         1|
+-----------+----------+
Es decir, el hidrógeno o cualquier elemento que no tenga una familia SIMPLEMENTE NO APARECE EN LA TABLA DE RELACIONES. Ahora imagina que existiera un nuevo elemento que fuera a la vez alcalino, gas noble y no metal. entonces podrías modelarlo así:

1
2
3
4
5
6
7
8
9
+-----------+----------+
|id_elemento|id_familia|
+-----------+----------+
|        999|         1|
+-----------+----------+
|        999|         2|
+-----------+----------+
|        999|         3|
+-----------+----------+

¿Se entiende la idea?

Entonces insisto en lo que puse al inicio, NO HAY UN MEJOR O PEOR MODELO DE DATOS, si se ajusta a tus necesidades entonces es correcto.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar