Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Podrian ayudarme con esta base de datos?

Estas en el tema de Podrian ayudarme con esta base de datos? en el foro de Mysql en Foros del Web. Hola a todos, soy nuevo en este foro, me encuentro realizando una base de datos de prueba, y basicamente tengo la idea de crearlas, pero ...
  #1 (permalink)  
Antiguo 12/11/2015, 10:54
 
Fecha de Ingreso: noviembre-2015
Ubicación: Uruguay
Mensajes: 3
Antigüedad: 8 años, 4 meses
Puntos: 0
Pregunta Podrian ayudarme con esta base de datos?

Hola a todos, soy nuevo en este foro, me encuentro realizando una base de datos de prueba, y basicamente tengo la idea de crearlas, pero no tengo practica, mi objetivo es aprender mas de lo basico porque pronto seguramente entre en un proyecto empresarial y quiero tener la idea de crear bases de datos algo claras.

Necesito que me digan si la estructura o la idea de esta base de prueba es legible. Se que es una base de datos basica, no estoy en esta area pero seguro me le tendre que dedicar. Gracias.

Código MySQL:
Ver original
  1. -- -----------------------------------------------------
  2. -- Table `mydb`.`empresa`
  3. -- -----------------------------------------------------
  4. CREATE TABLE IF NOT EXISTS `mydb`.`empresa` (
  5.   `idempresa` INT NOT NULL AUTO_INCREMENT,
  6.   `razonSocial` VARCHAR(45) NULL,
  7.   `rut` VARCHAR(45) NULL,
  8.   `direccion` VARCHAR(45) NULL,
  9.   `codigoPostal` VARCHAR(45) NULL,
  10.   `fechaNacimiento` DATE NULL,
  11.   `nombreDuenno` VARCHAR(45) NULL,
  12.   `ciDuenno` INT NULL,
  13.   `fechaNacimientoDuenno` DATE NULL,
  14.   PRIMARY KEY (`idempresa`),
  15.   UNIQUE INDEX `idempresa_UNIQUE` (`idempresa` ASC))
  16.  
  17.  
  18. -- -----------------------------------------------------
  19. -- Table `mydb`.`producto`
  20. -- -----------------------------------------------------
  21. CREATE TABLE IF NOT EXISTS `mydb`.`producto` (
  22.   `idproducto` INT NOT NULL,
  23.   `nombre` VARCHAR(45) NULL,
  24.   `descripcion` VARCHAR(45) NULL,
  25.   `importeUnitario` INT NULL,
  26.   `cantidad` INT NULL,
  27.   PRIMARY KEY (`idproducto`))
  28.  
  29.  
  30. -- -----------------------------------------------------
  31. -- Table `mydb`.`stockEmpresa`
  32. -- -----------------------------------------------------
  33. CREATE TABLE IF NOT EXISTS `mydb`.`stockEmpresa` (
  34.   `idstockEmpresa` INT NOT NULL,
  35.   `empresa_idempresa` INT NOT NULL,
  36.   `producto_idproducto` INT NOT NULL,
  37.   PRIMARY KEY (`idstockEmpresa`),
  38.   UNIQUE INDEX `idstockEmpresa_UNIQUE` (`idstockEmpresa` ASC),
  39.   INDEX `fk_stockEmpresa_empresa_idx` (`empresa_idempresa` ASC),
  40.   INDEX `fk_stockEmpresa_producto1_idx` (`producto_idproducto` ASC),
  41.   CONSTRAINT `fk_stockEmpresa_empresa`
  42.     FOREIGN KEY (`empresa_idempresa`)
  43.     REFERENCES `mydb`.`empresa` (`idempresa`)
  44.   CONSTRAINT `fk_stockEmpresa_producto1`
  45.     FOREIGN KEY (`producto_idproducto`)
  46.     REFERENCES `mydb`.`producto` (`idproducto`)
  47.  
  48.  
  49. SET SQL_MODE=@OLD_SQL_MODE;
  50. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  51. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
  #2 (permalink)  
Antiguo 12/11/2015, 11:02
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 7 meses
Puntos: 774
Respuesta: Podrian ayudarme con esta base de datos?

La sintaxis es legible, se entiende q estas creando 3 tablas con sus relaciones.....pero cual es la razon de ser de esa base, guardar q? Los datos de empresas, pero cuales son las restricciones, cual es la politica de negocios? Una base de datos no es solo crear tablas y relaciones es saber para q las creas y q informacion vas a obtener con ella, si tu codigo no re da errores al ejecutarlo esta perfecto.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 12/11/2015, 11:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Podrian ayudarme con esta base de datos?

Esto no se necesita porque ese campo ya es PRIMARY KEY, y por definición una PK es siempre única: .
Código MySQL:
Ver original
  1. UNIQUE INDEX `idempresa_UNIQUE` (`idempresa` ASC))

Lo mismo vale para:
Código MySQL:
Ver original
  1. UNIQUE INDEX `idstockEmpresa_UNIQUE` (`idstockEmpresa` ASC),
Estos indices son irrelevantes, porque ya existen las FK:
Código MySQL:
Ver original
  1. INDEX `fk_stockEmpresa_empresa_idx` (`empresa_idempresa` ASC),
  2.   INDEX `fk_stockEmpresa_producto1_idx` (`producto_idproducto` ASC),

Hay mucha tela más para cortar, pero todo sería a explicar siempre y cuando hayas estudiado formalmente los fundamentos del modelo relacional.
Para darte una idea, ai la empresa tiene RUT y el RUT es único, no tiene sentido hacer un campo ID autoincremental. Sólo agrega valores, sin aportar nada al modelo.
Pero, como dije, dependerá de tu formación de estudios...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 12/11/2015, 11:12
 
Fecha de Ingreso: noviembre-2015
Ubicación: Uruguay
Mensajes: 3
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Podrian ayudarme con esta base de datos?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Esto no se necesita porque ese campo ya es PRIMARY KEY, y por definición una PK es siempre única: .
Código MySQL:
Ver original
  1. UNIQUE INDEX `idempresa_UNIQUE` (`idempresa` ASC))

Lo mismo vale para:
Código MySQL:
Ver original
  1. UNIQUE INDEX `idstockEmpresa_UNIQUE` (`idstockEmpresa` ASC),
Estos indices son irrelevantes, porque ya existen las FK:
Código MySQL:
Ver original
  1. INDEX `fk_stockEmpresa_empresa_idx` (`empresa_idempresa` ASC),
  2.   INDEX `fk_stockEmpresa_producto1_idx` (`producto_idproducto` ASC),

Hay mucha tela más para cortar, pero todo sería a explicar siempre y cuando hayas estudiado formalmente los fundamentos del modelo relacional.
Para darte una idea, ai la empresa tiene RUT y el RUT es único, no tiene sentido hacer un campo ID autoincremental. Sólo agrega valores, sin aportar nada al modelo.
Pero, como dije, dependerá de tu formación de estudios...
Gracias por responder, entiendo lo de los indices, y lo del rut se me paso, no tengo mucha idea de base de datos, lo estudie pero nunca le di mayor importancia porque me enfoque en otras cosas, recien ahora empece a interesarme porque seguramente tenga q tratar con estas mas adelante.

Libtas, entiendo lo que dices, perfectamente, se que hay que tener idea de como va a ser el negocio antes de crear las tablas, como dije, es una base de pruebas nada mas, y lo q se ve es que hay una tabla empresa y esta tiene un stcok de productos, cada stock va a contener todos los productos q necesito de la tabla productos, no se si esa idea la implemente bien ahí.
  #5 (permalink)  
Antiguo 12/11/2015, 11:26
 
Fecha de Ingreso: noviembre-2015
Ubicación: Uruguay
Mensajes: 3
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Podrian ayudarme con esta base de datos?

Me puedes explicar porque no es necesario poner auto_increment a la id?
  #6 (permalink)  
Antiguo 12/11/2015, 11:37
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 7 meses
Puntos: 774
Respuesta: Podrian ayudarme con esta base de datos?

Te dijeron sobre el constraint unique dentro de la PK, esto esta de mas porq una PK ya es unique
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 12/11/2015, 11:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Podrian ayudarme con esta base de datos?

Yo dije que no es necesario pone un ID autoincremental, si tienes un dato que es único por definición.
Recuerda que una PK es un campo o conjunto de campos que identifica unívocamente un único registro en una tabla.
Esa es la definición formal de clave primaria.
Ahora bien, es preferible en todos los casos no usar atributos inventados, sino procurar definir las PK sobre datos propios de la entidad representada. En este caso el RUT, si es úico, cumple con los preceptos:
1) Existe siempre (no nulo).
2) Es único (irrepetible).
3) Identifica siempre a la misma Empresa en cualquier ámbito.

En ese contexto, el RUT es un campo ideal para ser usado como PK, y por tanto crear artificialmente un campo autoincremental para hacerlo PK es innecesario.

¿Se entiende?

En Normalización de Bases de Datos se suele indicar que únicamente si al llegar a la 3FN no se ha encontrado una clave candidata (CC), entonces se puede justificar crear una PK artificial, que no necesariamente debe ser numérica ni incremental. Es simplemente una clave identificatoria agregada a la tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: proyecto-web
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:30.