Database design 具有相同'的共享表;概念';但是不同的数据

Database design 具有相同'的共享表;概念';但是不同的数据,database-design,Database Design,我正在处理一个我继承的数据库,我遇到了一些我不确定是不是一个好的做法 基本上有一个状态表,其中包含状态ID和描述的列表。有两个表与其具有FK关系。在这两个表之间有共同的状态(基本上相同的描述)和个别表特有的状态 除此之外,还有另一个“类型化”状态表,仅与单个表(而不是前两个)相关 表1-->状态表表3状态 在我看来,“类型化”状态表是在第一个之后不久添加的,可能来自不同的开发人员。我的问题是,我应该合并第二个状态表并使其在整个数据库中保持一致,还是应该分离合并使用表 我假设第三个选项是向状态表“

我正在处理一个我继承的数据库,我遇到了一些我不确定是不是一个好的做法

基本上有一个状态表,其中包含状态ID和描述的列表。有两个表与其具有FK关系。在这两个表之间有共同的状态(基本上相同的描述)和个别表特有的状态

除此之外,还有另一个“类型化”状态表,仅与单个表(而不是前两个)相关

表1-->状态表表3状态

在我看来,“类型化”状态表是在第一个之后不久添加的,可能来自不同的开发人员。我的问题是,我应该合并第二个状态表并使其在整个数据库中保持一致,还是应该分离合并使用表

我假设第三个选项是向状态表“StatusTypeID”添加另一个字段,并在定义状态的表中添加FK

想法

编辑: 更具体地说:
这三个表是(我不允许使用Tbl前缀)TBLVersionVagulationFormulaire、TblEvaluationMandat和TBLRecontracariere。即:评估、中期评估、再培训和经验。版本表跟踪其他两个表更改。即,如果中期评估的标准发生变化,我将创建一个新版本,并将其添加到版本表中。与TBLCreeprinterestandExperience相同。例如,所有三个表的状态都是“已发布”,但每个表的状态都是唯一的。我想我应该将表分开,或者在状态表中添加第三列来区分。

如果Table3Status和StatusTable是不相交的,那么我就不去管它了,只把它看作是糟糕的命名,因为这意味着它们完全用于不同的目的

由于明显的原因,表1和表2应合并


以防万一有用。。。我每天工作的bug跟踪数据库有一个分类系统,其中“问题”都在一个表中,并按索引字段类型、目的和产品进行划分。这三种排列中的每一种排列都可以为其分配一个自定义状态集,如果没有特定的组合应用于某个问题,则会通过3个级别的默认状态集进行回退。所有状态集都存在于一个表中。

如果Table3Status和StatusTable是不相交的,那么我就不去管它了,只把它看作是糟糕的命名,因为这意味着它们完全用于不同的目的

由于明显的原因,表1和表2应合并


以防万一有用。。。我每天工作的bug跟踪数据库有一个分类系统,其中“问题”都在一个表中,并按索引字段类型、目的和产品进行划分。这三种排列中的每一种排列都可以为其分配一个自定义状态集,如果没有特定的组合应用于某个问题,则会通过3个级别的默认状态集进行回退。所有状态集都存在于一个表中。

如果它们都是特定类型状态类的状态表,最简单的方法是使用一个单个状态表,并让三个表中的每一个都声明其外键

您始终可以向引用状态表的特定表添加约束,其中状态不适用。您可以通过对状态进行分类来更优雅地执行此操作,以便查询可以作为约束的基础(即,没有硬编码的“IN”子句)。您可能需要在状态表中至少增加一列,以帮助将状态类分解为子类别

如果表3确实使用了不同的状态,那么它需要自己的表。所有这些都有一个语义元素——您需要问问自己,特定类型的状态是否与特定表相关。如果没有,则可能无法合并所有状态


例如,在我的系统中,我可能有订单状态和系统状态。这是两个非常不同的类,我无法想象某个行项目可能具有订单状态或系统状态。我需要两张桌子。但是,如果我有订单预处理状态和订单后处理状态,那么这些状态可能会合并到一个类中。因此,您需要在逻辑级别执行一个健全性检查。

如果它们都是特定类型状态类的状态表,最简单的方法是使用一个单个状态表,并让三个表中的每一个都向其声明外键

您始终可以向引用状态表的特定表添加约束,其中状态不适用。您可以通过对状态进行分类来更优雅地执行此操作,以便查询可以作为约束的基础(即,没有硬编码的“IN”子句)。您可能需要在状态表中至少增加一列,以帮助将状态类分解为子类别

如果表3确实使用了不同的状态,那么它需要自己的表。所有这些都有一个语义元素——您需要问问自己,特定类型的状态是否与特定表相关。如果没有,则可能无法合并所有状态


例如,在我的系统中,我可能有订单状态和系统状态。这是两个非常不同的类,我无法想象某个行项目可能具有订单状态或系统状态。我需要两张桌子。但是,如果我有订单预处理状态和订单后处理状态,那么这些状态可能会合并到一个类中。因此,您需要在逻辑层面上进行一次理智检查。

@jambox-感谢您的回复。我想如果我更具体一点可能会有帮助