标签: normalization

优化新手:有多少“罪”是冗余?

我已经开发了一段时间,但以前从未真正处理过数据库/缩放问题。这突然发生了变化,我发现自己陷入了深渊。

我有 2 个 SQL 表,例如:

VOTES
vote_id (PK)
question_id (FK)
user_id (FK)
option_id (FK) <The option the user voted for>
Run Code Online (Sandbox Code Playgroud)

“问题”表如下所示:

QUESTIONS
question_id (PK)
option_1 (FK --> Options)
option_2 (FK --> Options)
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,我经常必须检索某个问题的所有 option_1 票(或 option_2 票)的总和。这是目前通过选择 count where question_id = [@question.id] 和 option_id = [@question.option_1.id]"

我猜将 option_1_votes 和 option_2_votes 列添加到“问题”表并在每次添加投票时增加它们会更快。但归根结底,这是冗余数据。

所以,作为一个对数据库设计原则一无所知的人,这里的经验法则是什么?顶级 DBA 会只是添加列,还是尝试其他解决方案?

干杯...

normalization database-design optimization

3
推荐指数
1
解决办法
172
查看次数

根据关系创建哪些表

我们正在计划一个带有新数据库 (MS SQL Server) 的新系统。

我们有以下实体和以下关系:

实体: 俱乐部、链、支付类型等...

关系: 俱乐部-连锁(MM);(Clubs_Chains)-佣金(1-1);Clubs-Chains-PaymentTypes (MM);

  • 佣金是一个包含百分比值的数字字段,不是实体。

我们希望对数据库进行规范化。我们考虑了以下选项,但我们不确定它是否是该场景的最佳解决方案:

Clubs_Chains 表: ClubChainID PK int 不为 null,ClubID FK int 不为 null,ChainID FK int 不为 null,Commission int

Clubs_Chains_PayMethod 表: ClubChainID PK int 不为空,PaymentTypeID PK int 不为空

谢谢!

normalization database-design relational-theory

3
推荐指数
1
解决办法
156
查看次数

用于日志记录的标准化表结构

如何规范化具有四列的表以记录单行的最新活动:

  1. 创建于

  2. 由...制作

  3. 修改时间

  4. 修改者

我们有几十个表,都有这 4 列。有没有办法或模式以有效和灵活的方式对此进行规范化?

normalization database-design sql-server log

3
推荐指数
1
解决办法
3110
查看次数

将关系分解为 2NF 然后分解为 3NF

我目前正在为我的考试而学习,我遇到的麻烦是如何将具有给定函数依赖关系的关系 R 分解为 2NF 然后是 3NF。

例如对于以下 R 和函数依赖项:

R = {A, B, C, D, E, F, G, H, I, J}

Functional dependencies F = ( {A, B} -> {C}, {A} -> {D, E}, {B} -> {F}, {F} -> {G, H}, {D} -> {I,J} }

我知道首先你必须找出闭包来找到 R 的键,我已经完成了,键是 {A,B},现在这就是我卡住的地方。除了 2NF 和 3NF 的定义之外,我的教科书没有给出任何关于如何解决这个问题的例子。

关于我如何做到这一点的示例将不胜感激。

normalization database-design

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

超类型/子类型的历史表设计

我正在设计一个跟踪 IT 硬件的资产管理数据库。我决定使用超类型/子类型设计。我现在想跟踪设备更改的历史记录。我想使用单独的历史表,但我无法决定如何跟踪对子类型表所做更改的历史记录。

如果我为每个子类型表使用单独的历史表,我可以通过将它们与超类型历史表连接来重建记录,除非子类型历史表独立于超类型历史表而改变。独立地,我的意思是对超类型表中的数据进行了x 次更新,创建了x 次超类型历史记录,对子类型表进行了y 次更新,创建了y次子类型历史记录。如果在同一天进行更改,我将如何重建记录?

这是对超类型/子类型的良好使用,还是我应该对表进行非规范化?否则,有人可以建议任何方法来解决此类设计的历史问题吗?

使用 MS SQL Server 2008。

这是一个非常简化的 ERD:

ERD

sql-server-2008 normalization database-design

3
推荐指数
1
解决办法
1936
查看次数

归一化或不归一化几个不同的值

假设在 Postgres 数据库中,您有一个名为 的表party,它可以有少于 5 个明确定义的,party_types例如“人”或“组织”。

您会将存储party_typeparty表中(例如party_type = 'Person')还是对其进行标准化(例如party.party_type = 1party_type(id, name) = (1, 'Person'))?
为什么?

postgresql normalization database-design dimensional-modeling

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

数据库规范化 - 一个字段可以指向另一个吗?

这听起来像是一个愚蠢的问题,但我是一名刚接触数据库设计的软件开发人员......所以这个概念对我来说很有意义,但也许这并不适用——

表 B 中记录中的字段是否可以简单地指向表 A 中记录中的字段?

示例:如果我有两个表……一个包含所有员工的列表,另一个包含这些员工进出办公室的历史记录。

Employees
    ID
    First Name
    Last Name

History
    Event ID
    Event Time
    Event Type (Entry/Exit)
    EmployeeID
Run Code Online (Sandbox Code Playgroud)

我可以使用外键在 History.EmployeeID 和 Employees.ID 之间建立关系,但会重复数据。那么 History.EmployeeID 和 Employees.ID 将包含相同的 ID 号,它们将在内存中存储两次。因此,如果我进入数据库并更改了 John Smith 的员工 ID,则需要编写脚本或其他内容来搜索数据库并查找/替换该 ID。

我想要的是Employees.ID 包含真实ID 和History.EmployeeID 只包含一个指向Employees.ID 的指针。这样,如果我更新 John Smith 的 ID,更改将集中到一张表中的一个字段。

这可能吗?

谢谢

mysql normalization database-design

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

ID 反模式是什么以及如何?

什么是ID 反模式为什么/在什么情况下它被视为反模式

id 反模式在每个表中都有一个唯一的 ID 列。为每条新记录生成 ID。为什么这是一个反模式?– 安德鲁沃尔夫 11 分钟前

normalization primary-key uniqueidentifier design-pattern

3
推荐指数
1
解决办法
1531
查看次数

如何对日程进行建模并保持良好的约束条件?

我有一些数据很难建模。特别是,我不确定如何确保我拥有唯一的数据。这是我将团队分配到商店的时间表。一个团队将连续两天被安排在同一家商店,但我必须确保在给定的时间段(或“周期”)内安排他们不超过 2 天。

数据的电子表格表示如下所示。

Cycle Team    Store   Date
1     1       1   1-Dec
1     1       1   2-Dec
1     1       2   3-Dec
1     1       2   4-Dec
1     1       3   8-Dec
1     1       3   9-Dec
1     1       4   10-Dec
1     1       4   11-Dec
1     2       10  1-Dec
1     2       10  2-Dec
1     2       11  3-Dec
1     2       11  4-Dec
1     2       12  8-Dec
1     2       12  9-Dec
1     2       13  10-Dec
1     2       13  11-Dec
Run Code Online (Sandbox Code Playgroud)

我已经有了一个运行良好的团队/商店交叉引用,但达到这种粒度级别是新的。如果我可以在 Team/Store/Date 上放置一个复合主键会很容易,但我显然不能这样做,或者我只能存储两个预定日期中的一个。

迄今为止,我已经考虑使用具有一对多关系的日期表,从 Team/Store 到现在,但这似乎并没有解决唯一性问题,并增加了一些愚蠢的开销。

有没有人对如何建模有任何建议?

该标签似乎不合适,因为这确实是我问的一个抽象设计问题,但我使用的是 …

normalization database-design date

3
推荐指数
1
解决办法
748
查看次数

这是在 1NF 中吗?

我是一名 A-level 计算机科学专业的学生,​​我的老师无法解释如何让我从 UNF 升至 1NF。我已经研究了一点,但我不确定这张表(下面)是否在 1NF 中。我已经将 UNF 格式留给了我认为是 1NF。

UNF格式

联合国基金会

我认为是1NF

1NF

normalization database-design

3
推荐指数
1
解决办法
713
查看次数