请回答以下二个场景你们在设计库表的时候是怎么考虑的
第一个场景:
1.一个web系统。
2.其中一个业务处理单界面需要选择很多列参数项(操作比较频繁,并发创建数据量较大,并且需要保留至少二年的数据以供对比查询,数据库上百万应该很正常)
3.每列参数都有自己的对应的参数表。(大概8列参数)
4.填写后跳转到浏览界面的列表中浏览结果,要求显示这些参数的内容(可能对应的选择参数包含几列信息,例如其中选择一个器材显示对应器材参数表的器材单价/单位/描述/备注等)
5.创建的纪录不是必须要求和参数保持同步。
处理模式:
1.在这种情况下是设计一个大表包含需要显示的全部列信息(做数据冗余处理,不保持前后一致性)设置若干索引,以确保高效的读取。
2.还是建立小表保存这些参数列的外建关系,用视图或者联合查询提取所需的全部列信息。第二个场景:
1.在第一场景基础上纪录必须要求和参数保持同步。
处理模式:
未知,怎么考虑都只能用第二种方式,但是显示的效率是不是在数据量大的情况下太低?就算加上分页一个7/8张表的关联查询也不会快吧。而且要求填写后马上显示列表,实在头疼!

解决方案 »

  1.   

    ljs1519可能没明白我的意思:
    针对第二个回答:我不是在讨论分页与否那是开发需要做的事情。
    第一个回答可能没看清楚我说的两个场景:我说的大表“做数据冗余处理,不保持前后一致性”是说把参数关联的信息都存入大表,而不是说只存一个id做关联。也就是的不是8个字段而已,而是那些关联的重要参数全部在本表保存。
    继续期待~~~~~~~其实不是一定要高手~~~~大家有想法也讨论一下~~~如果我没说清楚~~~我再补充
      

  2.   


    对于缓存过期机制, 如果是ado.net2.0+sql 2005的话, 可过事件通知功能, 由数据库主动通过数据变更就可以了, 如果不是, 则可以考虑在数据库中建立一个数据变更标志表, 记录数据变化的表名及更新日志, 在属性表上建立触发器, 有数据变化就更新数据变更标志表的记录, 而前台随时扫描(或者按需扫描)数据变更标志表, 如果数据库中的更新日期比缓存的日期新, 则重新取数据
      

  3.   

    关于数据显示的问题, 如果楼主的前台程序中, 属性能够保持是最新的, 则可以直接在客户机上与属性关联显示数据, 不需要所有数据来自数据库服务器.如果要来自服务器, 则要考虑表设计, 一般来说, 经常使用的属性建议考虑存储在主表中一齐, 但较少用的属性则没有必要了.
    另外, 数据量大的情况, 考虑按时间来建立分区表(sql 2000中是分区视图)
      

  4.   

    ljs1519可能没明白我的意思:
    针对第二个回答:我不是在讨论分页与否那是开发需要做的事情。
    第一个回答可能没看清楚我说的两个场景:我说的大表“做数据冗余处理,不保持前后一致性”是说把参数关联的信息都存入大表,而不是说只存一个id做关联。也就是的不是8个字段而已,而是那些关联的重要参数全部在本表保存。
    继续期待~~~~~~~其实不是一定要高手~~~~大家有想法也讨论一下~~~如果我没说清楚~~~我再补充
    +++++++++++++++++++++++++++++++++++++++++++++++++
    如果如您所说,那你的做一个大表的想法是非常错误的想法!这样的数据结构连2NF都达不到。将来的维护会有很多问题。
      

  5.   

    ljs1519感谢参与~~~2NF虽然没有达到,但是场景很关键,请看这个要求
    第一个场景主要的要求是表中创建的是历史数据,当参数更新后已经创建的历史数据不要求更新,而是必须保持不变。
    基于这个需求,根本不存在维护的必要,需要的就是保持数据被创建时的历史痕迹。也是我为什么设计大表的原因!
    ~~~其实我困惑的原因有一点就是学院派设计是否一定要遵循,很想知道别人是怎么设计考虑的?