Crear una base de datos ‘Zoologico’
Y dentro de esa base de datos una tabla ‘Especies’
De la siguiente manera:
Especies
id_especie auto increment
nombre_comun varchar(50)
nombre_cientifico varchar(50)
descripción varchar(50)
Crear una base de datos ‘Zoologico’
Y dentro de esa base de datos una tabla ‘Especies’
De la siguiente manera:
Especies
id_especie auto increment
nombre_comun varchar(50)
nombre_cientifico varchar(50)
descripción varchar(50)
1.- Cada entidad se transforma en una tabla
Si en nuestro modelo ER tenemos una entidad ‘Productos’ en nuestra base de datos tendremos una tabla ‘Productos’
2.- Cada tabla tiene una clave principal. Puede ser una clave natural o subrogada, pero aconsejamos poner una clave principal subrogada con idnombretabla
Las claves naturales prácticamente no se usan. Todos los SGBD tienen tipos de datos que se autoincrementan. Si tenemos una tabla productos mi consejo es que crees un campo llamado ‘id’ o ‘idproducto’ de tipo autoincremental.
3.- Las relaciones se tranforman así:
1-N El campo clave de la tabla de la parte ‘1’ de la relación se pone como campo en la tabla de la parte ‘N’
N-N Se crea una tabla intermedia con los campos claves de las dos tablas como campos y opcionalmente (aunque yo lo recomiendo) un campo clave propio.
Si tengo las tablas Categorías, Productos y Proveedores con una relación 1-N entre categorías y productos y una relación N-N entre proveedores y productos lo tendríamos que implementar así:
a) El campo clave de categoría (idcategoría) lo pongo como campo normal en Productos.
b) Creo una tabla productos_proveedores y en esta tabla pongo tres campos: idproducto_proveedor clave principal autoincrement, idproducto e idproveedor como campos normales.
4.- Se ponen los atributos con sus tipos donde corresponda, sea en la relación o sea en la tabla.
Cada SGBD tiene sus tipos de datos, pero en general todos tienen tipos de datos varchar para texto, int para datos enteros, decimal o currency para monedas, date y datetime para fechas y horas…
Hay que tener en cuenta algunas cosas:
a) Hay datos que parecen numéricos pero son cadenas de texto: un código postal, un teléfono. Como regla podemos decir que será de tipo numérico aquello con lo que podemos operar (sumar, restar) como por ejemplo un stock, un precio y será de tipo texto aquello con lo que no tiene sentido operar, en un código postal no tiene sentido sumar o restar nada.
b) Los atributos pueden ir en las relaciones, no es algo extraño. Si tengo una relación entre actores y películas N-N puedo tener un atributo ‘papel’ que no va ni en actor ni en película, va en la relación. Como las relaciones N-N crean una tabla intermedia ese atributo irá en la tabla intermedia.
Mysql sólo:
https://dev.mysql.com/doc/mysql-installation-excerpt/5.7/en/getting-mysql.html
Para windows:
https://dev.mysql.com/downloads/installer/
Paquete completo Mysql+apache+php+otros (XAMPP):
https://www.apachefriends.org/es/index.html
Después instalar el Mysql workbench:
Se desea crear una base de datos que contenga información sobre las revistas a las que estás suscrito o compras habitualmente. De cada revista, se pide su título, el ISSN (un código que identifica a la publicación), el número y el año de publicación. También se desea almacenar información de cada uno de los artículos publicados: el título, la página de inicio y la página de fin. Se asume que no hay dos artículos con el mismo título.
Cada artículo puede estar escrito por varios autores, de quienes interesa conocer su nombre, una dirección de correo electrónico y su país de nacimiento, así como un número que indique la posición en la que aparece en cada artículo: un 1 si es el primer autor, un 2 si aparece en segundo lugar, etc.
REVISTA ARTÍCULO AUTOR
Revista(1)—(N)Artículo(N)—(N)Autor
Revista: título, ISSN, número, año publicacion
Artículo: título, página inicio y fin
Autor: Nombre, email, país nacimiento
Autor-Artículo: posición
Una ONG desea elaborar una base de datos para llevar el seguimiento de todos sus proyectos. Tiene diversas sedes en varios países que se encargan de gestionar y coordinar los proyectos de ese país, cada uno de los cuales puede afectar a una o varias poblaciones.
Sobre la sedes se desea mantener un identificador, la ciudad y país en el que se encuentra, junto con su dirección, un teléfono de contacto y el nombre del director. Cada sede gestiona un conjunto de proyectos, con un código, un título, fechas de inicio y finalización, el presupuesto asignado y el nombre del responsable.
De cada proyecto es necesario conocer qué actuaciones se realizan en cada población, almacenando el nombre, país y nº de habitantes y un identificador para diferenciarlas. Además se desea la inversión del proyecto que corresponde a la población y una pequeña descripción de la actuación.
PAIS(1)—-(N)CIUDAD(1)—-(N)SEDE(1)—(N)PROYECTO(1)—–(N)ACTUACIONES
DIRECTOR(1,1) (1,1)RESPONSABLE
Sedes: Identificador, dirección, teléfono
Proyectos: Código, título, inicio, fin, presupuesto
Actuaciones: Población, nombre, país, habitantes, identificador, descripción, inversión
Un parque zoológico quiere construir una BD para organizar las especies que posee y los distintos itinerarios para visitar el parque. La información se estructura de la siguiente forma. De las especies, se desea conocer su nombre común y su nombre científico, así como una descripción general y una fotografía. Cada especie puede vivir en distintos hábitats naturales, definidos por su nombre, clima y vegetación predominante. Cada especie tiene asociado un índice de vulnerabilidad dentro de cada hábitat, que mide el riesgo de extinción de la especie en el dicho hábitat. Para organizar las visitas, y en función de los hábitats que desee recorrer un visitante, el parque le ofrece una serie de recorridos por los hábitats, que se identifican por su código y se caracterizan por su duración estimada, longitud y número máximo de visitantes permitidos. Un hábitat sólo puede formar parte de un itinerario.
ESPECIES(N)—(N)HABITATS(N)—(1)ITINERARIO
Especies: Nombre común, científico, descripción, fotografía,
Habitats: nombre, clima, vegetación
Especies-Habitats: índice vulnerabilidad
Itinerario: Duración, longitud, visitantes, código
Una compañía aérea necesita una base de datos para registrar la información de sus vuelos. Los vuelos están caracterizados por un Id, la fecha y los aeropuertos de origen y destino. Cada vuelo es realizado por un avión. Los aviones tienen una matrícula que los identifica, el fabricante, un modelo e información sobre su capacidad (número máximo de pasajeros) y autonomía de vuelo (en horas). La tripulación asignada al vuelo está formada por el personal de la propia compañía. De cada trabajador se conoce su id, su nombre y su categoría profesional, así como el puesto que ocupa en cada vuelo en particular.
Por último, para cada vuelo, se almacena la lista completa de pasajeros, con su dni, el nombre, el asiento que ocupa y su clase (turista, primera o business).
Crear un diseño entidad relación que permita controlar el sistema de información de una academia de cursos siguiendo estas premisas:
Una empresa nos pide que creemos una BD para controlar su inventario. Tienen un almacen con una serie de productos de los que les interesa saber el nombre y la cantidad que tienen (p. ej. tuercas, 20).
Los productos se los compran a unos proveedores y quieren saber el nombre y el telefono de los mismos para que cuando necesiten renovar stock les puedan llamar.
Crear el modelo E/R para esta base de datos.
¿Crees que tienes toda la información o consideras que hay que preguntarle algo al cliente?
Una aproximación:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> <link rel="stylesheet" href="estilos.css"> </head> <body> <div class="container"> <div class="row" id="cabecera"> <div class="col-md-3 bg-dark"><img width="100" src="https://www.hola.com/imagenes/estar-bien/20180925130054/consejos-para-cuidar-a-un-gatito-recien-nacido-cs/0-601-526/cuidardgatito-t.jpg"> </div> <div class="col-md-9 bg-dark"> <nav class="navbar navbar-expand-sm bg-dark navbar-dark justify-content-end"> <!-- Brand/logo --> <a class="navbar-brand" href="#">Logo</a> <!-- Links --> <ul class="navbar-nav"> <li class="nav-item"> <a class="nav-link" href="#">Contacto</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Productos</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Quienes somos</a> </li> </ul> </nav> </div> </div> <div class="row"> <div class="col-md-4"></div> <div class="col-md-4 text-center"> <h4>Hola que tal</h4> <h1>Yo muy bien con okal ¿Y tú?</h1> <h1>--</h1> </div> <div class="col-md-4"></div> </div> <div class="row"> <div class="col-md-4"> <article class="p-4 border"> <img class="img-responsive" style="width:100%" src="https://www.hola.com/imagenes/estar-bien/20180925130054/consejos-para-cuidar-a-un-gatito-recien-nacido-cs/0-601-526/cuidardgatito-t.jpg"> <h4>Reparaciones guays</h4> <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Modi atque suscipit blanditiis rerum obcaecati, alias dolorum mollitia magnam cumque ducimus similique illum voluptatibus quidem, qui numquam possimus excepturi sint aliquid.</p> <div class="row"> <div class="col-md-8">Texto</div> <div class="col-md-4">→</div> </div> </article> </div> <div class="col-md-4"> <article class="p-4 border"> <img class="img-responsive" style="width:100%" src="https://www.hola.com/imagenes/estar-bien/20180925130054/consejos-para-cuidar-a-un-gatito-recien-nacido-cs/0-601-526/cuidardgatito-t.jpg"> <h4>Reparaciones guays</h4> <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Modi atque suscipit blanditiis rerum obcaecati, alias dolorum mollitia magnam cumque ducimus similique illum voluptatibus quidem, qui numquam possimus excepturi sint aliquid.</p> <div class="row"> <div class="col-md-8">Texto</div> <div class="col-md-4">→</div> </div> </article> </div> <div class="col-md-4"> <article class="p-4 border"> <img class="img-responsive" style="width:100%" src="https://www.hola.com/imagenes/estar-bien/20180925130054/consejos-para-cuidar-a-un-gatito-recien-nacido-cs/0-601-526/cuidardgatito-t.jpg"> <h4>Reparaciones guays</h4> <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Modi atque suscipit blanditiis rerum obcaecati, alias dolorum mollitia magnam cumque ducimus similique illum voluptatibus quidem, qui numquam possimus excepturi sint aliquid.</p> <div class="row"> <div class="col-md-8">Texto</div> <div class="col-md-4">→</div> </div> </article> </div> </div> <footer class="row"> </footer> </div> </body> </html>
<div id="contenedor" class="container"> <p>Código postal: <input type="text" id="cp" placeholder="Introduzca el cp"></p> <button id="calcular" class="btn btn-success">Calcular gastos de envío</button> <h3 id="resultado"></h3> </div>
document.getElementById('calcular').addEventListener('click', calcular) function calcular () { const cp = document.getElementById('cp').value console.log(cp) // Haré los cálculos document.getElementById('resultado').innerHTML = 'Mensaje' } function gastosEnvio (cp) { /* Detectar cp Barcelona: 1 pt Detectar cp Catalunya: 3 pt Detectar cp resto: 2pt */ return 0 } function cpCorrecto (cp) { /* Detectar longitud = 5: 2 pt Detectar todo dígitos: 2 pt */ return true }
Todo resuelto:
document.getElementById('calcular').addEventListener('click', calcular) function calcular () { const cp = document.getElementById('cp').value // Haré los cálculos let mensaje = '' if (cpCorrecto(cp)) { mensaje = 'Gastos de envío: ' + gastosEnvio(cp) + ' €' } else { mensaje = 'Código incorrecto' } document.getElementById('resultado').innerHTML = mensaje } function gastosEnvio (cp) { /* Detectar cp Barcelona: 1 pt Detectar cp Catalunya: 3 pt Detectar cp resto: 2pt */ let gastos = 5 if (cp.startsWith('08')) { gastos = 0 } else if (cp.startsWith('25') || cp.startsWith('43') || cp.startsWith('17')) { gastos = 3 } return gastos } function cpCorrecto (cp) { /* Detectar longitud = 5: 2 pt cp.length==5 Detectar todo dígitos: 2 pt isNaN(cp)-> No es un número, por lo tanto la negación: !isNaN(cp) */ if (cp.length == 5 && !isNaN(cp)) { return true } else { return false } } function todoDigitos (cadena) { for (let i = 0; i < cadena.length; i++) { if (cadena.slice(i, i + 1) < '0' || cadena.slice(i, i + 1) > '9') { return false } } return true }