PHP/Studium przypadku/System newsów: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Nie podano opisu zmian
 
Linia 13:
 
Zacznijmy od tabeli kategorii:
<sourcesyntaxhighlight lang="sql">CREATE TABLE `categories` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(40) NOT NULL,
Linia 19:
`news_num` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;</sourcesyntaxhighlight>
 
Oprócz typowych pól informacyjnych: '''title''' oraz '''description''' (tytuł i opis), mamy też pole '''news_num''' przechowujące aktualną liczbę newsów wewnątrz kategorii. Musimy pamiętać, aby nasz system poprawnie zmniejszał i zwiększał jego zawartość w trakcie edycji i wprowadzania nowych elementów do bazy.
 
Następne w kolejności są newsy:
<sourcesyntaxhighlight lang="sql">CREATE TABLE `news` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(128) NOT NULL,
Linia 34:
PRIMARY KEY (`id`),
KEY `category_id` (`category_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;</sourcesyntaxhighlight>
 
Tabela zaczyna się od pól informacyjnych. Z punktu widzenia projektanta bazy najistotniejsze są jednak dwa ostatnie. '''category_id''' przechowuje ID kategorii, do której należy news; w tym miejscu tworzymy naszą relację. '''comment_num''' działa na podobnej zasadzie, jak w kategoriach. Dzięki temu nie trzeba będzie wykonywać skomplikowanych zapytań przy pobieraniu listy newsów, aby pokazać tam jednocześnie ilość komentarzy.
 
Na samym końcu zapoznamy się z tabelą komentarzy:
<sourcesyntaxhighlight lang="sql">CREATE TABLE `comments` (
`id` int(11) NOT NULL auto_increment,
`news_id` int(11) NOT NULL,
Linia 47:
PRIMARY KEY (`id`),
KEY `news_id` (`news_id`,`date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;</sourcesyntaxhighlight>
 
Zwróć uwagę, w jaki sposób założony jest podwójny indeks na pola '''news_id''' oraz '''date'''. Gdyby utworzyć tutaj dwa osobne indeksy, w zasadzie nic byśmy nie uzyskali. Popatrzmy na to tak: nigdy nie wyświetlamy wszystkich komentarzy, jakie mamy w bazie. Zawsze są one powiązane z jakimś konkretnym newsem, dlatego tak istotne jest odzwierciedlenie tego w strukturze indeksów. Przy osobnych indeksach pole '''date''' zostanie posortowane globalnie, a wybierając komentarze tylko dla pojedynczego newsa, system DB i tak będzie musiał przeskanować całą tabelę, aby je względem tejże daty wybrać.
Linia 56:
Napiszemy teraz plik ''functions.php''. Umieścimy w nim różne podstawowe funkcje. W tej chwili jest ich stosunkowo niewiele: łączenie się z bazą, kontrola długości wprowadzonego tekstu, prymitywne zabezpieczenie przed floodem. Plik ten przyda Ci się jednak podczas samodzielnej rozbudowy; prawdopodobnie rozrośnie się wtedy znacznie. Jego zawartość wygląda następująco:
 
<sourcesyntaxhighlight lang="php"><?php
 
function initSystem()
Linia 92:
} // end validTextField();
 
?></sourcesyntaxhighlight>
 
Opis poszczególnych funkcji: