MySQL:a的最佳数据库模型;“用户推荐”;系统

MySQL:a的最佳数据库模型;“用户推荐”;系统,mysql,Mysql,我正在为一个应用程序建模一个DB,其中一个功能是从DB中获取一个用户,并在图表中显示所选用户和该用户的所有引用,以及所选用户的引用(如果有)的引用,最多可显示3个引用级别 我有两种关于如何为一个方案建模以实现这一点的理论,但我不知道哪一种是“最好的”(在优化、规范化等方面) 我们有一个方案,其中引用存储在不同的表中,只有一个布尔值来显示用户实际上是否来自另一个用户 另一方面,我可以用一个可为null的INT替换布尔值(如果引用,只要存储一个INT,如果任何人都没有引用null的含义) 如果有更

我正在为一个应用程序建模一个DB,其中一个功能是从DB中获取一个用户,并在图表中显示所选用户和该用户的所有引用,以及所选用户的引用(如果有)的引用,最多可显示3个引用级别

我有两种关于如何为一个方案建模以实现这一点的理论,但我不知道哪一种是“最好的”(在优化、规范化等方面)

我们有一个方案,其中引用存储在不同的表中,只有一个布尔值来显示用户实际上是否来自另一个用户

另一方面,我可以用一个可为null的INT替换布尔值(如果引用,只要存储一个INT,如果任何人都没有引用null的含义)


如果有更好的方法来实现这一点,也欢迎提出建议。谢谢。

我建议第三种型号。您所说的是一个模型,其中您可以选择有一个引用,因此可能有一个两次连接到users表的表,第一列是refered persons ID,第二列是refered users ID


然后,您就可以通过在查询中加入此表来了解是否存在引用了

我将使用第二种设计,也许还可以添加一个闭包表,以便轻松查找跨多个级别的引用(请参见:)

,因此这并不适用于此类设计问题。意见问题被明确列为非主题。在推荐表中,ChildUserID列是什么?如果整型字段是ID类型的,通常在整型字段中存储空值是不安全的。我建议您保留IsReferred列,如果它是真的,您可以从推荐表中获得推荐。为更好的性能和数据一致性创建约束。为什么可空外键不好?事实上,如果我没有弄错的话,这是我的第三个模型。我认为这是完全混乱的,因为我画了这个,而不是显示实际的数据库。我的错。但是非常感谢你的意见!