#php #mysql #oop #structure #overloading
#php #mysql #ооп #структура #перегрузка
Вопрос:
Я создаю word teacher:
Я создал базу данных с несколькими таблицами:
TblTheme (themeId, name);<br>
TblGroup (groupId, name, themeIdFK);<br>
TblWeek (weekId, week, groupIdFK);<br>
tblWord (wordId, word, weekIdFK);<br>
Итак, themeIdFK, groupIdFK и weekIdFK являются внешними ключами.
В PHP я хочу показать все темы. Если выбрана тема, покажите все группы и т.д.. Какие классы я должен создать. (например, классы Theme, group, week и word) и каков наилучший способ извлечения данных без перегрузки базы данных?
Ответ №1:
Прежде всего, если столбец содержит одинаковые данные, то у него должно быть то же имя:
Themes (theme_id, name);
Groups (group_id, name, theme_id);
Затем, когда вы создаете JOIN , вы можете записать его как
SELECT
Themes.name AS theme,
Groups.name AS group
FROM Themes
LEFT JOIN Groups USING theme_id
Что касается вашего первоначального вопроса :
Я бы выбрал классы :
- Учитель — это была бы ваша модель MVC
- Word — используется моделью, содержит ваше ежедневное слово и некоторую дополнительную информацию о нем
- WordMapper — отвечает за хранение и извлечение экземпляров класса Word
В принципе, эта настройка будет реализовывать шаблон DataMapper.
Нет смысла создавать класс для каждой таблицы, потому что дополнительные таблицы содержат информацию только о словах. По крайней мере, так я это вижу.
Хотя, я не уверен, нужно ли вам создавать сложное приложение, просто для того, чтобы делать повседневные вещи .. возможно, только в качестве упражнения.
Комментарии:
1. Это предельно ясно, это будет довольно сложное приложение. Итак, как вы говорите, лучше всего хранить данные о теме, группе и неделе в классе word? Спасибо!
2. Хранилище базы данных и логика приложения — это совершенно разные системы. С точки зрения приложения «тема», «группа» и «день» являются только ограничениями для выбора слова [
$word = new Word; $mapper = new WordMapper; $mapper->had_group('foobar')->load( $word );
]. Они не действуют как полноценные объекты.3. Уважаемый человек, который проголосовал против, но у которого не хватило смелости оставить комментарий: не могли бы вы объяснить, пожалуйста, что не так с этим ответом?