This guide provides comprehensive requirements and best practices for completing TAREA projects in the DWCS course. Follow these guidelines to ensure your submissions meet professional standards.
-- Example from TAREA-04: Project DatabaseCREATE DATABASE proyecto DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;USE proyecto;-- Stores tableCREATE TABLE IF NOT EXISTS tiendas ( id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(100) NOT NULL, tlf VARCHAR(13) NULL);-- Product families/categoriesCREATE TABLE IF NOT EXISTS familias ( cod VARCHAR(6) PRIMARY KEY, nombre VARCHAR(200) NOT NULL);-- Products tableCREATE TABLE IF NOT EXISTS productos ( id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(200) NOT NULL, nombre_corto VARCHAR(50) UNIQUE NOT NULL, descripcion TEXT NULL, pvp DECIMAL(10, 2) NOT NULL, familia VARCHAR(6) NOT NULL, CONSTRAINT fk_prod_fam FOREIGN KEY (familia) REFERENCES familias(cod) ON UPDATE CASCADE ON DELETE CASCADE);-- Inventory/stock table (many-to-many)CREATE TABLE IF NOT EXISTS stocks ( producto INT, tienda INT, unidades INT UNSIGNED NOT NULL, CONSTRAINT pk_stock PRIMARY KEY (producto, tienda), CONSTRAINT fk_stock_prod FOREIGN KEY (producto) REFERENCES productos(id) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT fk_stock_tienda FOREIGN KEY (tienda) REFERENCES tiendas(id) ON UPDATE CASCADE ON DELETE CASCADE);
-- Employees authenticationCREATE TABLE empleados ( id INT AUTO_INCREMENT PRIMARY KEY, usuario VARCHAR(20) UNIQUE, pass VARCHAR(64) NOT NULL);-- Customers registrationCREATE TABLE IF NOT EXISTS clientes ( id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(50) NOT NULL, apellido1 VARCHAR(50) NOT NULL, apellido2 VARCHAR(50), direccion TEXT NULL, telefono VARCHAR(10), usuario VARCHAR(20) UNIQUE, pass VARCHAR(64) NOT NULL);-- Sales/transactions tableCREATE TABLE IF NOT EXISTS ventas ( id INT AUTO_INCREMENT NOT NULL, ticket INT NOT NULL, id_producto INT NOT NULL, id_cliente INT NOT NULL, id_empleado INT, id_tienda INT, pvp DECIMAL(10, 2) NOT NULL, fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP, CONSTRAINT pk_ventas PRIMARY KEY (id, ticket), CONSTRAINT fk_ventas_productos FOREIGN KEY (id_producto) REFERENCES productos(id) ON UPDATE CASCADE ON DELETE RESTRICT, CONSTRAINT fk_ventas_clientes FOREIGN KEY (id_cliente) REFERENCES clientes(id) ON UPDATE CASCADE ON DELETE RESTRICT, CONSTRAINT fk_ventas_tienda FOREIGN KEY (id_tienda) REFERENCES tiendas(id) ON UPDATE CASCADE ON DELETE SET NULL, CONSTRAINT fk_ventas_empleado FOREIGN KEY (id_empleado) REFERENCES empleados(id) ON UPDATE CASCADE ON DELETE SET NULL);
CASCADE Actions Matter:
ON DELETE RESTRICT: Prevent deletion if referenced
ON DELETE CASCADE: Delete dependent records automatically
ON DELETE SET NULL: Keep record but remove reference
-- Create database user with appropriate permissionsDROP USER IF EXISTS gestor@'localhost';CREATE USER gestor@'localhost' IDENTIFIED BY 'secreto';GRANT ALL ON tarea06.* TO gestor@'localhost';
Your project must include a visual representation of the database structure.
Entity-Relationship (ER) Diagram
Relational Model Diagram
Shows entities, attributes, and relationshipsTools:
MySQL Workbench
draw.io
dbdiagram.io
Must Include:
All tables as entities
Primary keys marked
Foreign key relationships with lines
Cardinality indicators (1:1, 1:N, N:M)
Shows tables with columns and data typesExample from TAREA-04:
TIENDAS-------PK: id (INT) nombre (VARCHAR) tlf (VARCHAR)PRODUCTOS---------PK: id (INT) nombre (VARCHAR) nombre_corto (VARCHAR) descripcion (TEXT) pvp (DECIMAL)FK: familia → FAMILIAS(cod)
For Simple Projects (TAREA-02, TAREA-03):You may use a flatter structure without src/ and public/ directories, but still organize SQL files in a dedicated folder.
Always Use Prepared Statements:Never concatenate user input directly into SQL queries. Always use prepared statements with parameter binding to prevent SQL injection.
<?phpsession_start();// Check if user is logged inif (!isset($_SESSION['nombre'])) { header('Location: login.php'); exit();}require_once 'conexion.php';// Rest of your code...?>
# TAREA-XX: [Project Name]## DescriptionBrief description of the project and its purpose.## Prerequisites- PHP 7.4 or higher- MySQL 5.7 or higher- Apache web server- Composer (if using external libraries)## Installation### 1. Database Setup```sql-- Import the database schemasource sql/esquema.sql-- Import sample datasource sql/datos.sql