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

Usunięta treść Dodana treść
Linia 22:
`news_num` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin2utf8;</nowiki></span>
 
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.
Linia 38:
PRIMARY KEY (`id`),
KEY `category_id` (`category_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin2utf8;</nowiki></span>
 
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.
Linia 52:
PRIMARY KEY (`id`),
KEY `news_id` (`news_id`,`date`)
) ENGINE=MyISAM DEFAULT CHARSET=latin2utf8;</nowiki></span>
 
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ć.