在单行中存储对多个表的引用的最佳方法?

时间:2017-09-22 12:53:00

标签: mysql database database-design relational-database er-diagrams

这是关于数据库建模的问题,我正在将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        |
+----+-----------+--------------+--------------+--------------+----------+

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

有没有更好的方法呢?

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

感谢您抽出宝贵时间帮助我。

1 个答案:

答案 0 :(得分: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        |
+----+----------+--------------+--------------+--------------+----------+----------+----------+

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