MySQL Cwiczenia: Difference between revisions
												
				Jump to navigation
				Jump to search
				
Cesar Chew (talk | contribs) No edit summary  | 
			
(No difference) 
 | 
Latest revision as of 18:17, 24 November 2014
<slideshow style="nobleprog" headingmark="⌘" incmark="…" scaled="true" font="Trebuchet MS" >
- title
 - MySQL ćwiczenia
 - author
 - Leszek Albrzykowski (NobleProg Ltd)
 
</slideshow>
Etap projektowanie bazy danych ⌘
- Jakie informacje chcemy przechowywać i jakie będą relacje między obiektami?
 - Jakie tabele powinna zawierać baza?
 - Diagram bazy
 - Zatwierdzenie projektu
 
1.1. Jakie informacje chcemy przechowywać? ⌘
Baza będzie zawierać informacje o szkoleniach, instruktorach oraz planie oferowanych szkoleń. Harmonogram powninien zawierać datę rozpoczęcia i zakończenia szkolenia oraz referencję do tematu szkolenia oraz instruktora. Zakładamy, że jeden instruktor może prowadzić wiele szkoleń i jedno szkolenie może być prowadzone przez wielu instruktorów.
1.2. Jakie tabele powinna zawierać baza? ⌘
- course - Tabela zawierająca szkolenia
 - trainer - Tabela zawierająca instruktorów
 - schedule - Tabela zawierająca harmonogram szkoleń (tabela asocjacyjna/łącza)
 
1.3. Diagram bazy ⌘
1.3.1. Szkolenia ⌘
1.3.2. Instruktorzy ⌘
1.3.3. Harmonogram szkoleń ⌘
1.3. Zatwierdzenie projektu ⌘
- Czy projekt jest zgodny z wymaganiami?
 - Czy schemat można zoptymalizować?
 - Dodatkowe uwagi?
 
Implementacja projektu ⌘
- Połączenie z serwerem oraz wybór bazy
 - Utworzenie tabel
 - Wypełnienie tabeli danymi
 - Pobieranie danych oraz łączenie tabel
 - Zadania
 
2.1. Połączenie z serwerem oraz wybór bazy ⌘
 mysql -h localhost -u root -p
 CREATE DATABASE nobleprog;
 USE nobleprog;
2.2. Utworzenie tabel ⌘
 CREATE TABLE IF NOT EXISTS `course` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `course` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `course` (`course`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='Courses offer' AUTO_INCREMENT=5 ;
 CREATE TABLE IF NOT EXISTS `instructor` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `first_name` varchar(255) NOT NULL,
  `last_name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `first_name` (`first_name`,`last_name`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='Instructors' AUTO_INCREMENT=19 ;
 CREATE TABLE IF NOT EXISTS `schedule` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `begin_at` datetime NOT NULL,
  `finish_at` datetime NOT NULL,
  `course` int(10) unsigned NOT NULL,
  `instructor` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `instructor` (`instructor`),
  KEY `course` (`course`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='Schedule' AUTO_INCREMENT=12 ;
 ALTER TABLE `schedule`
  ADD CONSTRAINT `schedule_ibfk_1` FOREIGN KEY (`course`) REFERENCES `course` (`id`),
  ADD CONSTRAINT `schedule_ibfk_2` FOREIGN KEY (`instructor`) REFERENCES `instructor` (`id`);
2.3. Wypełnienie tabeli danymi ⌘
Dane dostępne jako pliki *.txt w dziale z wgranymi plikami
\N	MariaDB Database Administration
\N	SQL Fundamentals
\N	SQL Advanced in MySQL
\N	MySQL Database Administration- course
 
\N	Bernard	Szlachta
\N	Grzegorz	Pruszczynski
\N	Filip	Stachecki
\N	Lukasz	Sokolowski
\N	Leszek	Albrzykowski- instructor
 
\N	2012-10-10 09:00:00	2012-10-12 17:00:00	1	14
\N	2012-10-10 09:00:00	2012-10-12 17:00:00	1	15
\N	2012-10-12 09:00:00	2012-10-14 17:00:00	2	15
\N	2012-10-12 09:00:00	2012-10-14 17:00:00	1	14
\N	2012-10-10 09:00:00	2012-10-12 17:00:00	3	16
\N	2012-10-13 09:00:00	2012-10-15 17:00:00	3	17
\N	2012-10-13 09:00:00	2012-10-15 17:00:00	1	14
\N	2012-10-10 09:00:00	2012-10-12 17:00:00	4	18
\N	2012-10-10 09:00:00	2012-10-12 17:00:00	2	18
\N	2012-10-17 09:00:00	2012-10-19 17:00:00	2	14
\N	2012-10-17 09:00:00	2012-10-19 17:00:00	1	14- schedule
 
2.4. Pobieranie danych oraz łączenie tabel ⌘
 SELECT * FROM course;
- Pobranie wszystkich danych z tabeli szkoleń
 
 SELECT * FROM course ORDER BY begin_at ASC ;
 SELECT * FROM course ORDER BY begin_at DESC ;
- Pobranie wszystkich danych z tabeli harmonogramu według dat (DESC|ASC)
 
 SELECT * 
 FROM schedule AS s
 JOIN course AS c ON s.course = c.id
 JOIN instructor AS i ON s.instructor = i.id
- Złączenie tabel
 
2.5. Zadania ⌘
- Pobrać informacje jakie kursy prowadzi instruktor X
 - Pobrać instruktorów których nazwiska zaczynają się na literę S
 - Pobrać informację ile szkoleń zawiera oferta
 - Do tabeli instruktorów dodać pole email (jaki typ pola i jaka długość, czy jakieś dodatkowe opcje?)
 - Do czego możemy wykorzystać klucze obce?
 - Jak ograniczyć dostęp do utworzonej bazy dla wybranego użytkownika?
 


