W ostatnich dniach zacząłem czytać dość ciekawą książkę o antywzorcach języka SQL (recenzja tej książki ukaże się na łamach bogu jak ją skończę czytać). Ale przechodząc do meritum to akurat jestem przy antywzorcu, który się nazywa „Przechodzenie na czerwonym świetle”.

Czytając o tym antywzorcu języka SQL od razu odnalazłem analogię w IP.Board. Sam antywzorzec jest dość prosty bo polega na tym, że tworzymy pole np. VARCHAR(255) i wrzucamy tam ID kategorii, których dany wpis dotyczy. Tego typu rozwiązania są nagminnie stosowane w IP.Board np. do przetrzymywania uprawnień dla danego forum i innych tego typu danych.

Pytanie tylko czy taki antywzorzec można wyeliminować a jeśli tak to jakim kosztem? Odpowiedź nie jest do końca taka prosta, ponieważ owszem możemy takie coś wyeliminować, ale wtedy musimy stworzyć tabelę pomocniczą, która będzie przechowywać relację grupa-forum. Z jednej strony wydaje się, że to nie jest żaden problem, ale takie rozwiązanie niesie za sobą też pewne konsekwencje: po pierwsze musimy dla każdej grupy tworzyć taki rekord, co wiąże się z dodatkowymi insertami do bazy i odpada stosowanie znaku * (gwiazdka) dla wszystkich grup. Po drugie jak dodamy nową grupę, to trzeba będzie dodawać nowe rekordy bo nie mamy oznaczenia dla danej grupy. Kolejnym powodem jest to, że przy edycji forum trzeba usunąć rekordy i dodać nowe zamiast zaktualizować wartość w jednym polu tabeli.

Patrząc na to z perspektywy wzorców SQL jest to nieładne rozwiązanie, natomiast patrząc na to z perspektywy programisty aplikacji dla IP.Board muszę przyznać, że mam mieszane uczucia, ale bardziej przychylne do tego, żeby jednak stosować ten antywzorzec, choć tak się nie powinno tylko dlatego, że możemy używać chociażby znak * dla reprezentacji „wszyscy”.

Write A Comment

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.