相关疑难解决方法(0)

首次数据库设计:我是否过度工程?

背景

我是CS的第一年学生,我兼职为我爸爸的小生意做准备.我没有任何实际应用程序开发经验.我用Python编写脚本,用C编写一些课程,但没有这样的.

我父亲有一个小型培训业务,目前所有课程都通过外部网络应用程序进行安排,记录和跟进.有一个导出/"报告"功能,但它非常通用,我们需要特定的报告.我们无权访问实际数据库来运行查询.我被要求建立一个自定义报告系统.

我的想法是创建通用CSV导出并导入(可能使用Python)它们每晚都在办公室中托管的MySQL数据库中,从那里我可以运行所需的特定查询.我没有数据库方面的经验,但了解非常基础知识.我已经阅读了一些关于数据库创建和普通表单的内容.

我们可能很快就会开始拥有国际客户,因此我希望数据库在发生这种情况时不会爆炸.我们目前还有几家大公司作为客户,有不同的部门(例如ACME母公司,ACME医疗保健部门,ACME身体护理部门)

我提出的架构如下:

  1. 从客户的角度来看:
    • 客户是主要的表
    • 客户与他们工作的部门相关联
      • 各部门可以分散在一个国家:伦敦的人力资源部门,斯旺西的市场营销部门等.
      • 部门与公司的部门相关联
    • 部门与母公司相关联
  2. 从班级角度来看:
    • 会话是主要的表格
      • 教师与每个课程相关联
      • 每个会话都有一个statusid.例如0 - 已完成,1 - 已取消
      • 会话被分组为任意大小的"包"
    • 每个包都分配给客户端

我在一张纸上"设计"(更像是潦草书写)模式,试图将其标准化为第三种形式.然后我把电源插头插上到MySQL Workbench和它使人们都非常适合我:
(点击查看全尺寸图片)

替代文字http://maian.org/img/schema.png

示例查询我将运行

  • 哪些有信用额度的客户仍处于闲置状态(未来未安排课程的客户)
  • 每个客户/部门/部门的出勤率是多少(以每个会话中的状态ID来衡量)
  • 一个月有一个老师有几节课
  • 标记出勤率低的客户
  • 人力资源部门的自定义报告,其部门的人员出勤率

问题(S)

  • 这是过度工程还是我正确的方向?
  • 对于大多数查询,是否需要连接多个表会导致性能大幅下降?
  • 我已经向客户添加了"lastsession"列,因为它可能是一个常见的查询.这是一个好主意还是我应该严格规范化数据库?

谢谢你的时间

mysql database schema database-design database-normalization

245
推荐指数
5
解决办法
2万
查看次数

数据库设计:一个巨大的表还是单独的表?

目前我正在设计一个供我们公司使用的数据库.我们正在使用SQL Server 2008.该数据库将保存从多个客户收集的数据.该数据库的目标是获取多个客户的总基准数.

最近,我特别担心一张桌子会变得非常大.每个客户拥有大约20.000.000行数据,数据库中很快就会有30个客户(如果不是更多).将在此表上进行大量查询.我已经注意到性能问题和暂时被锁定的用户.

我的问题是,我们将来能够处理这个表,还是将这个表拆分成每个客户的小表更好?


更新:自我们第一次创建表格以来,现在已经有半年了.按照下面的建议,我创建了一些巨大的表格.从那时起,我一直在试验索引,并决定在前两列(医院代码和部门代码)上的聚集索引,如果我们有企业版,我们将对表进行分区.直到最近,这种设置工作正常,正如Galwegian预测的那样,性能问题正在兴起.重建索引需要很长时间,用户互相锁定,查询经常花费的时间超过应有的时间,对于大多数查询,首先将相关部分数据复制到临时表中,在临时表上创建索引并运行查询.这不是应该的样子.因此,我们正在考虑购买企业版以使用分区表.如果购买无法完成,我计划使用变通方法在Standard Edition中完成分区.

sql-server database-design data-warehouse sql-server-2008

24
推荐指数
3
解决办法
2万
查看次数