Если хотиете работать с шаблонами и пхп, то присмотритесь к
smarty.... мануал на нее и сами скрипты
http://www.smarty.net/manual/ru/
Структура может быть разной...
1) через переменные:
т.е. у нас запрос идет всегда к одной единственной странице index.php к которой просто передаются переменные
index.php?razdel=first&do=registration&part=second
а дальше срипт нам подкружает наш первый раздел в первом разделе переходит на страничку регистрации, и эта страничка отображает вторую часть нашей регистрации
Для примера могу привести SlaedCMS
2) через "хитрые" переменные:
тут отличается от первого пункта тем, что переменные у нас "хитрые"
index.php?razdel=first_registration_second&do=some
данная переменная разбивается на пункты и загружается сразу страничка /first/registration/second
точнее не загружается а подгружается её скрипт в нудном для нас месте. Структура сайта здесь расчитана на то что у нас все нужные нам странички расположены в определенных папках, притом каждая следующая папка может наследовать какой-то код предыдущей простым присоединением include("../some_script.php"); ну и заодно еще получаем переменную do
(если честно... то глючный способ, но вполне достойный жизни)
3) через "папки":
данный вариант удобен при работе со смарти, т.е. у нас есть папочка к примеру registration в котрой есть свой index.php и при переходе на some.sait/registration/ мы загрузим этот index.php в котром уже прописан какой-то скрипт и загружается соответсвующий шаблон, ну и естественно мы можем передавать туда переменные
some.sait/registration/second/?do=login
плюсы: модульный тип, т.е. можно написать модуль который будет подгружаться при указании razdel=module_name (или во втором случае это первый пункт до подчеркивания, в третьем это вообще вся папка) и дальше уже будет работать этот модуль, есть возможность работы с шаблонами, в любом из трех вариантов ты отсылаеш пользователя на нужный тебе скрипт с нужными параметрами (переменными) который уже считывает с нужной базы данных информацию согласно параметрам.
Организация же базы данных это отдельный вопрос и каждая таблица зависи от возлагаемых на нее функций. Для примера если взять какой-нить блог. 1 таблица с именами разделов(каждый раздел со своим id) 2-я с именами пользователей (все пользователи под своими id) 3-я с названиями и содержаниями постов, в котором присутствуют столбик с иди пользователя написавшего это, иди раздела; 4-я таблица это таблица ответов, в которой есть столбик иди поста, столбик сомого сообщения и столбик иди пользователя. Почему вынес иди отдельно? потомучто цифры проще передавать в ссылках браузера, они занимают меньше места в бд, да и поиск по ним производить проще %)