|
|
pl:dydaktyka:ztb:2012:projekty:rss:logiczny [2012/07/03 22:43] ztb2012 |
pl:dydaktyka:ztb:2012:projekty:rss:logiczny [2019/06/27 15:50] |
====== Projekt logiczny ====== | |
| |
==== 1. Schemat bazy ==== | |
**Schemat bazy danych** | |
| |
{{:pl:dydaktyka:ztb:2012:projekty:rss:n_baza.png|}} | |
| |
==== 2. Słowniki danych ==== | |
| |
**Base** | |
* base_name – PK, VARCHAR(30) – unikalna nazwa bazy przeszukiwań, będąca jednocześnie kluczem głównym | |
* created – DATE, NOT NULL – data utworzenia bazy przeszukiwań | |
* notify_type – VARCHAR(6), NOT NULL – typ powiadomień ustawiony w bazie – email, sms lub żaden. | |
* frequency – INTEGER, NOT NULL – częstotliwość sprawdzania czy w bazie zaszły zmiany | |
* base_type – INTEGER, NOT NULL - typ bazy (rss lub html) | |
\\ | |
| |
**Channels** | |
* channelid – PK, INTEGER – id kanału rss | |
* Uri – VARCHAR(200), NOT NULL – adres kanału | |
* title – VARCHAR(100), NOT NULL – tytuł kanału | |
* last_modified – DATE – data ostatnich zmian w kanale rss | |
* base_name – FK, VARCHAR(30) – klucz obcy, nazwa bazy zawierającej dany kanał | |
\\ | |
| |
**Entries** | |
* entryid – PK, INTEGER – id wpisu | |
* title – VARCHAR(40), NOT NULL – tytuł wpisu | |
* uri – VARCHAR(200), NOT NULL – adres do szczegółów dotyczących wpisu | |
* description – TEXT, NOT NULL – skrótowy opis wpisu | |
* created – DATE – data utworzenia wpisu | |
* reprted - INTEGER, NOT NULL – czy wpis został już zaraportowany | |
* channeled – FK, INTEGER – klucz obcy, id kanału zawierającego ten wpis | |
\\ | |
| |
**Keyword** | |
* keywordid PK, INTEGER - id słowa kluczowego | |
* word – VARCHAR(100), NOT NULL – wartość słowa kluczowego | |
* base_name – FK, VARCHAR(30) – klcuz obcy, baza zawierająca to słowo kluczowe | |
\\ | |
| |
==== 3. Analiza zależności funkcyjnych i normalizacja tabel ==== | |
| |
** 1NF ** | |
\\ | |
Relacja jest w pierwszej postaci normalnej (1NF) wtedy i tylko wtedy gdy wszystkie atrybuty przyjmują wartości elementarne (atomiczne). Atomowość danych jest ściśle powiązana z ich typem (nazwanym i skończonym zbiorem wartości). Pierwsza postać normalna jest konieczna, aby tabelę można było nazwać relacją. | |
| |
Nasza baza spełnia te warunki. Wszystkie wartości w tabelach są atomiczne. | |
| |
**2NF** | |
\\ | |
Relacja R jest w drugiej postaci normalnej (2NF) wtedy i tylko wtedy, gdy nie zawiera zależności częściowych, tzn. żadna zależność częściowa nie wynika logicznie ze zbioru F. | |
| |
Wszystkie tabele w naszej bazie posiadają klucz prosty, więc ich atrybuty zależą w całości od klucza głównego. Baza jest w 2NF. | |
| |
**3NF** | |
\\ | |
Relacja jest w trzeciej postaci normalnej tylko wtedy, gdy jest w drugiej postaci normalnej i każdy atrybut wtórny jest tylko bezpośrednio zależny od klucza głównego. Innymi słowy wymaga usunięcia wszelkich pól niezwiązanych z kluczem głównym. | |
| |
Z powodu, że każda tabela w naszej bazie posiada klucz prosty, jej atrybuty są w całości zależne od klucza głównego. Więc warunek postaci 3NF jest również spełniony. | |
| |
| |
==== 4. Projektowanie operacji na danych ==== | |
| |
//Dodanie nowego kanału// | |
<code sql>INSERT INTO channels(uri, title, last_modified, base_name) | |
VALUES ('www.pudelek.pl','Najświeższe ploteczki', '2012-06-01', 'Ploteczki');</code> | |
\\ | |
| |
//Pobranie wszystkich baz do modelu jListy// | |
<code sql>SELECT base_name, type, created, notify_type, frequency | |
FROM bases;</code> | |
\\ | |
| |
//Zmiana częstotliwości odświeżania danej bazy// | |
<code sql>UPDATE bases | |
SET frequency=5 | |
WHERE base_name='Ploteczki';</code> | |
\\ | |
| |
//Pobranie wszystkich wpisów z konkretnej bazy przeszukiwań// | |
<code sql>SELECT e.entryid, e.title, e.uri, e.description, e.created, e.reported, ch.uri | |
FROM entries e | |
JOIN channels ch USING (channelid) | |
WHERE ch.base_name=’Nazwa_bazy’;</code> | |