Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果一个数据库表以后会增加更多的列,那么将这些列保留为另一个表的行是一种好的设计吗?_Mysql_Sql_Database_Database Design - Fatal编程技术网

Mysql 如果一个数据库表以后会增加更多的列,那么将这些列保留为另一个表的行是一种好的设计吗?

Mysql 如果一个数据库表以后会增加更多的列,那么将这些列保留为另一个表的行是一种好的设计吗?,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,我有一个设备数据库,列如下: DeviceID | DeviceParameter1 | DeviceParameter2 Column | ColumnNumber --------------------------------- DeviceParameter1 | 1 DeviceParameter2 | 2 DeviceParameter3 | 3 DeviceID | ColumnNumber <- this is from the P

我有一个设备数据库,列如下:

DeviceID | DeviceParameter1 | DeviceParameter2  
Column           | ColumnNumber 
---------------------------------
DeviceParameter1 | 1  
DeviceParameter2 | 2  
DeviceParameter3 | 3  
DeviceID | ColumnNumber <- this is from the ParamCol table   
---------------------------------------------------
switchA  |   1  
switchA  |   2  
routerB  |   1  
routerB  |   2  
routerC  |   3  
在这个阶段,我只需要这些参数,但可能几个月后,我可能需要更多具有更多参数的设备,因此我必须添加
DeviceParameter3
等列

一位朋友建议我将参数作为行保存在另一个表(ParamCol)中,如下所示:

DeviceID | DeviceParameter1 | DeviceParameter2  
Column           | ColumnNumber 
---------------------------------
DeviceParameter1 | 1  
DeviceParameter2 | 2  
DeviceParameter3 | 3  
DeviceID | ColumnNumber <- this is from the ParamCol table   
---------------------------------------------------
switchA  |   1  
switchA  |   2  
routerB  |   1  
routerB  |   2  
routerC  |   3  
然后参考以下列:

DeviceID | DeviceParameter1 | DeviceParameter2  
Column           | ColumnNumber 
---------------------------------
DeviceParameter1 | 1  
DeviceParameter2 | 2  
DeviceParameter3 | 3  
DeviceID | ColumnNumber <- this is from the ParamCol table   
---------------------------------------------------
switchA  |   1  
switchA  |   2  
routerB  |   1  
routerB  |   2  
routerC  |   3  

DeviceID | ColumnNumber添加动态列是一个坏主意,实际上它是一个糟糕的设计。我同意你的第二个选择,添加行是可以的

因为如果要添加动态增长的列,则必须为它们提供默认值,而且不能将它们用作“唯一”VAL,因此在更新表时会发现非常困难,因此最好坚持添加“行”计划。

这是一种“通用数据模型”问题-如果你用谷歌搜索这个词,你会在网上找到相当多的资料

以下是我的观点:如果且仅当参数与应用程序透视图没有本质上的不同,那么使用动态行解决方案(即通用数据模型)。定性的含义是什么?这意味着在应用程序中,您对待参数3和参数17没有任何不同


你永远不应该在运行中生成新的专栏,这是一个非常糟糕的主意。如果列在性质上不同,并且您希望能够适应新的列,那么您可以为每个不同的参数类别使用不同的设备参数表。我们的想法是尽可能避免动态SQL,因为它会带来一系列自身的问题。

“我不相信他。”。。是的,别相信他。除非您希望不断或以数千列的形式添加列(在这种情况下,您应该重新考虑这些数据点是什么;它们可能是其他1对多表)。我同意必须为列提供默认值可能是一个问题。但3NF真的讨论过这样一种设计,即将列作为行添加吗?为每个单独的设备创建单独的表,而不是使用一个通用表来存储所有设备(这就是为什么会出现添加列的问题)更好吗?设备和它们所需的参数有多不同?请注意,“行”解决方案倾向于一个,这对于高度动态的解决方案很好,但也有其自身的问题。如果大多数属性都是相同的,并且大部分都是填充的,我会坚持随着时间的推移只添加列。如果一切都不一样,添加行/键会使事情变得更容易,但是接下来你需要重新构建参数列表(考虑到网站上的其他问题,MySQL似乎让这变得更容易)。感谢链接到EAV。这正是我所需要的,知道这种方法的缺点。你的评论应该是一个答案。