鍍金池/ 問答/Java  PHP  GO  數(shù)據(jù)庫  HTML/ 比火車票復雜的數(shù)據(jù)庫設計方案?

比火車票復雜的數(shù)據(jù)庫設計方案?

最近要做一個系統(tǒng), 有點類似售賣火車票的概念,但是能選座,大概也是賣了長途的票,同一條線的短途余票也會扣除庫存. 但是比這個還要復雜一點.比如我要賣高鐵票,京廣線,需求如下:

  1. 可以選座位, 客戶端可以提前知道買票人的信息(膚色)
  2. 賣出去北京-上海的票之后, 北京-廣州的庫存就要減一, 但是上海-廣州的票不受影響(其他情況類似,路途有交叉的票都不能再賣了)
  3. 這趟車每個座位都可以坐5個人,但是這5個人的膚色必須相同,比如3車8F這個座位可以坐5個白人,或者5個黑人. 第一個買這個座位的人決定這個座位能坐什么膚色的人. 假如第一個買到3車8F座位的人是黃種人, 那么黑種人或者白種人去買票的時候就看不到這個座位了,但是其他黃種人還是可以選的.
  4. 要保證客戶端查詢余票的效率

想過很多種方案,要么查詢效率不夠高,要么數(shù)據(jù)不好維護. 總有一種感覺, 自己知識面不夠,可能自己想復雜了,在懂行的人來說可能就是一個算法的事....之前請教過一個會數(shù)學建模的人,只是讓我去看線性規(guī)劃,百度半天實在看不懂! 還請大神不吝賜教~ 給點思路或者方向都行....Orz

回答
編輯回答
尕筱澄

為避免種族歧視之嫌,我們只討論站點吧。

題主在站點上的設計是有問題的,拿北京-鄭州-廣州舉例(火車從北京到廣州是不可能經過上海的),客人選了北京-廣州的班次,但買的是北京-鄭州段,那么:

  • 首先看北京-鄭州段有沒有庫存,有的話就減1;
  • 如果沒有該段庫存,那么找最短的包含該段的庫存,例如北京-漢口,這樣會北京-漢口的庫存減1,同時鄭州-漢口的庫存加1。
2018年9月12日 03:21
編輯回答
涼汐

把所有車票打撒呢?
比如車從1號站始發(fā),到5號站結束,也就是1-2-3-4-5:1,冒號1的意思是綁定座位號,100個位子即1-100
打撒后視為有4張票,也就是1-2:1、2-3:1、3-4:1、4-5:1
如果列車有100個座位,那就可以認為有100*4=400張票

如果某人要做1-3的話,就看1-2和2-3的票數(shù)量是否都大于1并且座位號相同,是的話,就賣票,票面上寫1-3和座位號,并且后臺對應座位號的1-2和2-3都減1
假設當2-3的票數(shù)量為0的時候,買1-4的票就失敗了,但還是能買3-4的票

關于膚色,那就是座位號與膚色綁定,一開始膚色和座位號沒有綁定,一旦購票成功,座位號與膚色就綁定了,以后再有人來買票,可分配的座位篩選條件為(未綁定膚色的座位和綁定了指定膚色的座位)

2018年5月9日 01:26