数据库结构的规范化

时间:2015-06-17 13:49:30

标签: mysql database database-design database-schema

我正在阅读数据库结构规范化的概念。我对我项目中的以下情况感到困惑。

  1. 我有两张桌子" TableA"和TableB
  2. 两张桌子都是相互独立的,根本没有任何关系
  3. 它们代表完全不同的数据
  4. 两个表都有不同的参数。但是Parameter本身作为对象具有相同的属性。
  5. 所以我担心的是我应该有一个Parameter表,其中TableATableB

    或者

    ParameterTable A

    我应该有单独的Table B

    结构看起来像这样

    案例I:

    TableA
    ID
    Name
    Description
    
    TableB
    ID
    Name
    SomeFlag
    
    Parameter
    ID
    TableA_ID
    TableB_ID
    Name 
    Description
    Type
    

    案例II

    TableA
    ID
    Name
    Description
    
    Parameter_A
    ID
    TableA_ID
    Name 
    Description
    Type
    
    TableB
    ID
    Name
    SomeFlag
    
    Parameter_B
    ID
    TableB_ID
    Name 
    Description
    Type
    

    我个人更喜欢Case I,因为创建另一个表示相同类型数据的表是有意义的。

    按照规范化的概念,我们应该有一个只代表一件事的表。所以我想我应该只有一个参数表。但是,如果从TableA查看该表时意味着完全不同,从TableB查看时表示不同,那该怎么办?

2 个答案:

答案 0 :(得分:2)

我会使用案例一但有一些变化。参数实体确实包含一个事物,即表的参数。参数条目的实例应仅与一个表相关(根据您的分析,它们不相关)。

Parameter
----------
PK Param_ID 
FK Main_Table_ID 
Main_Table_name (A or B)
param_Name 
param_Description
param_Type

答案 1 :(得分:0)

如果参数在同一实例中具有两者表A 表B是合理的,那么情况I更好。

在关系理论中,每个表都是一个类型。即使它们可能具有共同数据,类型也基于其使用。虽然它有点复杂,但案例II更加规范化。

还有另一种可能性,没有被提及,我称之为案例III。

TableA
ID
Name
Description
PropertyID

TableB
ID
Name
SomeFlag
PropertyID

Parameter
ID
Name 
Description
Type

如果两个表中的属性总是很常见,这可能是最好的解决方案。