【发布时间】:2015-06-17 13:49:30
【问题描述】:
我正在阅读数据库结构规范化的概念。我对项目中的以下情况感到困惑。
- 我有两个表“
TableA”和TableB - 两个表相互独立,完全没有关系
- 它们代表完全不同的数据
- 两个表都有不同的参数。但是
Parameter本身作为一个对象具有相同的属性。
所以我担心的是我应该有一个Parameter 表,它同时为TableA 和TableB 提供服务
或者
我应该为Table A 和Table B 设置单独的Parameter 表
结构是这样的
案例一:
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,因为创建另一个表示相同类型数据的表确实很有意义。
根据规范化的概念,我们应该有一个只代表一件事的表。所以我想我应该只有一个参数表。但是,如果从 TableA 中查看该表的含义与从 TableB 中查看时的含义完全不同,该怎么办?
【问题讨论】:
-
第一个案例是糟糕的设计。添加
Table C或Table D时会发生什么。你必须ALTER TABLE你的参数表。 Case II 满足您的要求,允许您通过更快的查询进行扩展,避免将表作为字段存储在您的 params 表中,并且不属于 EAV 反模式。如果您想在案例 II 中添加一些额外的规范化,那么将您的Name, Description, and Type并将它们粘贴到自己的表中,使用您现有的parameter_N表只是为了Table_N和它的参数之间的关系。
标签: mysql database database-design database-schema