数据库结构规范化
normalization of database structure
我正在阅读数据库结构规范化的概念。我在项目中对以下情况感到困惑。
- 我有两个 tables "
TableA
" 和 TableB
- 两个table相互独立,没有亲属关系
- 它们代表完全不同的数据
- 两个 table 都有不同的参数。然而
Parameter
本身作为对象具有相同的属性。
所以我担心的是我应该有一个 Parameter
table 服务 TableA
和 TableB
两个
或
我应该为 Table A
和 Table B
分别设置 Parameter
Table
结构看起来像这样
案例一:
TableA
ID
Name
Description
TableB
ID
Name
SomeFlag
Parameter
ID
TableA_ID
TableB_ID
Name
Description
Type
案例二
TableA
ID
Name
Description
Parameter_A
ID
TableA_ID
Name
Description
Type
TableB
ID
Name
SomeFlag
Parameter_B
ID
TableB_ID
Name
Description
Type
我个人更喜欢案例 I,因为创建另一个 table 表示相同类型的数据确实有意义。
根据规范化的概念,我们应该有一个 table 只代表一件事。所以我想我应该只有一个参数 table。但是,如果 table 从 TableA 和从 TableB 看完全不同的意思怎么办?
如果一个参数有 both Table A and Table B 在逻辑上有意义同一个实例(不是 either/or),那么情况 I 更好。
在关系理论中,每个 table 都是一个类型。即使它们可能有公共数据,类型也是基于它们的用途。虽然它有点复杂,但案例 II 更规范化。
还有一种可能性,没有提到,我称之为案例三。
TableA
ID
Name
Description
PropertyID
TableB
ID
Name
SomeFlag
PropertyID
Parameter
ID
Name
Description
Type
如果属性在两个 table 之间总是通用的,这可能是最好的解决方案。
我会使用案例一,但有一些变化。参数实体确实持有一件事,table 的参数。参数条目的实例应该只与一个 table 相关(根据您的分析,它们不相关)。
Parameter
----------
PK Param_ID
FK Main_Table_ID
Main_Table_name (A or B)
param_Name
param_Description
param_Type
我正在阅读数据库结构规范化的概念。我在项目中对以下情况感到困惑。
- 我有两个 tables "
TableA
" 和TableB
- 两个table相互独立,没有亲属关系
- 它们代表完全不同的数据
- 两个 table 都有不同的参数。然而
Parameter
本身作为对象具有相同的属性。
所以我担心的是我应该有一个 Parameter
table 服务 TableA
和 TableB
两个
或
我应该为 Table A
和 Table B
Parameter
Table
结构看起来像这样
案例一:
TableA
ID
Name
Description
TableB
ID
Name
SomeFlag
Parameter
ID
TableA_ID
TableB_ID
Name
Description
Type
案例二
TableA
ID
Name
Description
Parameter_A
ID
TableA_ID
Name
Description
Type
TableB
ID
Name
SomeFlag
Parameter_B
ID
TableB_ID
Name
Description
Type
我个人更喜欢案例 I,因为创建另一个 table 表示相同类型的数据确实有意义。
根据规范化的概念,我们应该有一个 table 只代表一件事。所以我想我应该只有一个参数 table。但是,如果 table 从 TableA 和从 TableB 看完全不同的意思怎么办?
如果一个参数有 both Table A and Table B 在逻辑上有意义同一个实例(不是 either/or),那么情况 I 更好。
在关系理论中,每个 table 都是一个类型。即使它们可能有公共数据,类型也是基于它们的用途。虽然它有点复杂,但案例 II 更规范化。
还有一种可能性,没有提到,我称之为案例三。
TableA
ID
Name
Description
PropertyID
TableB
ID
Name
SomeFlag
PropertyID
Parameter
ID
Name
Description
Type
如果属性在两个 table 之间总是通用的,这可能是最好的解决方案。
我会使用案例一,但有一些变化。参数实体确实持有一件事,table 的参数。参数条目的实例应该只与一个 table 相关(根据您的分析,它们不相关)。
Parameter
----------
PK Param_ID
FK Main_Table_ID
Main_Table_name (A or B)
param_Name
param_Description
param_Type