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..feb201f --- /dev/null +++ b/infotro/SDi/labs/database/README.md @@ -0,0 +1,365 @@ +

+Lab databases +

+ +---------- +# Create & populate tables +![relations.png](relations.png) + + +# 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 +With JOIN keyword
+26 elements in 0,0003 seconds +```sql +SELECT `Code`.`codeValue`, `FunctionList`.`modelID`, `FunctionList`.`functionID` +FROM `Code` +JOIN `FunctionList` +ON `Code`.`codeID` = `FunctionList`.`codeID`; +``` +> [!NOTE|label:Result] +> "codeValue","modelID","functionID"
+> "7","1","1"
+> "124","1","10"
+> "125","1","16"
+> "547","1","9"
+> "698","1","4"
+> "59409854","3","8"
+> "78546723","3","7"
+> "81298355","3","16"
+> "84578346","3","9"
+> "84793478","3","10"
+> "95847623","3","14"
+> "458945040","2","17"
+> "458945041","2","18"
+> "458945042","2","2"
+> "458945043","2","3"
+> "458945044","2","21"
+> "458945045","2","22"
+> "1164736495","4","19"
+> "1164736496","4","20"
+> "1184894580","4","11"
+> "1184894581","4","12"
+> "1184894582","4","13"
+> "1184894589","4","15"
+> "1948573644","4","5"
+> "1948573645","4","6"
+> "1948573646","1","8" + + +Without JOIN keyword
+26 elements in 0,0002 seconds +```sql +SELECT `Code`.`codeValue`, `FunctionList`.`modelID`, `FunctionList`.`functionID` +FROM `Code`, `FunctionList` +WHERE `Code`.`codeID` = `FunctionList`.`codeID`; +``` +> [!NOTE|label:Result] +> "codeValue","modelID","functionID"
+> "7","1","1"
+> "124","1","10"
+> "125","1","16"
+> "547","1","9"
+> "698","1","4"
+> "59409854","3","8"
+> "78546723","3","7"
+> "81298355","3","16"
+> "84578346","3","9"
+> "84793478","3","10"
+> "95847623","3","14"
+> "458945040","2","17"
+> "458945041","2","18"
+> "458945042","2","2"
+> "458945043","2","3"
+> "458945044","2","21"
+> "458945045","2","22"
+> "1164736495","4","19"
+> "1164736496","4","20"
+> "1184894580","4","11"
+> "1184894581","4","12"
+> "1184894582","4","13"
+> "1184894589","4","15"
+> "1948573644","4","5"
+> "1948573645","4","6"
+> "1948573646","1","8" + +#### 7) All `codeValue` for `modelID 4` +```sql +SELECT `Code`.`codeValue` +FROM `Code` +CROSS JOIN `FunctionList` +ON `Code`.`codeID` = `FunctionList`.`codeID` +WHERE `FunctionList`.`modelID` = 4; +``` +> [!NOTE|label:Result] +> "codeValue"
+> "1948573644"
+> "1948573645"
+> "1184894580"
+> "1184894581"
+> "1184894582"
+> "1184894589"
+> "1164736495"
+> "1164736496" + +#### 8) The number of `codeValue` for `modelID 4` +```sql +SELECT COUNT(`Code`.`codeValue`) +FROM `Code` +JOIN `FunctionList` +ON `Code`.`codeID` = `FunctionList`.`codeID` +WHERE `FunctionList`.`modelID` = 4; +``` +> [!NOTE|label:Result] +> 8 + +#### 9) All `codeValue` and `functionLabel` for Model with `modelName “SDi-Tuner-01”` +```sql +SELECT `Code`.`codeValue`, `Function`.`functionLabel` +FROM `Model` +JOIN `FunctionList` ON `Model`.`modelID` = `FunctionList`.`modelID` +JOIN `Code` ON `FunctionList`.`codeID` = `Code`.`codeID` +JOIN `Function` ON `FunctionList`.`functionID` = `Function`.`functionID` +WHERE `Model`.`modelName` like 'SDi-Tuner-01' +``` +> [!NOTE|label:Result] +> "codeValue","functionLabel"
+> "1948573644","Frequency down"
+> "1948573645","Frequency up"
+> "1184894580","Preset 1"
+> "1184894581","Preset 2"
+> "1184894582","Preset 3"
+> "1184894589","Save preset"
+> "1164736495","Tune down"
+> "1164736496","Tune up" + +#### 10) The number of `Function` items per `modelName` +```sql +SELECT `Model`.`modelName`, COUNT(`FunctionList`.`functionID`) +FROM `Model` +LEFT JOIN `FunctionList` ON `Model`.`modelID` = `FunctionList`.`modelID` +GROUP BY `Model`.`modelName` +``` +> [!NOTE|label:Result] +> "modelName","COUNT(`FunctionList`.`functionID`)"
+> "MHC-900","6"
+> "SDi-Ampli-01","6"
+> "SDi-CdDvd-01","6"
+> "SDi-Tuner-01","8"
+> "UBP-X800M2","0"
+> "TX-RZ70","0" + + +#### 11) All `functionLabel` and `description` with their corresponding `modelID`, `functionID` and `codeID`. Be sure to include all `functionLabel` even if they are not used in any device ! +```sql +SELECT `Function`.`functionLabel`, `Function`.`description`, `FunctionList`.`modelID`, `FunctionList`.`codeID` +FROM `FunctionList` +RIGHT JOIN `Function` ON `FunctionList`.`functionID` = `Function`.`functionID`; +``` +> [!NOTE|label:Result] +> "functionLabel","description","modelID","codeID"
+> "Back","Fast backwards","1","1"
+> "Bass down","Raise up the low frequencies. Cut off frequency : 200 Hz","2","14"
+> "Bass up","Reduce the low frequencies. Cut off frequency : 200 Hz","2","15"
+> "Forward","Fast forwards","1","5"
+> "Frequency down","Tunes down","4","24"
+> "Frequency up","Tunes up","4","25"
+> "Next","Plays to the next track","3","7"
+> "Open/Close tray","Open or close the player's tray","1","26"
+> "Open/Close tray","Open or close the player's tray","3","6"
+> "Pause","Pauses the current track","1","4"
+> "Pause","Pauses the current track","3","9"
+> "Play","Plays the selected track","1","2"
+> "Play","Plays the selected track","3","10"
+> Preset 1","Select the preset 1","4","20"
+> "Preset 2","Select the preset 2","4","21"
+> "Preset 3","Select the preset 3","4","22"
+> "Previous","Plays to the previous track","3","11"
+> "Save preset","Stores the current frequency to a preset","4","23"
+> "Stop","Stops the current track","1","3"
+> "Stop","Stops the current track","3","8"
+> "Treble down","Reduce the high frequencies.Cut off frequency : 4000 Hz","2","12"
+> "Treble up","Raise up the high frequencies. Cut off frequency : 4000 Hz","2","13"
+> "Tune down","Slow down fine tuning","4","18""Tune up","Slow up fine tuning","4","19"
+> "Volume down","Raise up the volume","2","16"
+> "Volume up","Reduce the volume","2","17"
+> "Input source","Select the source of the input (BD, DVD, HDMI, ...)",NULL,NULL
+> "Audio format","Select the Audio format to use with the current source (2ch stereo, 5.1, 7.2, 9.2, ...)",NULL,NULL + + +#### 12) All `functionLabel` and `description` of non-used functions in any device. (insert beforehand a new function in `Function`, with no reference in the `FunctionList` table). Add an unused function in the CSV file +```sql +SELECT `Function`.`functionLabel`, `Function`.`description` +FROM `FunctionList` +RIGHT JOIN `Function` ON `FunctionList`.`functionID` = `Function`.`functionID` +WHERE `FunctionList`.`modelID` is NULL +``` +> [!NOTE|label:Result] +> "functionLabel","description"
+> "Input source","Select the source of the input (BD, DVD, HDMI, ...)"
+> "Audio format","Select the Audio format to use with the current source (2ch stereo, 5.1, 7.2, 9.2, ...)"
+> "Test Function","This function should not be referenced in the FunctionList" + + +#### 13) Add a VIEW to your DB to list all HEVs appliances with their `manufacturerName`, `modelName`, `typeLabel`, `functionLabel` and `codeValue` +```sql + +``` +> [!NOTE|label:Result] +> + + +# Test constraints + +#### 1) Try to insert a record in a table using an existing primary key. +```sql +INSERT INTO `Code`(`codeId`, `codeValue`) +VALUES (1, 42) +``` +> [!NOTE|label:Result] +> #1062 - Duplicate entry '1' for key 'Code.PRIMARY' + +#### 2) Choose a table with at least a foreign key. Try to insert a record in that table, with the foreign key pointing to a non-existent record. +```sql +INSERT INTO `Model`(`modelId`, `manufacturerID`, `typeID`, `modelName`) +VALUES (7, 1, 42, 'dummy test') +``` +> [!NOTE|label:Result] +> #1452 - Cannot add or update a child row: a foreign key constraint fails (`sdi04`.`Model`, CONSTRAINT `Model_ibfk_2` FOREIGN KEY (`typeID`) REFERENCES `Type` (`typeID`) ON DELETE RESTRICT ON UPDATE RESTRICT) + +#### 3) Try to delete the record with name “`HEVs`” in the table `Manufacturer`. Explain why this operation fails. +```sql +DELETE FROM `Manufacturer` +WHERE `Manufacturer`.`manufacturerName` like 'HEVs' +``` +> [!NOTE|label:Result] +> #1451 - Cannot delete or update a parent row: a foreign key constraint fails (`sdi04`.`Model`, CONSTRAINT `Model_ibfk_1` FOREIGN KEY (`manufacturerID`) REFERENCES `Manufacturer` (`manufacturerID`) ON DELETE RESTRICT ON UPDATE RESTRICT) + +#### 4) Modify the foreign key definition in `Model` so that “`HEVs`” entry in `Manufacturer` can be deleted. The foreign key `manufacturerID` value in `Model` should be set to `NULL`. Test that it works as expected. +```sql +ALTER TABLE `Model` CHANGE `manufacturerID` `manufacturerID` INT NULL; + +ALTER TABLE `Model` DROP FOREIGN KEY `Model_ibfk_1`; + +ALTER TABLE `Model` ADD CONSTRAINT `Model_ibfk_1` +FOREIGN KEY (`manufacturerID`) REFERENCES `Manufacturer`(`manufacturerID`) +ON DELETE SET NULL ON UPDATE RESTRICT; + +DELETE FROM `Manufacturer` +WHERE `Manufacturer`.`manufacturerName` like 'HEVs' +``` +> [!NOTE|label:Result] +> 1 row deleted + +#### 5) We want now to delete all `Model` entries somehow related to a manufacturer when the latter is deleted from `Manufacturer`. To implement this feature, we should add a constraint `ON DELETE CASCADE` for the `manufacturerID` foreign key in `Model`. Try this and notice that this does not work. The reason is the following: you are not allowed to delete an entry in `Model` because a `FunctionList` refers to that entry. You could use `ON DELETE CASCADE` for all foreign keys, but deleting a single `Manufacturer` can trigger deletion of a good portion of the database! +```sql +ALTER TABLE `Model` DROP FOREIGN KEY `Model_ibfk_1`; + +ALTER TABLE `Model` ADD CONSTRAINT `Model_ibfk_1` +FOREIGN KEY (`manufacturerID`) REFERENCES `Manufacturer`(`manufacturerID`) +ON DELETE CASCADE ON UPDATE CASCADE; + +DELETE FROM `Manufacturer` +WHERE `Manufacturer`.`manufacturerName` like 'Sony' +``` +> [!NOTE|label:Result] +> #1451 - Cannot delete or update a parent row: a foreign key constraint fails (`sdi04`.`FunctionList`, CONSTRAINT `FunctionList_ibfk_3` FOREIGN KEY (`modelID`) REFERENCES `Model` (`modelID`) ON DELETE RESTRICT ON UPDATE RESTRICT) + + +```sql +DELETE FROM `Manufacturer` +WHERE `Manufacturer`.`manufacturerName` like 'Onkyo' +``` +> [!NOTE|label:Result] +> 1 row deleted 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 */;