MySQL - 一个字段中的多个值或多对多关系?

时间:2016-10-25 00:20:21

标签: java mysql performance many-to-many

让我们从上下文开始。我正在为自己编写一个小应用程序,可用于在MySQL数据库中更改和创建产品。

每种产品都至少有一种生产方法,例如“锻造”,“焊接”或“加工”(我的应用中还有更多方法)。产品的生产方法可以是这些方法的任何组合。

应用程序当前有一个下拉菜单,其中包含一个复选框列表,用于选择生产方法,生产方法由文本字段显示。当我的应用程序显示生产方法时,我希望按字母顺序排序(不按点击顺序排序,如果你第一次点击焊接将是第一个值):

产品:'锻造 - 焊接 - 机加工'
产品椅子:'焊接 - 锻造 - 加工'
产品椅子:'锻造 - 焊接 - 机加工'

当我的应用程序检索产品时,我还要将'伪造','焊接'和'加工'方法设置为true。

我应该在MySQL产品表中使用一个字段,其中保存了一组方法组合(如上所述),并让我的应用程序在单击复选框时处理排序并将此字符串保存到产品中的这一个字段表,
或者,
我应该在我的数据库中使用多对多关系,其中存在所有生产方法的表,并且我使用连接表将产品(pID = 2)与伪造(mID = 1),焊接(= 2)和机加工(= 3)如
pID - mID
2 - 1
2 - 2
2 - 3,
或者,
我应该使用像这样的表 pID - 方法
2 - 锻造
2 - 焊接
2 - 机加工

什么是性能方面(许多产品和许多方法)最聪明的事情?每次应用程序加载不同的产品(发生很多)时执行一堆查询,或者从products表中执行一个查询并以这种方式加载方法(拆分字符串并将每个方法与for循环中的复选框进行比较)?

1 个答案:

答案 0 :(得分:0)

您应该将数据库设计为规范化。它不一定是最快的选择,但它绝对是最容易管理的。最有可能你想要生产方法表,所以多对多关系是一个自然的选择。它还使像生产方法过滤这样的任务变得轻而易举。你真的不想在服务器上解析字符串来实现这一点。

如果您需要更快的响应,您始终可以将这些连接的字符串预先计算到表中。只是不要将它们用作主要数据。