咱們有多種類型訂單:實物訂單、特享商戶訂單、覈銷訂單、生活繳費訂單、電影票訂單、機票訂單、以及之後會持續新增的未知類型訂單,它們都存放在不一樣的訂單類型表中面試
致使有些業務作起來會比較痛苦數據庫
好比:spa
order_id
,生活繳費訂單叫orderId
],將要根據訂單類型來分別判斷..............各類痛苦)例外還會有個未知因素:持續新增的未知類型訂單
每新增一種內型訂單,上面的實現都將隨之新增業務代碼。各類蛋疼。設計
上次換工做,面試遇到一道面試題,以下:code
請設計數據庫,用來存放 老師、學生等人員的信息,儘可能知足之後的擴展。(提示:請寫出3種方式,並分別寫出優缺點)對象
入門實現排序
思路:設計一張表,用來存放人員信息,定義
type
字段,用來區分老師 和 學生
- 優勢:簡單,能應對之後的各類查詢
- 缺點:數據冗餘字段太多,查詢速度慢入門
常見的實現擴展
思路:設計兩張表:一張存放老師、一張存放學生(最多見的方式)
- 優勢:都這樣搞,優勢天然多多
- 缺點:某些查詢有些難以實現。(如:查詢最近一個時間段的新加入的老師和學生並按時間排序)支付
面向對象的方式來實現
思路:設計3張表:人員表、老師特有屬性表、學什特有屬性表
- 優勢:以上兩種方式的優勢總和
- 缺點:未知
轉回來看 咱們商城的訂單表跟上面的無比相識,目前是使用第二種方式來實現,致使有些業務作起來有些不是很爽
若是換種方式按第三種方式來實現,一切又將美好起來。
第三種方式使用面向對象的方式來實現:
以上方式將能知足絕大多數業務狀況
如上面的兩種查詢狀況:
這裏實現起來由於都能在父訂單表中獲取到,將會無比 easy,業務代碼裏面的排序、字段轉換等問題也迎刃而解