首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >历史表的MySQL表设计

历史表的MySQL表设计
EN

Database Administration用户
提问于 2021-08-13 02:58:35
回答 1查看 262关注 0票数 0

我的要求是在历史记录页面中显示客户端的完整历史记录。

我们有以下表来维护客户端数据。

  1. 估计(Id,Clinet_Id,姓名,总数,日期)。-估计数据
  2. Estimate_Items ( Id,Estimate_Id,.) --估计数据
  3. 记帐(Id,Clinet_Id,姓名,总数,日期) --计费数据
  4. Billing_Items (Id,Billing_Id,.) --计费数据
  5. 提醒(Id,Clinet_Id,名称,类型,日期) --提醒数据
  6. 访问(Id,Client_Id,原因)-办公室访问数据
  7. 测试(Id,Client_Id,PackageName,价格,日期) --测试数据
  8. Test_Items (Id,Test_Id,Name,.)

将来我们可能会添加更多的表来维护不同的数据。

让我们说,

客户历史记录如下

  1. 第一天-我们向客户发送估计数。
  2. 第二天-客户来办公室参加测试&为测试付费
  3. 第三天-我们发送提醒

因此,历史页面应该按照日期对上述细节进行排序。历史将显示在一个更高的层次,它可以扩展到查看细节。

我的历史数据模型。

表:-历史记录(Id、名称、类型、SubType、日期)

历史上的样本数据,

代码语言:javascript
复制
1, 'Test Estimate', 'Estimate', 'Test', '01-01-2021'
2, 'Wellness Test', 'Test', 'Wellness', '01-02-2021'
3, 'Test Billing', 'Billing', 'Test', '01-02-2021'

因此,历史页面将有按日期排序的数据,在单击每个项目的展开时,我们将根据Type从相应的表中获取详细信息,并显示详细信息。

是否有更好的MySQL数据模型?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2021-08-13 03:42:27

你可以从你的桌子上得到你需要的一切。您没有提供如何确定Subtype的详细信息,但是您可以将该逻辑放在子选择中。

代码语言:javascript
复制
SELECT
  Type
 ,Name
 ,Date
FROM
  (
    SELECT
      Client_Id
     ,'Estimate' AS Type
     ,Name
     ,Date
    FROM
      Estimate
    
      UNION ALL

    SELECT
      Client_Id
     ,'Billing'
     ,Name
     ,Date
    FROM
      Billing

      UNION ALL

    SELECT
      Client_Id
     ,'Test'
     ,PackageName
     ,Date
    FROM
      Test

      UNION ALL

    SELECT
      Client_Id
     ,'Reminder'
     ,Name
     ,Date
    FROM
      Reminder
  ) ClientSummary
WHERE
  Client_Id = 1
ORDER BY
  Date
 ,Type
 ,Name

如果MySQL不够聪明,无法将谓词Client_Id = 1推入子select中,那么在内部查询的每个select上都需要WHERE Client_Id = 1

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/297995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档