电影院票务管理系统数据库设计(2)
在電影院票務管理系統(tǒng)數(shù)據(jù)庫設計(1)中我們從一道面試題展開,最后給出如下影院票務管理系統(tǒng)的表關系圖
以上的設計是否易用?
首先想一下訂票最簡單的過程,不包括意外情況。
想了一下這個過程,我自己感覺步驟1比較累贅,服務員每次都需要創(chuàng)建一個空訂單頭,之后才真正開始選位出票,比較麻煩。
而且如果在選位子之前,顧客突然決定不看電影了,服務員必須把前面創(chuàng)建的訂單頭刪除,否則會在系統(tǒng)中留下孤立的OrderHead記錄,會破壞數(shù)據(jù)完整性。
同時想到平日自己去電影院買票時,服務員都是直接選位子出票的,所以我們修改設計如下:
現(xiàn)在系統(tǒng)的訂票流程如下:
這個流程去除了每次服務員創(chuàng)建訂單的動作,簡化了最一般的情況,即顧客買某場電影的多張票。但若顧客要買多場電影的票時,需要多次刷會員卡,這里變麻煩了但這種情況不多,我覺得這更符合影院的實際需求。
統(tǒng)計一下票房收入
統(tǒng)計某段時間內,某部電影總共銷售收入應該是比較常見的需求,我們用T-SQL來實現(xiàn)這一需求。
輸入:電影ID(@MovieID),起始時間(@StartDate),終止時間(@EndDate)
輸出:總票房收入(@TotalBoxOffice)
if object_id(N'Proc_GetBoxOffice') is not null begindrop procedure dbo.Proc_GetBoxOffice; end gocreate procedure dbo.Proc_GetBoxOffice@MovieID int,@StartDate datetime,@EndDate datetime,@TotalBoxOffice money output asif @MovieID is null beginraiserror('@MovieID is null in Proc_GetBoxOffice', 16, 1); endif @StartDate is null beginraiserror('@StartDate is null in Proc_GetBoxOffice', 16, 1); endif @EndDate is null beginraiserror('@EndDate is null in Proc_GetBoxOffice', 16, 1); end;With OrderTotalAmount as (selectOrderInfo.Order_ID,OrderInfo.Order_AdjustedPrice * count(*) as OrderTotalAmountfromdbo.Table_Order OrderInfoinner joindbo.Table_Schedule ScheduleonOrderInfo.Schedule_ID = Schedule.Schedule_IDinner joindbo.Table_OrderSeat OrderSeatonOrderInfo.Order_ID = OrderSeat.Order_IDwhereOrderInfo.Order_BuyDate >= @StartDateandOrderInfo.Order_BuyDate < dateadd(day, 1, convert(varchar(10), @EndDate, 120))andSchedule.Movie_ID = @MovieIDgroup byOrderInfo.Order_ID,OrderInfo.Order_AdjustedPrice ) select@TotalBoxOffice = sum(OrderTotalAmount) fromOrderTotalAmount;?
?
轉載于:https://www.cnblogs.com/DBFocus/archive/2010/07/26/1785126.html
總結
以上是生活随笔為你收集整理的电影院票务管理系统数据库设计(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: isqlplus
- 下一篇: maven install (windo