呵呵,举一个《数据库设计原理》中的经典的例子
学生,老师,学院
一个学生有很多老师,可能在很多学院上课
一个老师教很多学生,可能属于几个学院
一个学院有很多学生,老师
那么设计成3个表是最优的。
设计的原理就是把实际的问题最简化!!查询时不需要太多的判断,而且,多个表可以减低查询的数据量。具体设计的时候要根据实际要查询的分类来建立相映的表。争取做到一个查询只操作一个表。如果数据表已经成型没有办法更改结构,那么精简记录生成临时表是比较好的做法
比如说,在论坛上,很少有人会查询1年前的记录(当然象精华,FAQ例外),那么把一年前的记录生成临时表,而且现在查询时可以跳过一定的记录。
其实简化查询的方法有很多。我觉得最重要的是根据自己的要求来实行浅妄薄见,望与斟酌

解决方案 »

  1.   

    按日期啦,一月一个表。例如  aaa_200201   aaa_200202
      

  2.   

    按日期啦、、、例如一个月一张表: aaa_200201     aaa_200202
      

  3.   

    _Shakespeare(网络骑士)可是常客,说得很有道理!你的爆光利很高啊!
      

  4.   

    表结构很多时候并不重要,数据库性能优化才是重要的。比如,在MySQL中,分成多个表是不如少些好的,这些东西只是经验和知识,不是真理。
      

  5.   

    尽量按3NF范式设计。合理建索引,优化你的SQL语句,够了!
      

  6.   

    另外很重要的两点
    临时表的建立
    CREATE TEMPORARY TABLE tmp_table (
       name    VARCHAR(10) NOT NULL,
       value   INTEGER     NOT NULL
    )
    索引
    当MySQL发现列上有一个索引,它将使用索引而不是执行一个全表扫描。这节省了CPU时间(不必读取所有可能的值)和磁盘I/O,而且它改善了并发性,因为MySQL只锁定表足够长的时间来获得所需的行(基于它在索引中找什么)。当你在表中有大量的数据,最终的改善可能非常明显。 
    CREATE TABLE albums ( 
    id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    title VARCHAR(80)NOT NULL, INDEX title_idx (title) 
    ); 
    正如你所见的,语句只是简单地在定义后增加了一个INDEX行告诉MySQL在albums表中的title列上创建名为title_idx的索引。你可以给一个表增加多个索引,就像你可在表中有多个列一样。单个索引也可以有多个列合成。 要给现有的表加上一个索引而不是重建表,你可以用ALTER TABLE命令: ALTER TABLE albums ADD INDEX title_idx (title) 还有很多值得注意的地方,比如说WHERE子句怎么优化,这些都要靠你对数据库的理解才能做好
    关于范式的理解http://zyrl.51.net/ja/d4/d4-3.htm 讲的还算比较清楚,不过要学数据库就要学真正的数据库,oracle---我的看法
     浅妄薄见,望与斟酌
      

  7.   

    还有就是对sql语句进行优化,这个对于查询速度的优化有一定的帮助。
      

  8.   

    还有就是对sql语句进行优化,这个对于查询速度的优化有一定的帮助。