2

这是一个关于数据库建模的问题,我在这个项目中使用了 mySQL。

我有三个名为 service[1-3] 的表(示例名称),每个表都包含服务的信息(想想修复服务、重建服务、微调服务等)。这三个表包含不同的信息,并且不能放在一个表中。

我希望能够跟踪哪些客户执行了哪些服务,以及他们是否已为该服务付费。

因此,假设我已经有一个名为customer的数据库实体。

现在,我想我可能想要创建一个名为 tbl_rendered_services 的第四个表,其外键指向该服务的相关实例以及相关客户。

该表如下所示:

tbl_rendered_services
+----+-----------+--------------+--------------+--------------+----------+
| id | customer  | service1_ref | service2_ref | service3_ref | billed   |
+----+-----------+--------------+--------------+--------------+----------+
| 1  | 1         | 00001        | NULL         | NULL         | 0        |
+----+-----------+--------------+--------------+--------------+----------+
| 2  | 1         | NULL         | 10002        | NULL         | 0        |
+----+-----------+--------------+--------------+--------------+----------+
| 3  | 2         | NULL         | NULL         | 20003        | 1        |
+----+-----------+--------------+--------------+--------------+----------+
| 4  | 2         | NULL         | 10003        | NULL         | 0        |
+----+-----------+--------------+--------------+--------------+----------+

使用此表,我可以通过查询为给定客户生成账单

SELECT * FROM tbl_rendered_services WHERE customer = 2 AND billed = 0;

返回:

+----+-----------+--------------+--------------+--------------+----------+
| id | customer  | service1_ref | service2_ref | service3_ref | billed   |
+----+-----------+--------------+--------------+--------------+----------+
| 4  | 2         | NULL         | 10003        | NULL         | 0        |
+----+-----------+--------------+--------------+--------------+----------+

现在,我认为到目前为止这似乎是一个合理的解决方案,但我的问题是:

有没有更好的方法来做到这一点?

我想不出任何,但我觉得可能有一个我没有看到?

感谢您花时间帮助我解决这个问题。

4

1 回答 1

0

我的建议:

tbl_rendered_services
+----+----------+--------------+--------------+--------------+----------+----------+----------+
| id | customer | service1_ref | service2_ref | service3_ref | billed_1 | billed_2 | billed_3 |
+----+----------+--------------+--------------+--------------+----------+----------+----------+
| 1  | 1        | 00001        | 10002        | NULL         | 0        | 0        | 0        |
+----+----------+--------------+--------------+--------------+----------+----------+----------+
| 2  | 2        | NULL         | 10003        | 20003        | 0        | 0        | 1        |
+----+----------+--------------+--------------+--------------+----------+----------+----------+

你可以看到像这样我没有重复。

于 2017-09-22T13:18:37.537 回答