MySQL - 一个字段中的多个值或多对多关系?
MySQL - multiple values in one field or many-to-many relationship?
让我们从上下文开始。我正在为自己编写一个小应用程序,可用于在 MySQL 数据库中更改和创建产品。
每个产品至少有一种生产方法,例如'forged'、'welded'或'machined'(我的申请中还有更多方法)。产品的生产方法可以是这些方法的任意组合。
该应用程序当前有一个下拉菜单,其中包含一个复选框列表,可以从中选择生产方法,生产方法由文本字段显示。当我的应用程序显示生产方法时,我希望它们按字母顺序排列(而不是按点击顺序排列,就像你第一次点击焊接一样,这将是第一个值):
产品table:'forged - welded - machined'
产品椅子:'welded - forged - machined'
产品椅子:'forged - welded - machined'
当我的应用程序检索产品时 table 我还想设置 'forged'、'welded' 和 'machined' 方法检查为真。
我是否应该在 MySQL 产品 table 中使用一个字段来保存一串方法组合(如上),并让我的应用程序在单击复选框和将此字符串保存到产品 table、
中的这一字段
或者,
我是否应该在我的数据库中使用多对多关系,其中存在所有生产方法的 table,并且我使用连接点 table 将产品 (pID = 2) 与伪造 (mID = 1) 连接起来)、焊接 (= 2) 和机械加工 (= 3),如
pID - mID
2 - 1
2 - 2
2 - 3,
或者,
我应该使用 table 之类的
pID - 方法
2 - 伪造
2 - 焊接
2 - 机加工
在性能方面(很多产品和很多方法)最明智的做法是什么?每次应用程序加载不同的产品(这种情况经常发生)时执行一堆查询,或者从产品 table 中执行一个查询并以这种方式加载方法(拆分字符串并将每个方法与复选框中的复选框进行比较for 循环)?
您应该按照规范化设计数据库。它不一定是最快的选择,但绝对是最容易管理的。无论如何,您很可能想要 table 的生产方法,因此多对多关系是一个自然的选择。它还使按生产方法过滤等任务变得轻而易举。你真的不想在服务器上解析字符串来实现这个。
如果您需要更快的响应,您可以随时将这些连接的字符串预先计算为 table。只是不要将它们用作主要数据。
让我们从上下文开始。我正在为自己编写一个小应用程序,可用于在 MySQL 数据库中更改和创建产品。
每个产品至少有一种生产方法,例如'forged'、'welded'或'machined'(我的申请中还有更多方法)。产品的生产方法可以是这些方法的任意组合。
该应用程序当前有一个下拉菜单,其中包含一个复选框列表,可以从中选择生产方法,生产方法由文本字段显示。当我的应用程序显示生产方法时,我希望它们按字母顺序排列(而不是按点击顺序排列,就像你第一次点击焊接一样,这将是第一个值):
产品table:'forged - welded - machined'
产品椅子:'welded - forged - machined'
产品椅子:'forged - welded - machined'
当我的应用程序检索产品时 table 我还想设置 'forged'、'welded' 和 'machined' 方法检查为真。
我是否应该在 MySQL 产品 table 中使用一个字段来保存一串方法组合(如上),并让我的应用程序在单击复选框和将此字符串保存到产品 table、
中的这一字段
或者,
我是否应该在我的数据库中使用多对多关系,其中存在所有生产方法的 table,并且我使用连接点 table 将产品 (pID = 2) 与伪造 (mID = 1) 连接起来)、焊接 (= 2) 和机械加工 (= 3),如
pID - mID
2 - 1
2 - 2
2 - 3,
或者,
我应该使用 table 之类的
pID - 方法
2 - 伪造
2 - 焊接
2 - 机加工
在性能方面(很多产品和很多方法)最明智的做法是什么?每次应用程序加载不同的产品(这种情况经常发生)时执行一堆查询,或者从产品 table 中执行一个查询并以这种方式加载方法(拆分字符串并将每个方法与复选框中的复选框进行比较for 循环)?
您应该按照规范化设计数据库。它不一定是最快的选择,但绝对是最容易管理的。无论如何,您很可能想要 table 的生产方法,因此多对多关系是一个自然的选择。它还使按生产方法过滤等任务变得轻而易举。你真的不想在服务器上解析字符串来实现这个。
如果您需要更快的响应,您可以随时将这些连接的字符串预先计算为 table。只是不要将它们用作主要数据。