我如何正确设计这个数据库?

Dav*_*vid 0 database-design

我无论如何都不是数据库设计师。我是一名桌面程序员,但我目前正在考虑实现一个需要(可能非常大的)后端数据库的网站创意。

在我的站点中,我将拥有可以创建和加入“组”的用户。用户的数量可能会更多,组的数量也可能更多,并且如果用户愿意,显然可以在多个组中。

我正在努力解决如何在数据库端正确定义它。

我可以创建一个包含所有组信息的“组”表,然后是另一个将每个用户与组相关联的表(因此该表中的每一行都有一个用户 ID,然后是一个组 ID,用户 ID 可以出现在多个行,因为用户可能在多个组中)。对于大量用户,这样的表会变得相当大,尤其是当用户涉及多个组时。

我的一个朋友建议为每个组准备一张单独的桌子。因此,每次用户创建组时,我们都会在数据库中创建一个表,然后用该组中每个用户的用户 ID 填充该表。我对此不太确定,因为为每个组创建一个新表似乎会带来很多开销。

此外,从桌面程序员的角度来看,我真的只想创建一个名为“Group”的类并为其提供一个用户 ID 数组……但显然我不能在关系数据库世界中做到这一点。

那么,我能做什么?设计这个的最佳方法是什么?什么将在服务器上最有效地运行?帮助启发想要学习一点数据库设计的程序员。:-)

谢谢!

Wil*_*Wil 5

您的第一个选择很可能是最好的。一个名为 users 的表、一个名为 groups 的表和一个名为 user_groups 的联结表。User_groups 允许组和用户之间的多对多关系。至于尺寸,你认为“大”是什么?20,000 条记录?一百万?可能数据库类型和程序员在“大”方面的想法不同,因为我无法预见这个表有超过几十万行,如果该网站变得流行,并且有很多团体,而且看起来并不大。只要表被正确索引并且查询被有效地编写,它就不应该是一个问题......无论如何,您只会查询特定用户或特定组的表。无论您使用哪种 RDBMS 引擎,都旨在对这种结构的表进行操作。没有好的设计理由将组表分成多个表 - 这意味着必须完全按照您所说的为每个新组维护新表,而且您会遇到复杂的查询,您想一次从多个组中取回数据.