改进我的数据库设计以实现未来可扩展性

时间:2013-11-13 03:51:11

标签: mysql database-design mysql-workbench

好吧,我正在开展一个可能涉及数千名用户的项目。我在数据库方面没有太多经验,特别是涉及实体之间的关系时。

让我解释一下我的情景。首先,有一个用户可以使用他的凭据登录我们的系统。我们的系统中有一个模块,可以让他创建项目。这样就形成了User table&项目表。

现在还有另一个模块,即团队创建模块,它完成了它所说的。在可用成员列表中,他可以选择自己喜欢的人并将其添加到团队中。因此,有会员和表格的表格。球队。此外,一个成员可以是许多团队的一部分,一个团队可以有许多成员和一个团队。 “用户”也可以成为会员。

我自己设计了数据库,但我不确定它是好还是坏。此外,如果有人能指出我的好教程,我会非常感激,这些教程展示了如何插入或更新涉及关系的表格。

这是我的设计到现在为止:

enter image description here

更新

在与IRC的某人讨论后,我想出了一个经过修改的设计。我合并了“用户”和“会员”表作为用户也是会员。

enter image description here

我的问题仍然存在,我是否在正确的轨道上?

2 个答案:

答案 0 :(得分:1)

你长期思考是很好的,但你的解决方案不会长期发挥作用。

这不是第一次尝试此类事情。依靠那些之前搞砸过的人的智慧。阅读数据建模模式书。

抽象和规范化。这就是你如何找到一个好的长期解决方案。

至少阅读党模式。团体和个人实际上是相同的(抽象)事物。

在不同的表格中放入不同的东西。地址和成员不属于同一个表。

答案 1 :(得分:0)

“我走在正确的轨道上”并不是一个有用的问题 - 我们无从谈论,因为这取决于你的目标。

有几件事:

  • 在关系之后命名关系列是个好主意。例如,在第一个图中,项目的“所有者”不应该被称为users_user_id - 这是没有意义的。称之为“owner_id”或有意义地描述项目与成员表之间关系的东西。
  • 在第二个图中,您在成员表中的成员和项目之间似乎存在“多对多”关系 - 但是没有有效的方法在成员表中存储多个项目的ID。您需要将其分解为连接表 - 例如,projects_members,就像您对teams_members所做的那样。
  • “teams_members”表有一个名为tm_id的主键。纯粹主义者会告诉你这是错误的 - 该表的唯一标识符应该是member_id和team_id的组合。您不需要另一个唯一标识符 - 事实上它有害,因为您必须保证member_id和team_id组合的唯一性。

正如尼尔所说,你可能想开始阅读这篇文章。我可以推荐Coronel等人的“数据库系统:设计,实现和管理”。