带有70多列的SQL表

时间:2012-07-03 16:03:14

标签: mysql sql database

我正在为制造公司设计数据库表,其中所需的表是部分应用程序表(意味着此产品适用于x和y产品),我目前的问题是大多数产品系列都有大约3到10个应用程序,但是2条特定的行最多可以有100个应用程序。

起初我考虑将产品应用程序存储为逗号分隔的字符串,但这会违反第一个普通形式。

然后我读到了将所述应用程序存储为blob,但是为了搜索优化和一般数据库性能,这似乎不太可能。

我的问题是,有没有办法将部分应用程序存储在一个表中而不必创建70多列,同时保留正常形式而不影响性能?

4 个答案:

答案 0 :(得分:4)

要满足not compromising performance,需要确切了解您将要运行的查询。

但在正常情况下,你会有很多:很多映射表......

CREATE TABLE map_part_application (
  part_id         INT,
  application_id  INT,
  PRIMARY KEY (part_id, application_id)
)


INSERT INTO map_part_application VALUES (1,1)
INSERT INTO map_part_application VALUES (1,2)
...
INSERT INTO map_part_application VALUES (1,100)
INSERT INTO map_part_application VALUES (2,1)
INSERT INTO map_part_application VALUES (2,2)
...
INSERT INTO map_part_application VALUES (1,12)

我建议采用这种方式作为标准做法,如果您发现需要在构建中稍后进行优化,那么只能在其他地方寻找。

答案 1 :(得分:1)

您想要添加查找表和多对多桥表。

第3范式通常是好的。为关联的应用程序创建一个表。将参考ID存储为您想要包含此数据的其他表的约束。

答案 2 :(得分:0)

为什么不为产品系列创建一个带有fk的产品系列表?

答案 3 :(得分:0)

这样做的方法是将零件应用程序存储为单独的行,而不是同一行中的列。

如果表中只有部分应用程序,则只需在行中创建多行而不是多列。

如果表中还有其他数据,请创建另一个表,仅用于将该数据连接到多个部分应用程序。