Kowalski Marcin 156439 Wrocław, dn. 3.06.2009 Jaśkiewicz Kamil 148592. Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami



Podobne dokumenty
Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

BAZA DANYCH SIECI HOTELI

Bazy danych 6. Klucze obce. P. F. Góra

Wyzwalacze (triggery) Przykład

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Przykładowa baza danych BIBLIOTEKA

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Bazy danych. dr inż. Arkadiusz Mirakowski

Hurtownia Świętego Mikołaja projekt bazy danych

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Wykład 5. SQL praca z tabelami 2

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Bazy Danych i Usługi Sieciowe

Bazy danych 10. SQL Widoki

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

CREATE TABLE autorzy ( id_autora SERIAL PRIMARY KEY, imie TEXT, nazwisko TEXT );

Monika Sychla Daniel Smolarek Projekt bazy danych

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Aspekty aktywne baz danych

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Bazy danych i usługi sieciowe

Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie.

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

SQL :: Data Definition Language

Wykład 6. SQL praca z tabelami 3

Autor: Joanna Karwowska

SQL 4 Structured Query Lenguage

Nowe technologie baz danych

Wykład 8. SQL praca z tabelami 5

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Relacyjne bazy danych. Podstawy SQL

Część 1: OLAP. Raport z zajęć laboratoryjnych w ramach przedmiotu Hurtownie i eksploracja danych

Bazy danych. Polecenia SQL

LAB 6 BEGIN TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL,

Bartosz Jachnik - Kino

BAZY DANYCH Cz III. Transakcje, Triggery

Relacyjne bazy danych. Podstawy SQL

Podstawy technologii WWW

41. Zmienne lokalne muszą mieć nazwę, którą poprzedza (maksymalnie 128 znaków) oraz typ (każdy z wyjątkiem: text, ntext oraz image)

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Wykład 05 Bazy danych

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Pakiety podprogramów Dynamiczny SQL

Składowane procedury i funkcje

Programowanie po stronie serwera w SZBD. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

Bazy danych 9. SQL Klucze obce Transakcje

Struktura drzewa w MySQL. Michał Tyszczenko

Laboratorium Technologii Informacyjnych. Projektowanie Baz Danych

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

Bloki anonimowe w PL/SQL

Obowiązuje od wersji

Projektowanie systemów baz danych

Bazy danych 8. Widoki i wyzwalacze. P. F. Góra

Struktura bazy danych

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Programowanie obiektów

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Baza danych do przechowywania użytkowników

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

TABUN_CMS. System zarządzania treścią dla dedykowanej grupy użytkowników. Tabun_CMS 2008 Marcin Biegun, Szymon Bąk

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Język SQL, zajęcia nr 1

Administracja i programowanie pod Microsoft SQL Server 2000

Ćwiczenia 2 IBM DB2 Data Studio

Liczniki odwiedzin. Licznik odwiedzin na plikach

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

PODSTAWY BAZ DANYCH 13. PL/SQL

Comarch ERP XL Business Intelligence Start. Migracja do wersji 2018

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Bazy danych. Projekt prostej biblioteki. 26 stycznia Hubert Anisimowicz,

Relacji między tabelami klucze obce. Schemat bazy danych, wczytanej z pliku create_tables.sql. Klucz obcy jako ograniczenie dla kolumny

Systemowe aspekty baz danych

Programowanie w Ruby

Systemy baz danych Prowadzący: Adam Czyszczoń. Systemy baz danych. 1. Import bazy z MS Access do MS SQL Server 2012:

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

Dokumentacja SQL API 1

Instalacja MySQL.

Projekt-bazy danych Poczta

Baza danych hotel Maciej Gerus

Oracle PL/SQL. Paweł Rajba.

Bazy danych 11. SQL Procedury składowane, kursory i wyzwalacze

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Bazy danych 9. Klucze obce Transakcje

Internetowe bazy danych

Transkrypt:

Kowalski Marcin 156439 Wrocław, dn. 3.06.2009 Jaśkiewicz Kamil 148592 Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami Spis treści Założenia Projektowe...1 Schemat Bazy Danych...1 Funkcje sprawdzające spójność danych...3 Triggery...4 Interfejs Graficzny...5 Literatura...5 Założenia Projektowe Z dostępnych tematów postanowiliśmy zrealizować bazę danych do zarządzania projektami. Cała baza danych miała powstawać na bazie PHP, Apache i MySQL. Interfejs bazy jest graficzny. Cała baza danych wzorowana jest na dotproject opensource'owym narzędziu do zarządzania projektami. Z dotproject zapożyczony jest ogólny schemat bazy danych oraz, po zaaplikowanie pewnych modyfikacji, same definicje tabel w bazie. Zmieniony został silnik na InnoDB. Pozostałe części bazy danych są już efektem naszej pracy. Ponieważ cały schemat bazy danych dotproject jest zbyt duży by dało się go umieścić w dokumencie dodany został jako załącznik do pliku pdf. Schemat Bazy Danych Realizowaną bazą danych jest baza do zarządzania projektami. Ogólny schemat bazy danych przedstawiony został na rysunku 1. -1-

Rys 1 Ogólny Schemat bazy danych Cała baza składa się 8 tabel. Tabele podstawowe to companies firmy, departments departamenty, projects projekty, tasks zadania, contacts kontakty. Tabele te są zależne od siebie w sposób hierarchiczny, z czego najważniejszą tabelą jest companies tabele projects i departments mają klucze obce przypisane do tej tabeli. Następne z kolei do projects lub departments. Dodatkowo istnieją tabele pomocnicze project_departments i task_contacts kojarzące odpowiednio projekty i departamenty oraz ludzi i zadania. Ostatnią tabelą jest tabela dictionary. Tabela ta została tutaj umieszczona w celu uniknięcia definiowania zmiennych typu enum. W początkowym projekcie bazy danych istniało wiele pól wymagających wartości typu enum przykładowo project_priority gdzie mieliśmy wartości: Low, Normal, High. Zrezygnowaliśmy z takiej konstrukcji na rzecz wprowadzenia słownika. Konstrukcja słownika pokazana została na fragmencie kodu nr 1. Frarment kodu nr 2 przedstawia przykładowy wpis w słowniku. Teraz wszystkie wartości typu enum zostały zastąpione wartościami typu TINYINT każda jako klucz obcy do tabeli dictionary. Wszystkie wartości słownikowe wczytywane są do niego już przy tworzeniu bazy danych. -2-

CREATE TABLE IF NOT EXISTS `pm`.`dictionary` ( `dict_id` TINYINT NOT NULL, `dict_group` VARCHAR(30) NOT NULL, `name` VARCHAR (30) NOT NULL, PRIMARY KEY (dict_id) )ENGINE=InnoDb; Fragment kodu nr 1. INSERT INTO dictionary VALUES ('13', "project_priority", "Low"); Fragment kodu nr 2. Aby dane mogły być wygodnie przeglądane do wszystkich tabel korzystających ze słownika utworzyliśmy stosowne widoki. Fragment kodu nr 3 pokazuje przykład takiego widoku. CREATE VIEW vw_companies AS SELECT c.*, ct.name AS type FROM companies AS c LEFT JOIN dictionary AS ct ON c.company_type=ct.dict_id; Fragment kodu nr 3. Funkcje sprawdzające spójność danych Jak wcześniej zaznaczono cała baza danych zbudowana jest w sposób hierarchiczny. Praktycznie każda z podstawowych tabel poza compnies posiada klucze obce do innych tabel. Dlatego też w celu zachowania spójności danych utworzyliśmy funkcje sprawdzające czy dane znajdujące się lub takie które dopiero mają zostać umieszczone do którejś tabeli mają odpowiednie wartości. Ogólna każda funkcja sprawdzająca przyjmuje argumenty czyli dane do sprawdzenia, jako wynik zwraca wartość INT 1 - dane są spójne lub 0 - dane nie są spójne. Fragment kodu nr 4 pokazuje przykładową funkcję sprawdzającą czy dany departament może zajmować się danym projektem. Każdy projekt przypisany jest do jakiejś firmy, każdy departament należy do jakiejś firmy. Jeżeli w obydwu przypadkach to ta sama firma wtedy dane uznajemy za spójne. Funkcje zbudowane są prosto, w działaniu korzystają wyłącznie z poleceń SELECT i IF. Podczas testów funkcje działały poprawnie. Do przedstawionej poniżej istnieje jeszcze jedna, analogiczna funkcja sprawdzająca skojarzenia zadań (tasks) z osobami (contacts). DELIMITER // CREATE FUNCTION Check_Dept_Project(Dept_id INT(10), Project_id INT(10)) -3-

RETURNS INT BEGIN DECLARE s INT(10); SELECT dept_company_id from departments d where d.dept_id=dept_id into s; IF s NOT IN ( SELECT project_company_id FROM projects p WHERE p.project_id=project_id) THEN SET s = '0'; ELSE SET s = '1'; END IF; RETURN s; END // DELIMITER ; Fragment kodu nr 4. Podobne zadanie spełnia funkcja sprawdzająca czy dana wartość słownikowa może być przypisana pod odpowiednie pole (tak, by nie dało się przykładowo przypisać do project_type wartości z company_type). Funkcja ta w analogiczny sposób do opisanych wyżej przyjmuje argumenty i zwraca wynik, które także należy interpretować w taki sam sposób. Triggery Aby powyższe funkcje miały sens należało je zaimplementować w triggerach uruchamianych przed umieszczeniem nowych wartości w tabelach. Wszystkie triggery przygotowane do zachowania spójności danych działają identycznie najpierw uruchamiana jest funkcja, która sprawdza czy dana mogą zostać umieszczone w tablicy. Jeśli funkcja zwróci wartość 1, trigger nic nie robi. Jeśli funkcja zwraca wartość 0 trigger wywołuje błąd poprzez odwołanie się do nieistniejącej kolumny w tablicy departments. Błąd powoduje, że dane nie zostają umieszczone. Jak się okazało był to jedyny sposób by w triggerze odrzucić nowe dane, MySql nie dysponuje funkcjami CANCEL INSERT. Kod takiego triggera pokazany jest na fragmencie kodu nr 5. DELIMITER // CREATE TRIGGER test_dict_company BEFORE INSERT ON `companies` FOR EACH ROW BEGIN DECLARE s INT; SET s='1'; -4-

IF s NOT IN (select Check_Dict (NEW.company_type, 'company_type')) THEN (select `Nieprawidlowa wartosc slownikowa` from departments into s); END IF; END// DELIMITER ; Fragment kodu nr 5 Jak zaznaczono wcześniej baza ma bardzo hierarchiczny charakter. W takim razie należało przemyśleć sytuację w której usunięta zostanie firma, do której przypisane są projekty, do których mamy przypisane zadania. Rozwiązanie, które zaproponowaliśmy polega na kolejnym usuwaniu danych od najmniej znaczącej tabeli (w tym wypadku od tabeli tasks). Wadą takiego rozwiązania jest to, że usunąwszy firmę użytkownik może ze zgrozą stwierdzić, że zniknęła mu połowa bazy danych. Dlatego, już z poziomu php, zaimplementowaliśmy stosowne ostrzeżenie. Interfejs Graficzny Podczas projektowania interfejsu graficznego postawiliśmy na przejrzystość i funkcjonalność. Użytkownik ma dostęp do wszystkich podstawowych tabel Companies, Projects, Tasks, Contacts oraz do definiowania typów słownikowych. Do każdej z powyższych tabel może dodać wpis, usunąć go lub edytować. Edytowalne są wszystkie pola danego wpisu prócz jego pola id (to jest widoczne tylko z poziomu MySql). Wszystkie wartości słownikowe oraz klucze obce do innych tabel odnoszące się do wartości id (przykładowo w tabeli projects pole project_company_id czyli pole informujące jaka firma projektem się zajmuje) są wybieralne z rozwijanej listy, co stanowi dodatkowe zabezpieczenia bazy danych uniemożliwia przypisanie tym polom wartości niepożądanych. Literatura Notatki z wykładu Bazy Danych Podstawy www.dotproject.net www.mysql.com Elizabeth Naramore, Jason Garner, Yann Le Scouarnec, Jeremy Stolz, Micheal K. Glass PHP5, Apache i MySQL od podstaw -5-