小编Pla*_*Ton的帖子

数据库设计:将“模糊”条目链接到关联?

经验丰富的开发人员,缺乏经验的 DBA。

我目前正在开展一个项目,该项目允许用户输入特定包裹的货运车辆名称。例如:

Company: White Star Line
Vehicle: The Titanic
Vehicle Type: Ship
Run Code Online (Sandbox Code Playgroud)

目前,所有这三个字段都是不受限制的文本字段。因此,除了显示之外,数据对于任何事情都是无用的。如果有人输入与上述完全相同的详细信息,则 DB 无法意识到它与具有完全相同条目的记录是同一艘船。

我们不能将这些字段中的任何一个限制为一组预定义的值(太多潜在条目,需要对任何内容开放),但我想统一一些更常用的值。我想知道这样做的最优雅/最有效的方式。

我目前的思路是添加一组额外的带有“认可公司”和“认可车辆”的数据库表,它们与现有表并行工作。因此,如果用户输入“White Star Line”作为公司,并且“认可公司”表中有一个预先批准的条目,则它会在可选的“recognised_company_id”字段中与该公司建立关联。

类似地,如果用户输入 White Star Line 和“泰坦尼克号”作为船,并且该船有该品牌的条目,则会将关联输入到 recognised_vehicle_id 中。

一些东西:

  • 输入字段的自动完成有望消除相同品牌/车辆的一些拼写错误/语法差异。

  • 查看现有表的重复计数可以帮助确定应手动添加哪些已识别的公司/车辆。

这远不是一个漂亮的解决方案,但它是我所拥有的最好的解决方案。我猜这是人们必须经常做的事情,我只是想知道 - 有没有更优雅的方法来实现我想要实现的目标?解决此类问题的任何经验法则?

提前致谢

database-design

5
推荐指数
1
解决办法
107
查看次数

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

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

我有 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
查看次数