gpt4 book ai didi

php - 请提供数据库架构建议

转载 作者:行者123 更新时间:2023-11-29 02:28:40 25 4
gpt4 key购买 nike

我有一个场景,但我对如何为它设计数据库架构感到困惑。

在我的软件中(php)有公司,有应用。

公司需要获得许可才能访问应用程序。

现在每个应用程序的字段(购买许可证时的表格)是不同的。

例如:

对于应用程序 1:

字段是:

  1. 用户数量
  2. 组数

应用2:

  1. 用户数量

应用3:

  1. 使用小时数

价格基于这些字段。

现在我需要为此设计架构,以便公司可以在一个页面上管理所有应用程序的许可证。

我怎样才能使这个模式通用?

请帮忙。谢谢。

最佳答案

你可以使用这种类型的结构

select * from applicationMaster



| APPID | APPNAME |
------------------------
| 1 | Application1 |
| 2 | Application2 |

ApplicationMaster 将与主要应用程序相关的详细信息一起使用,这些详细信息不会重复,例如名称、日期等。

查询 2:

select * from applicationField



| FIELDID | APPID | FIELDNAME |
---------------------------------
| 1 | 1 | NoOfUsers |
| 2 | 1 | NoOfGroups |
| 3 | 2 | NoHourusage |

ApplicationField 可以为特定的 appId 调整任意数量的字段。所以 AppId 1 有 2 个字段 NoofUsersNoOfGroups。如果需要,它还能够为特定应用调整较新的字段。

查询 3:

ApplicationValue 将具有每个许可应用程序的值,因此它将具有 compId,它代表哪家公司使用 fieldId 进行了应用,该 fieldId 引用 applicationField 表,我们可以获得存储哪些应用程序值。

select * from applicationValue



| ID | COMPID | FIELDID | FIELDVALUE |
--------------------------------------
| 1 | 1 | 1 | 50 |
| 2 | 1 | 2 | 150 |
| 3 | 2 | 3 | 350 |
| 4 | 3 | 1 | 450 |
| 5 | 3 | 2 | 50 |

applicationPriceMaster 存储每个应用程序的价格包。一个应用程序可以有多个包。

select * from applicationPriceMaster


| APPPACKAGE | APPID | TOTALPRICE |
-----------------------------------
| 1 | 1 | 50 |
| 2 | 1 | 100 |

对于每个应用程序包,其详细信息将发布在此表中。

select * from applicationPriceDetail


| APPPACKAGE | FIELDID | QUANT |
--------------------------------
| 1 | 1 | 1 |
| 1 | 2 | 1 |
| 2 | 1 | 10 |
| 2 | 2 | 1 |

注意请检查结构,因为它现在太复杂了,并检查您将在这些表上运行的查询类型及其性能。

select apm.APPPACKAGE, TOTALPRICE from
applicationPriceMaster apm
inner join
(select APPPACKAGE from applicationPriceDetail
where FIELDID=1 and QUANT=1)a
on apm.APPPACKAGE = a.APPPACKAGE
inner join
(select APPPACKAGE from applicationPriceDetail
where FIELDID=2 and QUANT=1)b
on
a.APPPACKAGE=b.APPPACKAGE

SQL FIDDLE :

| APPPACKAGE | TOTALPRICE |
---------------------------
| 1 | 50 |

对于单个过滤器,您必须使用此查询,因此您必须随着内部过滤器的数量增加内部查询的数量。

select apm.APPPACKAGE, TOTALPRICE from
applicationPriceMaster apm
inner join
(select APPPACKAGE from applicationPriceDetail
where FIELDID=1 and QUANT=1)a
on apm.APPPACKAGE = a.APPPACKAGE

注意-此查询非常复杂,仅当值与 packagedetail 表中提到的值相同时才有效,并且仅当值为 2 个过滤器时才有效,您必须删除 1 个内部联接,如果只有 1 个过滤器。所以我建议你在使用这种方法之前重新考虑。

关于php - 请提供数据库架构建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16557622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com