关系数据库 - 设计领域的更好选择

时间:2016-12-16 10:01:04

标签: mysql database database-design

我正在尝试为我的桌面设计选择两个选项。

在两个表中" CLASS"和"部分"下面列出了每个" YEAR-CLIENT_ID-CLS_SEQ"在" CLASS"中的组合表," SECTION"中有一个或多个条目。表

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

的信息: 表CLASS和SECTION都是主数据,即手动完成设置并且不进行编程更新。 还有其他子事务表,其中使用了CLS_SEQ和SEC_SEQ;并且所有事务表还包含YEAR和CLENT_ID列。

查询: 在表格设计方面,哪个选项更适合CLS_SEQ和SEC_SEQ?

由于它们是主数据设置,我的偏好是选项1,因为它提供了数据的清晰度,并且使其易于维护,年复一年。同样在选项1中,还可以通过传递YEAR和CLIENT_ID(在应用程序中始终可用)以及CLS_SEQ和/或SEC_SEQ来检索其他事务表中的数据。

我的问题是,在检索数据时是否会对性能产生任何严重影响?在使用选项1加入?因为每当我需要使用来自任何子/事务表的连接从CLASS或SECTION表中提取“某些数据”时,我总是需要使用YEAR和CLIENT_ID字段。

另请注意,只有最近4年的记录将保留在所有主表和交易表中,其余记录将被存档。

1 个答案:

答案 0 :(得分:0)

我建议选择选项1.

查看您的数据集(以及您将在4年后清除的事实),它看起来不会具有真正影响性能的记录数量。此外,如果性能是一个问题,还有其他选项(查询调优,定义索引等),可以在担心如何构建数据之前完成。

从技术上讲,在选项2中,您使用区段序列作为唯一ID。如果您使用它来获取其他表,它肯定会使它成为单个主键,因此稍快一些。

另一方面,您将增加应用程序的复杂性,因为您可能需要在内存中维护一个额外的密钥。

在我看来,它不值得麻烦。 DB足够快,可以处理一个连接。它不值得使你的代码复杂化。