我正在为制造公司设计数据库表,其中所需的表是部分应用程序表(意味着此产品适用于x和y产品),我目前的问题是大多数产品系列都有大约3到10个应用程序,但是2条特定的行最多可以有100个应用程序。
起初我考虑将产品应用程序存储为逗号分隔的字符串,但这会违反第一个普通形式。
然后我读到了将所述应用程序存储为blob,但是为了搜索优化和一般数据库性能,这似乎不太可能。
我的问题是,有没有办法将部分应用程序存储在一个表中而不必创建70多列,同时保留正常形式而不影响性能?
答案 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)
这样做的方法是将零件应用程序存储为单独的行,而不是同一行中的列。
如果表中只有部分应用程序,则只需在行中创建多行而不是多列。
如果表中还有其他数据,请创建另一个表,仅用于将该数据连接到多个部分应用程序。