2011-04-27 58 views
1

我创建一个字老师:OOP最佳实践的PHP/MySQL

我创建了一个数据库,多个表:

TblTheme (themeId, name);<br> 
TblGroup (groupId, name, themeIdFK);<br> 
TblWeek (weekId, week, groupIdFK);<br> 
tblWord (wordId, word, weekIdFK);<br> 

所以themeIdFK,groupIdFK和weekIdFK外键。

在PHP中,我想显示所有的主题。如果一个主题被按下,显示所有的组等。 我应该创建什么类。 (如类主题,组,周和字) 什么是检索数据的最佳方式,而不会重载数据库?

回答

0

首先,如果列包含相同的数据,那么它应该有相同的名字:

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模式
  • 字 - 通过模型使用,持有你的日常单词和一些关于它的其他信息
  • WordMapper - 负责文字类的存储和检索实例

基本上此设置将执行DataMapper pattern

由于附加表只保存关于单词的信息,因此每个表都有一个类没有意义。为了免得这是我的看法。

虽然,我不确定你是否需要制作一个复杂的应用程序,只是为了制作每日一词的事情..也许只是作为练习。

+0

这很清楚,它将是一个相当复杂的应用程序。那么你说什么最好把这个主题,分组和星期数据存储在单词类中? 谢谢! – Oritm 2011-04-27 20:32:51

+0

数据库存储和应用程序逻辑是完全不同的系统。从应用程序的角度来看,“主题”,“组”和“日期”仅仅是用于选择单词['$ word = new Word; $ mapper = new WordMapper; $ mapper-> had_group('foobar') - > load($ word);']。他们不像完整的实体。 – 2011-04-28 01:16:38

+0

亲爱的人downvoted,但没有足够的胆量留下评论:请你解释一下,这个答案有什么不对? – 2013-09-16 22:49:43