SQL表结构-如何设计?

SQL表结构-如何设计?,sql,database-design,Sql,Database Design,目前,我们的系统中有一个设置层次结构,允许保存单个用户、设置组(每个用户可以绑定到单个设置组,但设置组位于嵌套组中,因此我们查询树以检查从父设置组继承的值)或客户级设置的设置(每个用户可以绑定到一个客户) 目前,我们有三个表存储每个级别的设置值: 用户设置值 设置组设置值 客户设置值 管理层(也是最初编写该系统的人)要求我将这些表合并到一个包含所有设置的表中。除了“将它们都放在一个表中是有意义的”之外,他还没有提出一个特别好的理由 那么这是一个好主意吗?什么是赞成和反对的?赞成:少一些表格

目前,我们的系统中有一个设置层次结构,允许保存单个用户、设置组(每个用户可以绑定到单个设置组,但设置组位于嵌套组中,因此我们查询树以检查从父设置组继承的值)或客户级设置的设置(每个用户可以绑定到一个客户)

目前,我们有三个表存储每个级别的设置值:

  • 用户设置值
  • 设置组设置值
  • 客户设置值
管理层(也是最初编写该系统的人)要求我将这些表合并到一个包含所有设置的表中。除了“将它们都放在一个表中是有意义的”之外,他还没有提出一个特别好的理由


那么这是一个好主意吗?什么是赞成和反对的?

赞成:少一些表格
Con:避免空值始终是一个好主意,混合不同的级别通常会导致空值

如果合并到一个表中,通常有两种解决方案可供实施

  • 如果每个级别的设置类型相同,则使用类型列,该值反映与哪个级别数据相关,例如用户、组或客户

  • 如果每个级别的设置类型不同,则展开列数

  • NULL用于指示给定列的N/A值


    如果设置为“是/否”存储值,因为布尔值可能是方便的。

    是否考虑创建视图以保持您的老板快乐,他可以根据需要查询组合表视图,而不必实际组合基础表。查看更多关于视图的检查:显示当前窗体更好,请考虑争论请求。ested表单:1.重复数据;2.丢失信息/功能;或;3.(较弱)需要更多的空值。@alalani在一个位置查看这些值并不是一个真正的问题,更重要的是,他觉得架构是错误的,将它们放在三个单独的表中,而不是一个。不过,感谢您的评论。