【问题标题】:MySQL database modeling problem from a newbie一个新手的MySQL数据库建模问题
【发布时间】:2010-10-12 08:03:19
【问题描述】:

好的,我有一个问题,我已经搜索并搜索了在线解决方案,但找不到任何线索,这里是(哦,我对这个数据库的东西很陌生 ;-)

假设我有数千家零售店,每家可以销售 1 到 100 种产品,但有 10,000 种可能的产品可供选择。我需要每个店主都能够查看(和编辑)他们商店中的产品列表——这很简单,我可以找出表结构——但我还想做的是能够找到商店中最常见的产品组合,例如,我希望看到如下内容:

120:pid34、pid234、pid876、pid120、pid100 118:pid45、pid54、pid657、pid763、pid237 115:pid23、pid546、pid657、pid543、pid23

第一个数字是这些产品的商店数量(商店内产品的顺序无关紧要),pid 数字是产品的产品 ID(除了记住最多可以有 100 个产品每个商店)。

所以如果我设置一个表格:

ID、PID、商店ID 1、pid34、10 2、pid234、10 3、pid876、10 4、pid120、10 5、pid100、10 6、pid45、45 ... 等等 ...

我可以跟踪我的商店库存,但我不知道如何进行“组合”搜索,求助!

【问题讨论】:

  • @Richard,这取决于你想做什么?如果您想要简单的设计,那么您可能应该将您的数据库表设计得足够好 - 查找规范化。如果您需要更多帮助,请返回这里。

标签: mysql database modeling


【解决方案1】:

您应该能够使用数据库查询来解决大部分问题,但您仍然需要围绕此查询使用另一种编程语言(例如 java 和 JDBC)。假设您使用的是某种 SQL 数据库。从您的结构来看,我认为您将需要使用 group by 子句。虽然我不知道你的数据库结构,因为你没有提到它,所以为了这个,我打算说你的表被称为“产品”

我们先设计一个查询来获取每个产品的数量:

SELECT pid, COUNT(*) AS NUM FROM products p GROUP BY pid ORDER BY NUM DESC;

所以这个查询会返回如下内容:

pid,    NUM
pid34   120
pid29   120
pid20   20

所以,这越来越接近了,但仍然不是我们想要的。但是,现在通过将查询与编程语言结合使用,事情可以轻松完成。下面我做了一些java代码作为例子。

// Assumes that database connection has already been made and is in the variable: conn1
Statement stmt1 = conn1.createStatement();
ResultSet rs1 = stmt1.executeQuery("SELECT pid, COUNT(*) AS NUM FROM products p GROUP BY pid ORDER BY NUM DESC");

int prevNum = -1;
while(rs1.next())
{
    int thisNum = rs1.getInt("NUM");
    if(thisNum != prevNum)
    {
        // this means it is a different number than the last result, start a new line
        system.out.print("\n" + thisNum + ": ");
        prevNum = thisNum;
    }
    system.out.print(rs1.getString("pid") + ", ");
}
stmt1.close();
conn1.close();

虽然我可能没有正确的逻辑,尤其是在格式化方面,但这应该能让你走上正确的道路,了解你需要如何去做。这个问题确实需要结合使用查询和编程语言来解决。

查询可以解决一小部分问题,但是它们在解决这些问题方面做得非常好,而编程语言可以解决更广泛的问题。但是,在许多情况下,编程语言在解决相同问题方面的效率不如数据库,这就是为什么将两者多次结合可以更高效地解决复杂问题。

【讨论】:

    【解决方案2】:
    var1 = 选择唯一的商店编号 foreach var1 选择适用于该商店编号的产品。 /foreach

    正义是正确的,这不一定是数据库问题,而是更一般的编程问题。

    【讨论】:

      【解决方案3】:

      这绝对不是数据库问题。这是一个像 Prolog 或 ECLiPSe 之类的东西会非常适合的问题,或者可能是其他语言中的约束求解器。

      【讨论】:

        猜你喜欢
        • 2011-01-06
        • 1970-01-01
        • 2011-10-23
        • 1970-01-01
        • 1970-01-01
        • 2011-10-17
        • 1970-01-01
        • 2021-02-02
        • 1970-01-01
        相关资源
        最近更新 更多