如何为处理许可证购买的应用设计数据库/Django模型

0 投票
1 回答
926 浏览
提问于 2025-04-17 14:40

我正在设计一个应用程序,主要处理用户购买许可证的过程。我不打算关注用户身份验证的部分,而是专注于交易的部分。
基本上,我会定义以下几个模型:

1) 用户 - 用来存储用户的数据。
2) 许可证 - 用来存储许可证的数据。一个用户可以购买多个许可证,所以用户和许可证之间是多对一的关系;而每个许可证只对应一个交易,所以许可证和交易之间是一对一的关系。
3) 支付方式 - 用来存储支付方式(基本上就是信用卡)。用户和支付方式之间也是多对一的关系。
4) 交易 - 用来存储交易的数据。每个交易只由一个用户完成,所以交易和用户之间是一对一的关系;每个交易也只关联一种支付方式,因此交易和支付方式之间也是一对一的关系。

你觉得这样设计对吗?
我通过在用户和许可证之间建立关系来增加了一些冗余(其实它们本来可以只通过交易连接),但我觉得这样可以减少SQL查询时的连接操作。

1 个回答

1

你可以用同样的结构来处理任何类型的产品订单系统:

一个 客户 向一个 供应商 下一个 销售订单,这个订单可以包含一个或多个 目录项,其中一个可能是 销售协议,比如软件许可证。

供应商会向 付款方(这可能和客户是同一个人)发送 发票(也就是请求付款),发票会发送到一个 账单地址,可能会发送一次或多次。付款方会针对这张发票进行一次或多次 付款,直到这张发票被 支付 完为止。

付款的时间不一定和 发货交付 销售订单的商品一致。你可以在发票支付之前或之后发货。

销售订单的商品会被 发货收货方,地址是 收货地址(这可以是一个IP地址或电子邮件地址),希望商品能够顺利 送达,这时你就可以 确认收入

这应该能帮助你入门:

PARTY
id
type {organization, individual, automated_agent}
name
...


ADDRESS
id 
type {email, web, facility, telephone}
...


SALES_ORDER
id
order_date
customer_id -> party
vendor_id -> party
bill_to_id -> party
bill_to_address_id -> address


CATALOG_ITEM
id
type {good, service, agreement}
...


SALES_ORDER_ITEM
id
sales_order_id -> sales_order
catalog_item_id -> catalog_item
ship_to_id -> party
ship_to_address_id -> address
price
quantity


PAYMENT_METHOD
id
name


# whether payment has a key to invoice depends on whether you allow cross-invoice payments and/or partial payments
PAYMENT
id
payment_date 
payer_id -> party
payee_id -> party
amount
method -> payment_method

省略部分:

shipment_request
shipment
delivery
invoice
invoice_payment

撰写回答