Tag: 数据库标准化

首次数据库devise:我是否过度工作?

背景 我是CS的一年级学生,我兼职为爸爸做小生意。 我在现实世界的应用程序开发方面没有任何经验。 我已经在Python中编写脚本,在C中做了一些课程,但没有这样的。 我父亲有一个小型的培训业务,目前所有课程都通过外部networking应用程序进行安排,logging和跟进。 有一个导出/“报告”function,但它是非常通用的,我们需要特定的报告。 我们没有访问实际的数据库来运行查询。 我被要求build立一个自定义的报告系统。 我的想法是创build通用的CSV导出和导入(可能用Python)到每天晚上在办公室托pipe的MySQL数据库中,从那里我可以运行所需的特定查询。 我没有数据库方面的经验,但了解非常基础。 我已经读了一些关于数据库创build和正常forms。 我们可能会很快开始有国际客户,所以我希望数据库在发生这种情况时不会发生爆炸。 我们目前也有一些大公司作为客户,有不同的部门(如ACME母公司,ACME保健部门,ACME人体保健部门) 我提出的模式如下: 从客户angular度来看: 客户是主桌 客户与他们工作的部门有联系 部门可以分散在一个国家:伦敦的人力资源部门,斯旺西的市场部门等等。 部门与公司的分工有关 部门与母公司有联系 从课堂angular度看: 会议是主桌 每个课程都有一位老师 每个会话都有一个statusid。 例如0 – 完成,1 – 取消 会话被分组为任意大小的“包” 每个包都分配给一个客户 我在一张纸上“devise”(更像是潦草的)图案,试图使其保持归一化到第三种forms。 然后我把它插入到MySQL Workbench中,这对我来说非常有用: ( 点击这里查看全尺寸图片 ) 替代文字http://maian.org/img/schema.png 示例查询我将会运行 哪些还有信用的客户是不活跃的(未来没有上课的客户) 每个客户/部门/部门的出席率是多less(由每个会话中的状态ID来衡量) 一个月里老师有几堂课 举报率低的国旗客户 HR部门的定制报告,其分部的人员出席率 问题(S) 这是过度工程还是我正确的方式? 是否需要为大多数查询连接多个表导致性能下降? 我已经为客户添加了“lastsession”列,因为这可能是一个常见的查询。 这是一个好主意,还是应该保持数据库严格标准化? 谢谢你的时间

规范化:“重复组”是什么意思?

我读过不同的教程,看到了正常化的不同例子,特别是第一种正常forms的“重复组”的概念。 从他们那里我已经知道,重复组是“多种”的多值属性(例如这里和这里 )。 但是,在将ERM(实体关系模型)映射到RDM(关系数据模型)的过程中,通过包含父表中的外键,我们已经为每个多值属性创build了单独的表? 参考: 这个 其次,这些“重复组”本质上是横向排列在同一行,还是同一个列中可能出现同一个值,即一次又一次的同一个属性值,也是一个重复组,应该消除? 在这个例子中,英语的价值是一再重复的。 这是一个重复的组? 如果我删除它使另一个表的主题名称和Module_ID(外键)SUBJECT,这就是我所得到的。 当然,它摆脱了重复的价值,但我不知道这是否是正确的。 这样对吗?

在数据库列中存储分隔列表真的很糟糕吗?

想象一下带有一组checkbox的网页表单(可以select任何一个或全部)。 我select将它们保存在数据库表的一列中存储的逗号分隔值列表中。 现在,我知道正确的解决scheme是创build第二个表并正确地规范数据库。 实施简单解决scheme的速度更快,我希望快速获得该应用程序的概念validation,而不必花费太多时间。 我认为节省的时间和简单的代码在我的情况下是值得的,这是一个可靠的deviseselect,还是应该从一开始就规范化呢? 更多的上下文,这是一个小的内部应用程序,基本上取代了存储在共享文件夹中的Excel文件。 我也在问,因为我正在考虑清理这个程序,使之更易于维护。 在这里面有些事情我并不完全满意,其中之一就是这个问题的主题。