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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Diseñar una buena base de datos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Diseñar una buena base de datos  (Leído 9,021 veces)
Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Diseñar una buena base de datos
« en: 12 Febrero 2011, 04:12 am »

Hola:

Quiero diseñar una base de datos con SQL Server Express 2008 R2 (Gratuito). Se trata de una base de datos para un videoclub. Cosa que hay que dejar clara. Lo quiero hacer desde Visual C# Espress 2010, es como si fuera Case Studio, se puede hacer relaciones, el algo que no tengo muy en cuenta.

Citar
- Se alquilan películas en dos formatos, el DVD y el Blu-Ray. Tiene una tabla "Formátos" que dentro de ella puedes agregar si se incluye más formatos como el VHS por poner un ejemplo.
- Tiene una tabla llamada "Clientes", en el se encuentra estos campos.
Código
DNI
Nombre
Apellidos
Dirección
Fecha_Nacimiento
Email
Teléfono1
Teléfono2
Móvil1
Móvil2
Observaciones

- Otra tabla llamada "Películas", en él contiene:
Código
Título
Género
Duración
Copias
Disponibles
Precio
Formato
Año
Actor_principal
Director
Descripción
Notas

- Tabla "Película_que_tiene_el_cliente" (Está relacionado con la tabla "Clientes").
Código
Título
Fecha_de_devolución
Días_de_retraso

- Tabla "Clientes_con_copias_de_estas_películas".

Información:
Tabla "Morosos", campos DNI y nombre.

Tabla "Clientes con deudas", campos DNI, Nombre y Total.

Tabla "Alquiladas", campos código película, Título, Cliente, Devolución.

Tabla "Ingresos", con campor de Concepto, DNI, Cliente, Fecha, Hora, Notas

Complicado de entender y de hacer. ¿Verdad?
Espero que no me falte nada, si tienen ideas antes de hacer un esquema de relaciones aunque sea de gannt o con el CASE Studio, también viene con el Visual C# incluido, no duces en compartirlo por aquí.



Un cordial saludo.


En línea

madpitbull_99
Colaborador
***
Desconectado Desconectado

Mensajes: 1.911



Ver Perfil WWW
Re: Diseñar una buena base de datos
« Respuesta #1 en: 13 Febrero 2011, 19:43 pm »

Citar
- Tabla "Película_que_tiene_el_cliente" (Está relacionado con la tabla "Clientes").
Yo la llamaría Películas Alquiladas. Tambien debes poner a quien se la alquilas, no?

Citar
- Tabla "Clientes_con_copias_de_estas_películas".
No acabo de entender que tipo de información vas a almacenar en esta tabla.

En la tabla Clientes puedes usar como clave primaria tanto el DNI (es único por persona) o usar un ID proprio.


Puedes hacer algo así:



Claramente se puede optimizar/modificar mucho mas, pero al menos puedes hacerte una idea de como hacer las relaciones.

Por si lo quieres, te dejo el script sql para hacer la base de datos como yo lo he hecho.

Código
  1. SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
  2. SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
  3. SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
  4.  
  5. CREATE SCHEMA IF NOT EXISTS `Videoclub` DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish_ci ;
  6. USE `Videoclub` ;
  7.  
  8. -- -----------------------------------------------------
  9. -- Table `Videoclub`.`clientes`
  10. -- -----------------------------------------------------
  11. CREATE TABLE IF NOT EXISTS `Videoclub`.`clientes` (
  12. `idcliente` INT NOT NULL AUTO_INCREMENT ,
  13. `DNI` VARCHAR(45) NOT NULL ,
  14. `Nombre` VARCHAR(45) NULL ,
  15. `Apellidos` VARCHAR(45) NULL ,
  16. `Direccion` VARCHAR(45) NULL ,
  17. `Fecha_Nacimiento` VARCHAR(45) NULL ,
  18. `Email` VARCHAR(45) NULL ,
  19. `Tel_Fijo` INT NULL ,
  20. `Tel_Movil` INT NULL ,
  21. `Observaciones` VARCHAR(60) NULL ,
  22. PRIMARY KEY (`idcliente`, `DNI`) )
  23. ENGINE = InnoDB;
  24.  
  25.  
  26. -- -----------------------------------------------------
  27. -- Table `Videoclub`.`peliculas_alquiladas`
  28. -- -----------------------------------------------------
  29. CREATE TABLE IF NOT EXISTS `Videoclub`.`peliculas_alquiladas` (
  30. `idpelicula_alquilada` INT NOT NULL AUTO_INCREMENT ,
  31. `id_pelicula` INT NULL ,
  32. `Titulo` VARCHAR(45) NULL ,
  33. `ClienteID` INT NULL ,
  34. `Fecha_Devolucion` DATETIME NULL ,
  35. `Dias_Retraso` DATETIME NULL ,
  36. `clientes_idcliente` INT NOT NULL ,
  37. `clientes_DNI` VARCHAR(45) NOT NULL ,
  38. PRIMARY KEY (`idpelicula_alquilada`, `clientes_idcliente`, `clientes_DNI`) ,
  39. INDEX `fk_peliculas_alquiladas_clientes1` (`clientes_idcliente` ASC, `clientes_DNI` ASC) ,
  40. CONSTRAINT `fk_peliculas_alquiladas_clientes1`
  41. FOREIGN KEY (`clientes_idcliente` , `clientes_DNI` )
  42. REFERENCES `Videoclub`.`clientes` (`idcliente` , `DNI` )
  43. ON DELETE NO ACTION
  44. ON UPDATE NO ACTION)
  45. ENGINE = InnoDB;
  46.  
  47.  
  48. -- -----------------------------------------------------
  49. -- Table `Videoclub`.`peliculas`
  50. -- -----------------------------------------------------
  51. CREATE TABLE IF NOT EXISTS `Videoclub`.`peliculas` (
  52. `idpelicula` INT NOT NULL ,
  53. `Titulo` VARCHAR(45) NULL ,
  54. `Genero` VARCHAR(45) NULL ,
  55. `Duracion` VARCHAR(45) NULL ,
  56. `Copias` VARCHAR(45) NULL ,
  57. `Disponibles` VARCHAR(45) NULL ,
  58. `Precio` VARCHAR(45) NULL ,
  59. `Formato` INT NULL ,
  60. `año` VARCHAR(45) NULL ,
  61. `Actor_Principal` VARCHAR(45) NULL ,
  62. `Director` VARCHAR(45) NULL ,
  63. `Descripcion` VARCHAR(45) NULL ,
  64. `Notas` VARCHAR(45) NULL ,
  65. `peliculas_alquiladas_idpelicula_alquilada` INT NOT NULL ,
  66. PRIMARY KEY (`idpelicula`, `peliculas_alquiladas_idpelicula_alquilada`) ,
  67. INDEX `fk_peliculas_peliculas_alquiladas1` (`peliculas_alquiladas_idpelicula_alquilada` ASC) ,
  68. CONSTRAINT `fk_peliculas_peliculas_alquiladas1`
  69. FOREIGN KEY (`peliculas_alquiladas_idpelicula_alquilada` )
  70. REFERENCES `Videoclub`.`peliculas_alquiladas` (`idpelicula_alquilada` )
  71. ON DELETE NO ACTION
  72. ON UPDATE NO ACTION)
  73. ENGINE = InnoDB;
  74.  
  75.  
  76. -- -----------------------------------------------------
  77. -- Table `Videoclub`.`formatos`
  78. -- -----------------------------------------------------
  79. CREATE TABLE IF NOT EXISTS `Videoclub`.`formatos` (
  80. `idformato` INT NOT NULL AUTO_INCREMENT ,
  81. `nombre` VARCHAR(45) NULL ,
  82. `peliculas_idpelicula` INT NOT NULL ,
  83. PRIMARY KEY (`idformato`, `peliculas_idpelicula`) ,
  84. INDEX `fk_formatos_peliculas` (`peliculas_idpelicula` ASC) ,
  85. CONSTRAINT `fk_formatos_peliculas`
  86. FOREIGN KEY (`peliculas_idpelicula` )
  87. REFERENCES `Videoclub`.`peliculas` (`idpelicula` )
  88. ON DELETE NO ACTION
  89. ON UPDATE NO ACTION)
  90. ENGINE = InnoDB;
  91.  
  92.  
  93.  
  94. SET SQL_MODE=@OLD_SQL_MODE;
  95. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  96. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
  97.  


Repito, puedes modificar mucho mas la DB.


En línea



«Si quieres la paz prepárate para la guerra» Flavius Vegetius

[Taller]Instalación/Configuración y Teoría de Servicios en Red
novalida

Desconectado Desconectado

Mensajes: 160


Ver Perfil
Re: Diseñar una buena base de datos
« Respuesta #2 en: 14 Febrero 2011, 22:13 pm »

madpitbull_99, me podrías decir qué programa has utilizado para hacer la relación entre tablas y la generación del script?
En línea

madpitbull_99
Colaborador
***
Desconectado Desconectado

Mensajes: 1.911



Ver Perfil WWW
Re: Diseñar una buena base de datos
« Respuesta #3 en: 15 Febrero 2011, 20:34 pm »

Para diseñar bases de datos de forma gráfica se puede hacer hasta con phpMyAdmin (seleccionas tu db y haces clic en la pestaña Diseñador).

En la imagen de arriba he usado MySQLWorkbench. Hay otra bastante buena, llamada DB Designer.
En línea



«Si quieres la paz prepárate para la guerra» Flavius Vegetius

[Taller]Instalación/Configuración y Teoría de Servicios en Red
Hadess_inf
Desesperado
Colaborador
***
Desconectado Desconectado

Mensajes: 2.048


Nueva Vida


Ver Perfil WWW
Re: Diseñar una buena base de datos
« Respuesta #4 en: 16 Febrero 2011, 18:47 pm »

Prefiero el DBDESIGNER al MySQLWorkbench ..... este ultimo en un punto tira errores ..
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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