有关构建或规范化我需要的MySQL数据的建议

时间:2010-10-21 17:55:25

标签: mysql

我正在构建一个Web应用程序,我刚从电子表格中收到了客户端的一些基本数据。我需要以有意义的方式将数据存入MySQL数据库,以便稍后有效查询。最有意义的是什么?这是详细信息:

有部门,课程*编辑(课程类型的产品,如男士T恤,女式牛仔裤等...)和供应商(和产品最终......)。 25个部门,300个类和3300个供应商。在某些情况下,部门共享类和供应商。

我的网络应用程序将显示部门页面,这些部门页面将显示供应商列表,这些供应商的产品出现在所选部门中,并带有指向供应商特定页面的链接。供应商页面将列出按类排序的产品。

我可以设置3或4个表,但是当我构建应用程序时,这会产生一个结构良好,高效的查询吗?此外,是否会使规范化的数据库避免更新,删除异常?

这可能更像是如何选择我的数据而不是如何构建我的数据库的问题,但我想我会从结构开始并转向查询优化。

1 个答案:

答案 0 :(得分:1)

如果我正确地假设类是产品的类别,并且产品可以属于单个类:

+================================+    +================================+
| departments                    |    | vendors                        |
+----+------+--------------------+    +----+------+--------------------+
| id | name | others             |    | id | name | others             |
+====+======+====================+    +====+======+====================+

+================================+    +================================+
| classes                        |    | products                       |
+----+------+--------------------+    +----+----------+----------------+
| id | name | others             |    | id | class_id | name | others  |
+====+======+====================+    +====+==========+================+

+================================+    +================================+
| departments_vendors            |    | classes_departments            |
+----+----------+----------------+    +----+---------------+-----------+
| id | department_id | vendor_id |    | id | department_id | class_id  |
+====+==========+================+    +====+===============+===========+

+================================+
| products_vendors               |
+----+------------+--------------+
| id | product_id | vendor_id    |
+====+============+==============+

如果产品可以属于多个类,请删除class_id列并创建一个名为classes_products的新表。

假设有上述结构,这里是一个示例查询。

获取一个部门,该部门的课程以及这些课程的产品:

SELECT    departments.id   AS DepartmentId,
          departments.name AS DepartmentName,
          classes.id       AS ClassId,
          classes.name     AS ClassName,
          products.id      AS ProductId,
          products.name    AS ProductName
FROM      departments
LEFT JOIN classes_departments
       ON classes_departments.department_id = departments.id
LEFT JOIN classes
       ON classes.id = classes_departments.class_id
LEFT JOIN products
       ON products.class_id = classes.id
WHERE     departments.id = ##

获取销售某个部门类产品的供应商列表的最佳方法是创建另一个名为classes_vendors的表