添加一个类别“id”coloumn来标识一个db中所有表中的记录

时间:2016-05-30 03:08:35

标签: database database-design

这个问题只是为了清除一个场景并询问有关数据库设计的建议。

我有四张桌子:

  1. 类别
  2. 用户
  3. 报告
  4. 时刻表
  5. 用户,报告和日程表中的所有记录都需要在类别的基础上进行识别。

    所以我的问题是根据上面的场景,在所有表中添加类别ID的好方法是什么?或者我可以采取其他方法来实现这一目标吗?

2 个答案:

答案 0 :(得分:1)

这与选择何时归一化和非规范化表有关。

规范化是用于删除数据冗余的列和表的组织,而非规范化是尝试通过添加冗余数据或分组数据来优化数据库的读取性能的过程。

规范化的优势:

  1. 避免冗余数据减少数据库的大小。
  2. 更好的数据库结构和设计
  3. 规范化的缺点:

    1. 您将加入许多表格
    2. 非规范化的优势:

      1. 更好的查询效果
      2. 减少表数
      3. 非规范化的缺点:

        1. 重复数据
        2. 有时误导
        3.   

          正常化,直到它受到伤害,反规范化直到它起作用

          这篇文章读得很好。 Maybe Normalizing Isn't Normal

答案 1 :(得分:0)

这取决于您的应用逻辑。

  

需要识别用户,报告和日程表中的所有记录   在类别的基础上

情景1:
首先定义一个类别,然后在该类别下定义用户。用户可能有报告,时间表和......
它显示User表具有来自Category的强制外键,其他表将具有来自用户的强制外键。
无需将类别FK添加到其他表。

场景2:
定义了用户,定义了类别,可以将用户分配到某个类别(我们将有user-category表)
类别可能有报告 类别中的用户可以在注册类别下运行报告.... 其他表中需要FK类别。

所以你在问题中提到了姓名(用户,类别,报告......)。你没有提到动词你的应用功能。
包含名称和动词的应用程序逻辑进行数据建模。