diff --git a/index.html b/index.html
index cc31608..773e2ab 100644
--- a/index.html
+++ b/index.html
@@ -156,6 +156,7 @@
+
diff --git a/infotro/SDi/labs/database/README.md b/infotro/SDi/labs/database/README.md
new file mode 100644
index 0000000..0b50de5
--- /dev/null
+++ b/infotro/SDi/labs/database/README.md
@@ -0,0 +1,109 @@
+
+
+----------
+# Create & populate tables
+
+
+
+# Queries
+
+#### 1) the description of all Function
+
+```sql
+SELECT `description` FROM `Function`
+```
+> [!NOTE|label:Result]
+>
+> "description"
+> "Fast backwards"
+> "Raise up the low frequencies. Cut off frequency : 200 Hz"
+> "Reduce the low frequencies. Cut off frequency : 200 Hz"
+> "Fast forwards"
+> "Tunes down"
+> "Tunes up"
+> "Plays to the next track"
+> "Open or close the player's tray"
+> "Pauses the current track"
+> "Plays the selected track"
+> "Select the preset 1"
+> "Select the preset 2"
+> "Select the preset 3"
+> "Plays to the previous track"
+> "Stores the current frequency to a preset"
+> "Stops the current track"
+> "Reduce the high frequencies.Cut off frequency : 4000 Hz"
+> "Raise up the high frequencies. Cut off frequency : 4000 Hz"
+> "Slow down fine tuning"
+> "Slow up fine tuning"
+> "Raise up the volume"
+> "Reduce the volume"
+> "Select the source of the input (BD, DVD, HDMI, ...)"
+> "Select the Audio format to use with the current source (2ch stereo, 5.1, 7.2, 9.2, ...)"
+
+
+#### 2) the `name` of manufacturers that have at least one entry in the `Model` table
+```sql
+SELECT `Manufacturer`.`manufacturerName`
+FROM `Manufacturer`
+WHERE EXISTS( SELECT *
+ FROM `Model`
+ WHERE `Model`.`manufacturerID`=`Manufacturer`.`manufacturerID`)
+```
+> [!NOTE|label:Result]
+>
+> "manufacturerName"
+> "HEVs"
+> "Sony"
+> "Onkyo"
+
+
+
+#### 3) the `modelName` of device models together with the `manufacturerName` of their manufacturers
+```sql
+SELECT `Model`.`modelName`, `Manufacturer`.`manufacturerName`
+FROM `Model`, `Manufacturer`
+WHERE `Model`.`manufacturerID` = `Manufacturer`.`manufacturerID`
+```
+> [!NOTE|label:Result]
+>
+> "modelName","manufacturerName"
+> "MHC-900","Sony"
+> "SDi-Ampli-01","HEVs"
+> "SDi-CdDvd-01","HEVs"
+> "SDi-Tuner-01","HEVs"
+> "UBP-X800M2","Sony"
+> "TX-RZ70","Onkyo"
+
+#### 4) the description of the Function with functionLabel “Stop”
+```sql
+SELECT `Function`.`description`
+FROM `Function`
+WHERE `Function`.`functionLabel` like 'Stop'
+```
+> [!NOTE|label:Result]
+> "description"
+> "Stops the current track"
+
+#### 5) the `functionLabel` for `Function` with `functionID` > 10 and with a `description` containing the word “`preset`” (SQL wildcard character is “`%`”)
+```sql
+SELECT `Function`.`functionLabel`
+FROM `Function`
+WHERE `Function`.`functionID` > '10' AND `Function`.`description` like '%preset%'
+```
+> [!NOTE|label:Result]
+> "functionLabel"
+> "Preset 1"
+> "Preset 2"
+> "Preset 3"
+> "Save preset"
+
+#### 6) the product of the tables `Code` and `FunctionList` (with and without the `JOIN` keyword), as well as the number of entries in the resulting product table
+```sql
+
+```
+> [!NOTE|label:Result]
+>
+
+# Test constraints
\ No newline at end of file
diff --git a/infotro/SDi/labs/database/relations.png b/infotro/SDi/labs/database/relations.png
new file mode 100644
index 0000000..9dc6d71
Binary files /dev/null and b/infotro/SDi/labs/database/relations.png differ
diff --git a/infotro/SDi/labs/database/sdi04.sql b/infotro/SDi/labs/database/sdi04.sql
new file mode 100644
index 0000000..ee5a5db
--- /dev/null
+++ b/infotro/SDi/labs/database/sdi04.sql
@@ -0,0 +1,294 @@
+-- phpMyAdmin SQL Dump
+-- version 5.2.1
+-- https://www.phpmyadmin.net/
+--
+-- Host: db
+-- Generation Time: Feb 22, 2024 at 01:08 PM
+-- Server version: 8.1.0
+-- PHP Version: 8.2.8
+
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+START TRANSACTION;
+SET time_zone = "+00:00";
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+
+--
+-- Database: `sdi04`
+--
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `Code`
+--
+
+CREATE TABLE `Code` (
+ `codeID` int NOT NULL,
+ `codeValue` int NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+--
+-- Dumping data for table `Code`
+--
+
+INSERT INTO `Code` (`codeID`, `codeValue`) VALUES
+(1, 7),
+(2, 124),
+(3, 125),
+(4, 547),
+(5, 698),
+(6, 59409854),
+(7, 78546723),
+(8, 81298355),
+(9, 84578346),
+(10, 84793478),
+(11, 95847623),
+(12, 458945040),
+(13, 458945041),
+(14, 458945042),
+(15, 458945043),
+(16, 458945044),
+(17, 458945045),
+(18, 1164736495),
+(19, 1164736496),
+(20, 1184894580),
+(21, 1184894581),
+(22, 1184894582),
+(23, 1184894589),
+(24, 1948573644),
+(25, 1948573645),
+(26, 1948573646);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `Function`
+--
+
+CREATE TABLE `Function` (
+ `functionID` int NOT NULL,
+ `functionLabel` varchar(64) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
+ `description` varchar(256) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+--
+-- Dumping data for table `Function`
+--
+
+INSERT INTO `Function` (`functionID`, `functionLabel`, `description`) VALUES
+(1, 'Back', 'Fast backwards'),
+(2, 'Bass down', 'Raise up the low frequencies. Cut off frequency : 200 Hz'),
+(3, 'Bass up', 'Reduce the low frequencies. Cut off frequency : 200 Hz'),
+(4, 'Forward', 'Fast forwards'),
+(5, 'Frequency down', 'Tunes down'),
+(6, 'Frequency up', 'Tunes up'),
+(7, 'Next', 'Plays to the next track'),
+(8, 'Open/Close tray', 'Open or close the player\'s tray'),
+(9, 'Pause', 'Pauses the current track'),
+(10, 'Play', 'Plays the selected track'),
+(11, 'Preset 1', 'Select the preset 1'),
+(12, 'Preset 2', 'Select the preset 2'),
+(13, 'Preset 3', 'Select the preset 3'),
+(14, 'Previous', 'Plays to the previous track'),
+(15, 'Save preset', 'Stores the current frequency to a preset'),
+(16, 'Stop', 'Stops the current track'),
+(17, 'Treble down', 'Reduce the high frequencies.Cut off frequency : 4000 Hz'),
+(18, 'Treble up', 'Raise up the high frequencies. Cut off frequency : 4000 Hz'),
+(19, 'Tune down', 'Slow down fine tuning'),
+(20, 'Tune up', 'Slow up fine tuning'),
+(21, 'Volume down', 'Raise up the volume'),
+(22, 'Volume up', 'Reduce the volume'),
+(23, 'Input source', 'Select the source of the input (BD, DVD, HDMI, ...)'),
+(24, 'Audio format', 'Select the Audio format to use with the current source (2ch stereo, 5.1, 7.2, 9.2, ...)');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `FunctionList`
+--
+
+CREATE TABLE `FunctionList` (
+ `modelID` int NOT NULL,
+ `functionID` int NOT NULL,
+ `codeID` int NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+--
+-- Dumping data for table `FunctionList`
+--
+
+INSERT INTO `FunctionList` (`modelID`, `functionID`, `codeID`) VALUES
+(1, 1, 1),
+(1, 10, 2),
+(1, 16, 3),
+(1, 9, 4),
+(1, 4, 5),
+(3, 8, 6),
+(3, 7, 7),
+(3, 16, 8),
+(3, 9, 9),
+(3, 10, 10),
+(3, 14, 11),
+(2, 17, 12),
+(2, 18, 13),
+(2, 2, 14),
+(2, 3, 15),
+(2, 21, 16),
+(2, 22, 17),
+(4, 19, 18),
+(4, 20, 19),
+(4, 11, 20),
+(4, 12, 21),
+(4, 13, 22),
+(4, 15, 23),
+(4, 5, 24),
+(4, 6, 25),
+(1, 8, 26);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `Manufacturer`
+--
+
+CREATE TABLE `Manufacturer` (
+ `manufacturerID` int NOT NULL,
+ `manufacturerName` varchar(64) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
+ `address` varchar(256) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
+ `city` varchar(64) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+--
+-- Dumping data for table `Manufacturer`
+--
+
+INSERT INTO `Manufacturer` (`manufacturerID`, `manufacturerName`, `address`, `city`) VALUES
+(1, 'HEVs', 'Rte du Rawyl 47', 'Sion'),
+(2, 'Sony', 'Rue des Cèdres 2', 'Sion'),
+(3, 'Philips', 'Rue Porte-Neuve 11', 'Sion'),
+(4, 'Samsung', 'Route Cantonale 2', 'Conthey'),
+(5, 'Bang & Olufsen', 'Place du Midi 42', 'Sion'),
+(6, 'STENHEIM', 'Route du Rhône 10', 'Vétroz'),
+(7, 'Onkyo', 'Kitahama Central Building', 'Osaka');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `Model`
+--
+
+CREATE TABLE `Model` (
+ `modelID` int NOT NULL,
+ `manufacturerID` int NOT NULL,
+ `typeID` int NOT NULL,
+ `modelName` varchar(64) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+--
+-- Dumping data for table `Model`
+--
+
+INSERT INTO `Model` (`modelID`, `manufacturerID`, `typeID`, `modelName`) VALUES
+(1, 2, 6, 'MHC-900'),
+(2, 1, 1, 'SDi-Ampli-01'),
+(3, 1, 2, 'SDi-CdDvd-01'),
+(4, 1, 4, 'SDi-Tuner-01'),
+(5, 2, 5, 'UBP-X800M2'),
+(6, 7, 6, 'TX-RZ70');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `Type`
+--
+
+CREATE TABLE `Type` (
+ `typeID` int NOT NULL,
+ `typeName` varchar(64) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
+ `typeLabel` varchar(64) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+--
+-- Dumping data for table `Type`
+--
+
+INSERT INTO `Type` (`typeID`, `typeName`, `typeLabel`) VALUES
+(1, 'Amp', 'Amplifier HiFi'),
+(2, 'CD/DVD player', 'CD and DVD player'),
+(3, 'DVD player', 'DVD player compatible DIVX'),
+(4, 'Tuner', 'FM and DAB Receiver'),
+(5, 'BD player', 'Blu-ray Player'),
+(6, 'AV Receiver', 'Amplifier for Home Cinema');
+
+--
+-- Indexes for dumped tables
+--
+
+--
+-- Indexes for table `Code`
+--
+ALTER TABLE `Code`
+ ADD PRIMARY KEY (`codeID`);
+
+--
+-- Indexes for table `Function`
+--
+ALTER TABLE `Function`
+ ADD PRIMARY KEY (`functionID`);
+
+--
+-- Indexes for table `FunctionList`
+--
+ALTER TABLE `FunctionList`
+ ADD PRIMARY KEY (`modelID`,`functionID`),
+ ADD KEY `codeID` (`codeID`),
+ ADD KEY `functionID` (`functionID`);
+
+--
+-- Indexes for table `Manufacturer`
+--
+ALTER TABLE `Manufacturer`
+ ADD PRIMARY KEY (`manufacturerID`);
+
+--
+-- Indexes for table `Model`
+--
+ALTER TABLE `Model`
+ ADD PRIMARY KEY (`modelID`),
+ ADD KEY `manufacturerID` (`manufacturerID`),
+ ADD KEY `typeID` (`typeID`);
+
+--
+-- Indexes for table `Type`
+--
+ALTER TABLE `Type`
+ ADD PRIMARY KEY (`typeID`);
+
+--
+-- Constraints for dumped tables
+--
+
+--
+-- Constraints for table `FunctionList`
+--
+ALTER TABLE `FunctionList`
+ ADD CONSTRAINT `FunctionList_ibfk_1` FOREIGN KEY (`codeID`) REFERENCES `Code` (`codeID`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ ADD CONSTRAINT `FunctionList_ibfk_2` FOREIGN KEY (`functionID`) REFERENCES `Function` (`functionID`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ ADD CONSTRAINT `FunctionList_ibfk_3` FOREIGN KEY (`modelID`) REFERENCES `Model` (`modelID`) ON DELETE RESTRICT ON UPDATE RESTRICT;
+
+--
+-- Constraints for table `Model`
+--
+ALTER TABLE `Model`
+ ADD CONSTRAINT `Model_ibfk_1` FOREIGN KEY (`manufacturerID`) REFERENCES `Manufacturer` (`manufacturerID`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ ADD CONSTRAINT `Model_ibfk_2` FOREIGN KEY (`typeID`) REFERENCES `Type` (`typeID`) ON DELETE RESTRICT ON UPDATE RESTRICT;
+COMMIT;
+
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;