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


 


Tema destacado: Cifrar documentos-carpetas con GnuPG en Linux y Windows


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Pasar a MySQL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Pasar a MySQL  (Leído 1,293 veces)
K-YreX


Desconectado Desconectado

Mensajes: 744



Ver Perfil
Re: Pasar modelo entidad relacion a MySQL
« Respuesta #10 en: 1 Junio 2020, 12:03 »

Hola de nuevo releyendo me he encontrado con esto: El campo BANCO es un string que representa el nombre del BANCO. (los datos concretos de pago como numero de cuenta se encuentran alojados en otra tabla a la cual se accede a través del número de control)
Lo que me raya la cabeza es el contenido del paréntesis, que significa, por más que intento comprender no entiendo lo que se pide.
Lo que te está pidiendo de forma indirecta es que tengas otra tabla con los datos concretos del pago, llamémosla InfoPago. Esta tabla tendrá como te dicen pues el número de cuenta y podría tener otras cosas como el titular o lo que consideres/te indiquen.
Y que la relación entre InfoPago - Pago será 1:N. Cada pago apunta a un único registro de InfoPago mientras que cada registro de InfoPago puede ser referido desde diferentes pagos.

El uso de esto es para no copiar todos los datos en cada pago. Guardas en una tabla el número de cuenta, titular,... y le das un número de control. Así cuando quieras decir que un pago fue realizado por un número de cuenta, en vez de copiar todo (número de cuenta, titular,...) solo tendrás que copiar el número de control y eso te permitirá saber siempre qué número de cuenta, titular,... hizo ese pago.

Por si acaso diré que numeroControl tiene toda la pinta de ser la PK de InfoPago y una FK de Pago hacia InfoPago.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
thebus4k

Desconectado Desconectado

Mensajes: 37


Ver Perfil
Re: Pasar modelo entidad relacion a MySQL
« Respuesta #11 en: 1 Junio 2020, 12:30 »

Lo que te está pidiendo de forma indirecta es que tengas otra tabla con los datos concretos del pago, llamémosla InfoPago. Esta tabla tendrá como te dicen pues el número de cuenta y podría tener otras cosas como el titular o lo que consideres/te indiquen.
Y que la relación entre InfoPago - Pago será 1:N. Cada pago apunta a un único registro de InfoPago mientras que cada registro de InfoPago puede ser referido desde diferentes pagos.

El uso de esto es para no copiar todos los datos en cada pago. Guardas en una tabla el número de cuenta, titular,... y le das un número de control. Así cuando quieras decir que un pago fue realizado por un número de cuenta, en vez de copiar todo (número de cuenta, titular,...) solo tendrás que copiar el número de control y eso te permitirá saber siempre qué número de cuenta, titular,... hizo ese pago.

Por si acaso diré que numeroControl tiene toda la pinta de ser la PK de InfoPago y una FK de Pago hacia InfoPago.
De acuerdo, muchas gracias.


En línea

thebus4k

Desconectado Desconectado

Mensajes: 37


Ver Perfil
Re: Pasar modelo entidad relacion a MySQL
« Respuesta #12 en: 1 Junio 2020, 18:32 »

Así es, una relación de cardinalidad N:M constituye una nueva entidad (tabla) que estará formada por las claves primarias de ambas tablas originales (que formarán conjuntamente la clave primaria de la nueva tabla) y los atributos de relación que pudiese haber (pudiendo ser alguno de ellos un discrimante y entonces habría que incluirlo en la clave primaria de la nueva tabla).

Código
  1. CREATE TABLE [IF NOT EXISTS] Pedido (
  2.  id_pedido INT PRIMARY KEY [AUTO_INCREMENT],
  3.  ...
  4. );
  5.  
  6. CREATE TABLE [IF NOT EXISTS] Producto (
  7.  id_producto INT PRIMARY KEY [AUTO_INCREMENT],
  8.  ...
  9. );
  10.  
  11. -- Tabla resultante de la relacion:
  12. CREATE TABLE [IF NOT EXISTS] Inventario (
  13.  id_pedido INT,
  14.  id_producto INT,
  15.  cantidad INT [DEFAULT 1], -- Cantidad del producto id_producto que hay en el pedido id_pedido, [por defecto: 1]
  16.  PRIMARY KEY(id_pedido, id_producto),
  17.  [CONSTRAINT FK_Inventario_Pedido] FOREIGN KEY (id_pedido) REFERENCES Pedido(id_pedido),
  18.  [CONSTRAINT FK_Inventario_Producto] FOREIGN KEY (id_producto) REFERENCES Producto(id_producto)
  19. );
Por ejemplo a esta relación le vendría bastante bien el atributo de relación <cantidad> para saber cuántos productos de cada tipo hay en cada pedido.
Las partes entre corchetes [] son opcionales y si se ponen tienes que quitar los corchetes.


El DELETE ON CASCADE tienes que incluirlo en la FOREIGN KEY de la tabla que quieres que se elimine en cascada, es decir, de la tabla opuesta a la que tú vas a borrar. En este caso si quieres que al eliminar un Pedido, se elimine un Pago, Pedido tiene que ser la tabla independiente (que no contiene la FK) y Pago será la dependiente.
Código
  1. CREATE TABLE [IF NOT EXISTS] Pago (
  2.  id_pago INT PRIMARY KEY [AUTO_INCREMENT],
  3.  ...
  4.  id_pedido INT,
  5.  [CONSTRAINT FK_Pago_Pedido] FOREIGN KEY (id_pedido) REFERENCES Pedido(id_pedido) ON DELETE CASCADE
  6. );

Hola perdona que moleste otra vez, he creado toda la estructura pero me genera errores y no logro ver cuales son ya que he seguido todo lo que me has ido poniendo.

« Última modificación: 3 Junio 2020, 19:40 por thebus4k » En línea

K-YreX


Desconectado Desconectado

Mensajes: 744



Ver Perfil
Re: Pasar modelo entidad relacion a MySQL
« Respuesta #13 en: 1 Junio 2020, 20:03 »

Diría que el problema que tienes se debe a que tienes que especificar el tamaño máximo de cada varchar.
Es decir varchar(n) donde n es un número. Si no quieres especificar un tamaño puedes usar MAX pero no es muy recomendable generalmente.

Si tienes algún problema más, incluye también el mensaje de error que te salga.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
thebus4k

Desconectado Desconectado

Mensajes: 37


Ver Perfil
Re: Pasar modelo entidad relacion a MySQL
« Respuesta #14 en: 1 Junio 2020, 20:21 »

Diría que el problema que tienes se debe a que tienes que especificar el tamaño máximo de cada varchar.
Es decir varchar(n) donde n es un número. Si no quieres especificar un tamaño puedes usar MAX pero no es muy recomendable generalmente.

Si tienes algún problema más, incluye también el mensaje de error que te salga.
Error de SQL (1005): Can't create table `tienda`.`pedido` (errno: 150 "Foreign key constraint is incorrectly formed")
En línea

K-YreX


Desconectado Desconectado

Mensajes: 744



Ver Perfil
Re: Pasar modelo entidad relacion a MySQL
« Respuesta #15 en: 1 Junio 2020, 20:25 »

Claro, no me había dado cuenta.
Si al crear una tabla (Pedido), intentas hacer referencia a otras tablas (Vendedor y Cliente), estas tienen que existir ya.
Por eso si creas FKs tienes que asegurarte que primero creas las tablas a las que vas a hacer referencia.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
thebus4k

Desconectado Desconectado

Mensajes: 37


Ver Perfil
Re: Pasar modelo entidad relacion a MySQL
« Respuesta #16 en: 1 Junio 2020, 20:32 »

Claro, no me había dado cuenta.
Si al crear una tabla (Pedido), intentas hacer referencia a otras tablas (Vendedor y Cliente), estas tienen que existir ya.
Por eso si creas FKs tienes que asegurarte que primero creas las tablas a las que vas a hacer referencia.
Si era eso, ya fallo hasta al leer porque tenia una de las tablas antes, me faltaba poner la otra tabla.
Como puedo hacer que al introducir datos cada pedido tenga al menos 3 productos? Con la tabla que relaciona las dos tablas con el campo cantidad?
En línea

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

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines