-1

我有一个数据库设计,其中我有一个可以具有多个属性的产品。我在数据库设计方面不太好,这就是为什么这个问题,

Product
------------------------------------
Id           Name         Model
------------------------------------
1            Galaxy S     GT-XX123
2            Galaxy Y     GT-YY123


Product Specifications
-------------------------------------
Spec         Value        ProductId
-------------------------------------
OS           Windows            1
Processor    Dual Core          1
Screen       3.5 Inch           1
OS           Android 4.1        2
Processor    Quad core          2

现在我想给用户一个基于属性过滤产品的工具,比如 OS = Android,处理器 = 四核。所以我的问题是,通过编写复杂的查询从数据库中获取数据是一个好主意,还是先获取数据然后在应用程序级别过滤数据是个好主意?

编辑

我尝试通过分析每个过滤器然后构建最终查询来创建查询,但是当在这种情况下应用多个过滤器时,查询不起作用。我面临的主要问题是如何从两个不同的值中选择单个记录?所以我正在尝试解决这个问题,同时这个问题出现在我的脑海中,所以我问了这个问题,所以我会感谢你的帮助,而不是投反对票。

4

2 回答 2

3

一般来说,我会说如果在 SQL 中过滤很容易,那么肯定可以在那里完成工作。除了其他任何事情之外,您的 SQL 系统已被调整为执行这些操作(使用 INDEX 等)。

第二个考虑因素是,如果您将整个数据集发送回 PHP,则需要将其存储在内存中,同时遍历数据以查找匹配项。

然而,在某些情况下,最佳解决方案可能是中途之家,您在 SQL 中执行最高级别的过滤,然后在 PHP 中“微调”结果。

于 2013-10-27T07:47:01.140 回答
2

我相信过滤行为是一种业务规则。话虽如此,我也相信业务规则属于应用程序代码而不是 sql 代码。

既然我已经说过了,让我给你一个警告:你应该尽量不要从数据库中返回比你需要的更多的数据。

那么,我们将何去何从?我不确定您使用的是什么技术(似乎它可能是我零经验的 php),但如果您有一个为您构建 sql 的良好 ORM,您应该能够两全其美通过将您的过滤规则抽象到您的应用程序逻辑中,并将它们与您的 ORM 一起使用,以确保您从数据库中获取正确数量的数据。

祝你好运!

于 2013-10-27T07:48:49.887 回答