Examen

Una empresa de fabricación de tintas nos ha pedido una base de datos.

La empresa necesita guardar información de sus clientes, concretamente el NIF y la razón social. Los clientes hacen pedidos, de los que queremos saber la fecha y la dirección de envío (calle, cp y población).

Los pedidos pueden ser de varios productos. De los productos queremos guardar la referencia, el precio y el stock que tenemos en almacén.

Por otro lado algunos productos se componen de otros productos. Para esos productos necesitamos guardar la la cantidad de cada uno de los productos de los que se componen. Por ejemplo yo puedo tener un producto tinta azul que se componga de 1 litro de disolvente, medio litro de colorante azul y 0,2 litros de espesante. Pero todos son productos.

Se pide el Modelo E-R, el modelo lógico y la implementación en base de datos (dejadla en los comentarios con vuestro nombre)

 

 

DROP TABLE IF EXISTS `clientes`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `clientes` (
`idclientes` int(11) NOT NULL AUTO_INCREMENT,
`nif` varchar(45) DEFAULT NULL,
`razonsocial` varchar(45) DEFAULT NULL,
PRIMARY KEY (`idclientes`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;


— Dumping data for table `clientes`

LOCK TABLES `clientes` WRITE;
/*!40000 ALTER TABLE `clientes` DISABLE KEYS */;
/*!40000 ALTER TABLE `clientes` ENABLE KEYS */;
UNLOCK TABLES;


— Table structure for table `pedido_producto`

DROP TABLE IF EXISTS `pedido_producto`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `pedido_producto` (
`idpedido_producto` int(11) NOT NULL AUTO_INCREMENT,
`idpedido` int(11) DEFAULT NULL,
`idproducto` int(11) DEFAULT NULL,
PRIMARY KEY (`idpedido_producto`),
KEY `fk_pedido_idx` (`idpedido`),
KEY `fk_producto_idx` (`idproducto`),
CONSTRAINT `fk_pedido` FOREIGN KEY (`idpedido`) REFERENCES `pedidos` (`idpedidos`) ON UPDATE CASCADE,
CONSTRAINT `fk_producto` FOREIGN KEY (`idproducto`) REFERENCES `productos` (`idproductos`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;


— Dumping data for table `pedido_producto`

LOCK TABLES `pedido_producto` WRITE;
/*!40000 ALTER TABLE `pedido_producto` DISABLE KEYS */;
/*!40000 ALTER TABLE `pedido_producto` ENABLE KEYS */;
UNLOCK TABLES;


— Table structure for table `pedidos`

DROP TABLE IF EXISTS `pedidos`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `pedidos` (
`idpedidos` int(11) NOT NULL AUTO_INCREMENT,
`fecha` date DEFAULT NULL,
`calle` varchar(45) DEFAULT NULL,
`cp` varchar(45) DEFAULT NULL,
`poblacion` varchar(45) DEFAULT NULL,
`idcliente` int(11) DEFAULT NULL,
PRIMARY KEY (`idpedidos`),
KEY `fk_cliente_idx` (`idcliente`),
CONSTRAINT `fk_cliente` FOREIGN KEY (`idcliente`) REFERENCES `clientes` (`idclientes`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;


— Dumping data for table `pedidos`

LOCK TABLES `pedidos` WRITE;
/*!40000 ALTER TABLE `pedidos` DISABLE KEYS */;
/*!40000 ALTER TABLE `pedidos` ENABLE KEYS */;
UNLOCK TABLES;


— Table structure for table `producto_producto`

DROP TABLE IF EXISTS `producto_producto`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `producto_producto` (
`idproducto_producto` int(11) NOT NULL AUTO_INCREMENT,
`idproductofinal` int(11) DEFAULT NULL,
`idproductocomponente` int(11) DEFAULT NULL,
`cantidad` decimal(10,4) DEFAULT NULL,
PRIMARY KEY (`idproducto_producto`),
KEY `fk_productofinal_idx` (`idproductofinal`),
KEY `fk_productocomponente_idx` (`idproductocomponente`),
CONSTRAINT `fk_productocomponente` FOREIGN KEY (`idproductocomponente`) REFERENCES `productos` (`idproductos`) ON UPDATE CASCADE,
CONSTRAINT `fk_productofinal` FOREIGN KEY (`idproductofinal`) REFERENCES `productos` (`idproductos`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;


— Dumping data for table `producto_producto`

LOCK TABLES `producto_producto` WRITE;
/*!40000 ALTER TABLE `producto_producto` DISABLE KEYS */;
/*!40000 ALTER TABLE `producto_producto` ENABLE KEYS */;
UNLOCK TABLES;


— Table structure for table `productos`

DROP TABLE IF EXISTS `productos`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `productos` (
`idproductos` int(11) NOT NULL AUTO_INCREMENT,
`referencia` varchar(45) DEFAULT NULL,
`precio` decimal(10,4) DEFAULT NULL,
`stock` decimal(10,4) DEFAULT NULL,
PRIMARY KEY (`idproductos`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

Más ejercicios entidad relación

Crear el esquema entidad/relación que represente el organigrama de una empresa, de modo que:

  • Aparezcan los datos de todos los empleados y empleadas: dni, nº de seguridad social, código de trabajador, nombre, apellidos, dirección, teléfono y departamento en el que trabajan indicado por su código y nombre.
  • También hay que tener en cuenta que cada trabajador puede tener un responsable (que en realidad es otro trabajador)
  • Los departamentos poseen un único coordinador del mismo
  • Necesitamos almacenar la categoría profesional de los trabajadores y trabajadoras, teniendo en cuenta que la categoría a veces cambia al cambiar el contrato, de los contratos se almacena la fecha de inicio del mismo y la fecha final (un contrato en vigor tendrá como fecha final el valor nulo).
  • También controlaremos las nóminas que ha recibido el trabajador de las que sabemos la fecha, el salario y a qué trabajador van dirigidas y la categoría del mismo.

Crear el esquema entidad/relación que permita gestionar reservas de vuelos, de modo que:

  • Los clientes pueden reservar vuelos. Con la reserva se pueden reservar varias plazas, pero no poseeremos el número de asiento hasta obtener la tarjeta de embarque. En ese instante se asignará el asiento que tiene como identificación la fila, columna y la planta en la que está situado.
  • Se pueden obtener tarjetas de embarque sin tener reserva
  • Las tarjetas de embarque se refieren a un único cliente. De modo que aunque reserváramos nueve plazas, cada cliente podrá sacar su tarjeta de embarque indicando el número de reserva, la fecha de la misma y sus datos personales (dni, nombre, apellidos, dirección y teléfono). Además la persona que reserva debe indicar una tarjeta de crédito que quedará asociada a esa persona.
  • El vuelo que se reserva tiene un código único, una fecha y una hora de salida y de llegada y un aeropuerto de salida y otro de llegada
  • Los aeropuertos poseen un código único, además del nombre y la localidad y el país en el que se encuentran
  • Se guarda información sobre los aviones, código y número de plazas. Los vuelos sólo les puede realizar un avión determinado, pero el mismo avión puede realizar (como es lógico) otros vuelos

Realizar un esquema entidad/relación que permita modelar el sistema de información de una empresa de software atendiendo las siguientes premisas

  • La empresa crea proyectos para otras empresas. De dichas empresas se almacena el CIF, nombre, dirección y teléfono así como un código interno de empresa.
  • Los proyectos se inician en una determinada fecha y finalizan en otra. Además al planificarle se almacena la fecha prevista de finalización (que puede no coincidir con la finalización real)
  • Los proyectos los realizan varios trabajadores, cada uno de ellos desempeña una determinada profesión en el proyecto (analista, jefe de proyecto, programador,…), dicha profesión tiene un código de profesión. En el mismo proyecto puede haber varios analistas, programadores,…
  • Todos los trabajadores tienen un código de trabajador, un dni, un nombre y apellidos. Su profesión puede cambiar según el proyecto: en uno puede ser jefe y en otro un programador
  • Se anota las horas que ha trabajado cada trabajador en cada proyecto.
  • Puede haber varios proyectos que comiencen el mismo día.
  • A todas las empresas les hemos realizado al menos un proyecto
  • Todos los trabajadores han participado en algún proyecto
  • En la base de datos, la profesión “administrador de diseño” no la ha desempeñado todavía ningún trabajador o trabajadora

Crear un diseño entidad/relación que permita modelar un sistema que sirva para simular el funcionamiento de una red social, teniendo en cuenta lo siguiente:

  • Los usuarios de la red social se identifican con un identificador y una contraseña. Además se almacena de ellos:
    • Su nombre, apellidos, dirección, teléfono (puede tener varios teléfonos) e e-mail (el e-mail no tiene que poder coincidir con el de otro usuario) y una foto
    • Si los usuarios son celebridades, de ellos no aparecerá ni el email ni la dirección ni el teléfono.
  • Los usuarios pueden tener una serie de contactos, que en realidad son otros usuarios. De cada contacto se puede almacenar un comentario que es personal y que sirve para describir al contacto.
  • Los usuarios pueden organizar sus contactos en grupos de los cuales se almacena un nombre y deberemos saber los contactos que contiene. El mismo contacto puede formar parte de varios grupos.
  • Además cada usuario puede tener una lista de usuarios bloqueados a fin de que no puedan contactar con él
  • Los usuarios pueden publicar en la red comentarios, los cuales se puede hacer que los vea todo el mundo, que los vea uno o varios de los grupos de contactos del usuario o bien una lista concreta de usuarios. Los comentarios pueden incluir un texto y una imagen.

Aún más:

http://bdalfonso.blogspot.com/2013/06/modelo-err-ejercicios-resueltos.html

Dump Institutos

CREATE DATABASE IF NOT EXISTS `instituto` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `instituto`;


— Table structure for table `alumnos`

DROP TABLE IF EXISTS `alumnos`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `alumnos` (
`idalumno` int(11) NOT NULL AUTO_INCREMENT,
`expediente` varchar(45) DEFAULT NULL,
`nombre` varchar(45) DEFAULT NULL,
`apellidos` varchar(45) DEFAULT NULL,
`fecnacimiento` date DEFAULT NULL,
PRIMARY KEY (`idalumno`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;


— Table structure for table `mod_alu`

DROP TABLE IF EXISTS `mod_alu`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mod_alu` (
`idmod_alu` int(11) NOT NULL AUTO_INCREMENT,
`idmodulo` int(11) DEFAULT NULL,
`idalumno` int(11) DEFAULT NULL,
PRIMARY KEY (`idmod_alu`),
KEY `fk_modulo_idx` (`idmodulo`),
KEY `fk_alumno_idx` (`idalumno`),
CONSTRAINT `fk_alumno` FOREIGN KEY (`idalumno`) REFERENCES `alumnos` (`idalumno`) ON UPDATE CASCADE,
CONSTRAINT `fk_modulo` FOREIGN KEY (`idmodulo`) REFERENCES `modulos` (`idmodulo`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;


— Table structure for table `modulos`

DROP TABLE IF EXISTS `modulos`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `modulos` (
`idmodulo` int(11) NOT NULL AUTO_INCREMENT,
`idprofesor` int(11) DEFAULT NULL,
`codigo` varchar(45) DEFAULT NULL,
`nombre` varchar(45) DEFAULT NULL,
PRIMARY KEY (`idmodulo`),
KEY `fk_profesor_idx` (`idprofesor`),
CONSTRAINT `fk_profesor` FOREIGN KEY (`idprofesor`) REFERENCES `profesores` (`idprofesor`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;


— Table structure for table `profesores`

DROP TABLE IF EXISTS `profesores`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `profesores` (
`idprofesor` int(11) NOT NULL AUTO_INCREMENT,
`dni` varchar(45) DEFAULT NULL,
`nombre` varchar(45) DEFAULT NULL,
`direccion` varchar(45) DEFAULT NULL,
`telefono` varchar(45) DEFAULT NULL,
PRIMARY KEY (`idprofesor`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

Volcado de la BD filmoteca


— Estructura de tabla para la tabla `actores`

CREATE TABLE `actores` (
`idactor` int(11) NOT NULL,
`nombre` varchar(200) NOT NULL,
`nacionalidad` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

— ——————————————————–


— Estructura de tabla para la tabla `directores`

CREATE TABLE `directores` (
`iddirector` int(11) NOT NULL,
`nombre` varchar(200) NOT NULL,
`fnac` date NOT NULL,
`pais` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

— ——————————————————–


— Estructura de tabla para la tabla `peliculas`

CREATE TABLE `peliculas` (
`idpelicula` int(11) NOT NULL,
`iddirector` int(11) NOT NULL,
`titulo` varchar(200) NOT NULL,
`ano` year(4) NOT NULL,
`nacionalidad` varchar(200) NOT NULL,
`idioma` varchar(20) NOT NULL,
`color` tinyint(1) NOT NULL,
`edad` varchar(20) NOT NULL,
`resumen` text NOT NULL,
`observaciones` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

— ——————————————————–


— Estructura de tabla para la tabla `peliculas_actores`

CREATE TABLE `peliculas_actores` (
`idpeliculaactor` int(11) NOT NULL,
`idpelicula` int(11) NOT NULL,
`idactor` int(11) NOT NULL,
`personaje` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


— Índices para tablas volcadas


— Indices de la tabla `actores`

ALTER TABLE `actores`
ADD PRIMARY KEY (`idactor`);


— Indices de la tabla `directores`

ALTER TABLE `directores`
ADD PRIMARY KEY (`iddirector`);


— Indices de la tabla `peliculas`

ALTER TABLE `peliculas`
ADD PRIMARY KEY (`idpelicula`);


— Indices de la tabla `peliculas_actores`

ALTER TABLE `peliculas_actores`
ADD PRIMARY KEY (`idpeliculaactor`);


— AUTO_INCREMENT de las tablas volcadas


— AUTO_INCREMENT de la tabla `actores`

ALTER TABLE `actores`
MODIFY `idactor` int(11) NOT NULL AUTO_INCREMENT;


— AUTO_INCREMENT de la tabla `directores`

ALTER TABLE `directores`
MODIFY `iddirector` int(11) NOT NULL AUTO_INCREMENT;


— AUTO_INCREMENT de la tabla `peliculas`

ALTER TABLE `peliculas`
MODIFY `idpelicula` int(11) NOT NULL AUTO_INCREMENT;


— AUTO_INCREMENT de la tabla `peliculas_actores`

ALTER TABLE `peliculas_actores`
MODIFY `idpeliculaactor` int(11) NOT NULL AUTO_INCREMENT;

Ejercicio entidad relación

Una empresa vende productos a varios clientes. Se necesita conocer los datos personales de los clientes (nombre, apellidos, dni, dirección y fecha de nacimiento). Cada producto tiene un nombre y un código, así como un precio unitario. Un cliente puede comprar varios productos a la empresa, y un mismo producto puede ser comprado por
varios clientes.
Los productos son suministrados por diferentes proveedores. Se debe tener en cuenta que un producto sólo puede ser suministrado por un proveedor, y que un proveedor puede suministrar diferentes productos. De cada proveedor se desea conocer el NIF, nombre y dirección.

Se desea diseñar la base de datos de un Instituto. En la base de datos se desea guardar
los datos de los profesores del Instituto (DNI, nombre, dirección y teléfono). Los
profesores imparten módulos, y cada módulo tiene un código y un nombre. Cada alumno
está matriculado en uno o varios módulos. De cada alumno se desea guardar el nº de
expediente, nombre, apellidos y fecha de nacimiento. Los profesores pueden impartir
varios módulos, pero un módulo sólo puede ser impartido por un profesor.

Se desea diseñar una base de datos para almacenar y gestionar la información
empleada por una empresa dedicada a la venta de automóviles, teniendo en cuenta los
siguientes aspectos:
La empresa dispone de una serie de coches para su venta. Se necesita conocer la
matrícula, marca y modelo, el color y el precio de venta de cada coche.
Los datos que interesa conocer de cada cliente son el NIF, nombre, dirección, ciudad y
número de teléfono: además, los clientes se diferencian por un código interno de la
empresa que se incrementa automáticamente cuando un cliente se da de alta en ella. Un
cliente puede comprar tantos coches como desee a la empresa. Un coche determinado
solo puede ser comprado por un único cliente.
El concesionario también se encarga de llevar a cabo las revisiones que se realizan a
cada coche. Cada revisión tiene asociado un código que se incrementa automáticamente
por cada revisión que se haga. De cada revisión se desea saber si se ha hecho cambio de
filtro, si se ha hecho cambio de aceite, si se ha hecho cambio de frenos u otros. Los
coches pueden pasar varias revisiones en el concesionario

Mantenimiento categorías

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <title>Mantenimiento categorías</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>

        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>

    </head>
    <body>
        <?php
        require_once 'libreria.php';
        $nombre = filter_input(INPUT_GET, 'nombre', FILTER_SANITIZE_STRING);
        $id = filter_input(INPUT_GET, 'idcategoria', FILTER_VALIDATE_INT);
        if (!empty($nombre)) {
            insertarCategoria($nombre);
        }
        if (!empty($id)) {
            borrarCategoria($id);
        }

        $id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
        $nombre = filter_input(INPUT_GET, 'categoria', FILTER_SANITIZE_STRING);
        if (!empty($id) && !empty($nombre)) {
            editarCategoria($id, $nombre);
        }
        ?>
        <h1>Mantenimiento categorías</h1>
        <form>Nombre: <input type="text" name="nombre"><input type="submit" class="btn btn-success"></form>
        <hr/>
        <?php
        listadoCategorias();
        ?>
    </body>
</html>
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
       <title>Editar categoría</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>

        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>

    </head>
    <body>
        <?php
        require_once 'libreria.php';
        $id = filter_input(INPUT_GET, 'idcategoria', FILTER_VALIDATE_INT);
        if(!empty($id)){
            $categoria=getCategoria($id);
            
        }
        ?>
        <form action="categorias.php">
            <input type="hidden" name="id" value="<?=$categoria['idcategorias']?>">
            Nombre: <input type="text" name="categoria" value="<?=$categoria['nombre']?>">
            <input type="submit" class="btn btn-success">
        </form>
        <a href="categorias.php">Volver a categorías</a>
    </body>
</html>
<?php

function conectar() {
    $server = "localhost";
    $user = "root";
    $password = "";
    $db = "tienda";
    try {
        $conn = new PDO("mysql:host=$server;dbname=$db", $user, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"]);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $conn;
    } catch (Exception $ex) {
        echo $ex->getMessage();
    }
}

function insertarCategoria($name) {
    try {
        $conn = conectar();
        $st = $conn->prepare("insert into categorias (nombre) values (:name)");
        $st->execute(['name' => $name]);
    } catch (Exception $ex) {
        echo $ex->getMessage();
    }
}

function borrarCategoria($id) {
    try {
        $conn = conectar();
        $st = $conn->prepare("delete from categorias where idcategorias=:id");
        $st->execute(['id' => $id]);
    } catch (Exception $ex) {
        echo $ex->getMessage();
    }
}

function editarCategoria($id,$nombre){
    try{
        $conn=conectar();
        $st=$conn->prepare("update categorias set nombre=:nombre where idcategorias=:id");
        $st->execute(['nombre'=>$nombre,'id'=>$id]);
    } catch (Exception $ex) {

    }
}
function getCategorias() {
    try {
        $conn = conectar();
        $st = $conn->prepare("select * from categorias");
        $st->execute();
        $categorias = $st->fetchAll();
        return $categorias;
    } catch (Exception $ex) {
        echo $ex->getMessage();
    }
}

function getCategoria($id) {
    try {
        $conn = conectar();
        $st = $conn->prepare("select * from categorias where idcategorias=:id");
        $st->execute(['id' => $id]);
        $categoria = $st->fetch();
        return $categoria;
    } catch (Exception $ex) {
        echo $ex->getMessage();
    }
}

function listadoCategorias() {
    $categorias = getCategorias();
    ?>
    <table class="table">
        <tr><td>Id</td><td>Nombre</td><td>Acciones</td></tr>
        <?php
        foreach ($categorias as $categoria) {
            ?>
            <tr><td><?= $categoria['idcategorias'] ?></td>
                <td><?= $categoria['nombre'] ?></td>
                <td>
                    <a href="?idcategoria=<?= $categoria['idcategorias'] ?>">Borrar</a>
                    <a href="editar_categoria.php?idcategoria=<?= $categoria['idcategorias'] ?>">Editar</a>
                </td>
            </tr>
            <?php
        }
        ?>
    </table>
    <?php
}