我目前正在开发一个旅行和网络应用程序旅游网站。我愿意做的是允许用户注册自己以便为自己和/或家庭成员预订旅游。 “家庭成员”不需要自己注册。并且用户应该能够从预订中取消任何会员/他自己。我到目前为止设计的表格是:
users
id
,
name
,
password
,
email
,
phone
,
level
(区分用户和管理员),
dob
(出生日期),
status
(有效或已屏蔽)
tours
id
,
title
,
short_desc
,
start_date
,
end_date
,
max_passenger_capacity
,
fees
,
published
(布尔值),
long_desc
passengers
(对于未注册的其他乘客)
id
(PK),
user_id
(来自users
的FK),
name
,
age
,
sex
,
status
wallets
(用户可以存款和付款)
id
(PK),
user_id
(来自用户的FK),
date_time
,
narration
,
ref_no
,
withdraw
(浮动),
deposit
(浮动)
现在我打算创建一个invoice
表(id
,date
,user_id
等),invoice_items
表(id
, invoice_id
等,参考谁预订了哪个旅行团,passengers_booked
表(id
,tour_id
,passenger_id
等来跟踪哪位乘客选择了哪个旅游。)
用户应该能够取消巡回演出中的所有成员或巡演中的任何成员。在后一种情况下,应该提出发票,引用任何退款,其他成员应该选择参加巡回演出。
当用户为自己选择游览时,应该如何管理条件?以及如何管理这样的invoice_items以便他可以取消自己?
我完全迷失了。请帮忙。
答案 0 :(得分:1)
关于users
和invoices
结构的一些想法,希望能让您重回正轨。您可能需要澄清有关其他方面的问题(例如退款)。
要应对users
可选passengers
,您可以创建一个公共people
表,people_id
在passengers
和{{{{}}中都是FK 1}}。希望这可以帮助您保持后续查询更简单,并简化users
成为users
的过程,以及可能passengers
注册passengers
的过程。例如:
users
:people
(PK),id
,name
,dob
sex
:users
(PK),id
,people_id
,password
,email
,{ {1}},phone
level
:status
(PK),passengers
(来自人群的FK),id
(作为乘客)
注意:
people_id
会更好地作为多个字段(status
和people.name
)吗? forename
和surname
更好地视为email
上的字段而不是phone
(平衡针对潜在营销的冗余)?people
,而不是users
(因为这需要维护)。dob
表上的条目保持唯一,以帮助防止为同一个人添加重复项。关于发票和退款部分,我不完全确定您发布的片段需要什么。请考虑以下事项:
age
:people
(PK),invoice
,id
,invoice_date
,user_id
tour_id
:invoice_amount
(PK),passengers_booked
,id
tour_id
:passenger_id
(PK),wallets
(来自用户的FK),id
,user_id
,{{ 1}}(FK到发票),transaction_date_time
,narration
(浮动)
注意:
invoice_no NULL
的意图是什么,因为您知道谁在ref_no
加入transaction_amount
和invoice_detail
,为谁预订。invoice
记录来处理。passengers_booked
和tour_id
合并到一个wallet
字段中,以便在例如计算余额时删除冗余并简化处理。可以使用+ ve和-ve值来区分类型。 [虽然您可能有会计标准要求单独的字段。] withdrawal
添加到deposit
以跟踪与特定旅行相关的付款和退款(但可能transaction_amount
存款/取款。类似地,然后可以在接收到钱包中的存款/取款时使用invoice_no
。 [注:您可能考虑合并wallet
和NULL
。] 示例强>
用户U正在为自己和家人A预订旅行T, B,C& D.他还支付了款项。让我们假设游览T的费用是 $ 1000 /乘客。所以他支付了5000美元。
ref_no
表有一个用户U的记录
invoice_no
表具有巡回记录T.的记录
ref_no
表有5个U,A,B,C,D记录
users
表有5条记录
tours
表有5个巡视记录。
people
表的记录日期为例如'1月1日'为5000美元的旅行T.
passengers
的存款记录为5000美元。
passengers_booked
还支付了 - $ 5000对付我们的发票。
现在他希望取消B的预订。为此,他将退还(假设) 取消费用后$ 900。
B记录已从invoice
移除(但可以留在wallet
以备将来使用)。
wallet
表格会根据修订日期进行更新,例如: '1月8日',金额4100美元
passengers_booked
表格以900美元的价格退还该发票。
因此,我们使用只保留最新头寸的单一发票 您可以根据该发票的钱包条目总和检查最新发票金额,以查看是否有未付金额或应退款。
n.b。还有其他方法可以对此进行建模,例如:使用passengers
作为上述摘要,但有多个invoice
记录来捕获乘客变化的详细信息。取决于你为什么这样做,以及它需要多么复杂,将决定哪条路线更适合你。