【问题标题】:MySQL Database Setup for Multiple Services多个服务的 MySQL 数据库设置
【发布时间】:2013-01-13 22:45:13
【问题描述】:

我正在开展一项新业务,提供大约 30 种不同的服务。我正在尝试找出使用 MySQL 和 PHP 对所有 30 项服务进行“轻松访问”的最佳方式。在这一点上,我正在设置我的数据库,我想确保我朝着正确的方向前进。这是我迄今为止提出的概念:

Create Table customers (customer_id)
Create Table orders (order_id, customer_id, product_id)
Create Table logo_design (logo_id, customer_id, order_id, product_id)
Create Table web_design (web_id, customer_id, order_id, product_id)

所以我的想法是,对于每个新客户,他们都会被分配一个唯一的客户 ID。对于他们购买的每项服务,此 ID 都会保留在他们身边。我遇到困难的地方是说客户订购了 3 种不同的服务。如何显示他们购买的 3 项服务,而无需进行一百万次不同的循环或验证检查?真正连接所有表以方便访问的最佳方式是什么?

非常感谢任何建议!

【问题讨论】:

  • 当每个服务具有相同的基本列时,为什么要为它们创建单独的表?为什么没有一个带有“类型”列的表?这将大大简化。
  • @Ilion,原因是因为每个服务都会存储不同的信息,所以我认为最好为每个服务提供单独的表。我在帖子中给出的示例只是连接所有表的方式。除了我展示的内容之外,每个表中都会存储更多信息。我错过了你说的话吗?
  • 我不这么认为,但是当您提供的内容不同时,很难就您的结构向您提供建议。

标签: php mysql sql database database-design


【解决方案1】:

在我看来,您希望加入表格并按某个客户 ID 进行过滤。看看这个例子让你开始:

SELECT *
FROM   customers AS c
       INNER JOIN orders AS o
           ON c.customer_id = o.customer_id
WHERE c.customer_id = CustomerIDGoesHere

您可以加入任意数量的表格

FROM table1
     JOIN table2
         ON table1.column = table2.column
     JOIN table3
         ON table2.column = table3.column
     JOIN table4
         ON table1.column = table4.column

【讨论】:

  • 好的,我明白了。因此,假设我想为 customer_id 10 提取所有订单。并说出于某种原因,该客户已订购了所有 30 项服务。我必须加入所有 30 个表吗?
  • 否,将显示订单表中具有客户 ID 的所有 30 行,以及客户表中的任何信息。您只需连接表一次并指定您想要的数据。在这种情况下,您说您想要连接客户和订单并显示特定客户 ID 的所有行。尝试将一些数据放入您的表中并玩一下
  • 感谢您的样品!...现在说我想从 3 个订单中检索信息。假设我想获取 product_id 2 输入的名字和姓氏。从与某个 customer_id 关联的订单表中选择所有行后,我将如何执行此操作?
  • 更新示例 sqlfiddle.com/#!2/2ad3f/12 显示如何从连接表中选择特定列
【解决方案2】:

关系数据库通常在客户表和服务表之间有一个表。也许可以称之为 customer_ordered_services

它只是掌握客户和他们想要的服务的关键

在您的示例中,此中间表中将包含三行来反映他们想要的三种服务

customerId 1, serviceId 1
customerId 1, serviceId 2
customerId 1, serviceId 3

【讨论】:

  • customer_ordered_services 表和我的 orders 表一样对吗?
  • 是的,如果 product_id 链接到 logo_id 或 web_id。我不确定为什么 product_id 在这些表中
猜你喜欢
  • 2015-01-04
  • 1970-01-01
  • 2013-08-05
  • 2021-07-18
  • 1970-01-01
  • 2012-01-23
  • 2014-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多