2012-01-07 72 views
1

我想建立一個非常基本的每日銷售報告。我正在試圖決定如何構建數據庫以最好地實現這一點。下面是一個使用案例是:構建每日銷售數據庫

  • 在2011年1月5日,提供一個讓$ 500總關其產品
  • 在2011年1月5日的,提供一個讓$共200關,其產品
  • 在2011年1月6日,商者B $ 450總異地其產品
  • 在1月6日的,提供者B $共75關,其產品

目前的結構我是:

PROVIDER table

  • PK
  • 提供商

PRODUCT table

  • 提供商(FK)
  • 產品
  • 起始日期(銷售)
  • END_DATE

start_dateend_date是時可能發生的產品銷售。它僅用於參考,並不會影響其他任何內容。

SALES table

  • 產品(FK)
  • 銷售
  • 如何存儲日期

sales將是該產品銷售額的日常銷售額(美元)。

我不太清楚如何存儲銷售。銷售額只能按每種產品的每日總額計算。什麼是構建SALES表的最佳方式?謝謝。

+0

你能解釋一下start_date是什麼嗎? SALES表格日期是指示當天已售出物品的值嗎? – 2012-01-07 01:34:42

回答

3

產品表:

  • 這表應該是在自然 '過渡'。這意味着它可以隨時間變化而變化。
  • 2011年,您可能以15.99美元的價格銷售產品A,但2012年您希望以16.99美元的價格銷售相同的產品,因此您希望自己的桌子足夠靈活適應這種類型的變化。
  • 儘管存儲在此表中的數據具有靈活性,但是如果您曾刪除產品,則必須小心。如果您刪除某個產品,它將銷售銷售表中的任何匹配銷售交易或刪除它們(取決於FK行爲)。

銷售表:

  • 這表應該是在自然 '交易'。意思是一行代表與銷售相關的產品,並在時間上凍結。
  • 如果買方A在2011年以15.99美元的價格購買了產品A,您希望按原樣記錄此交易,在任何時間點都沒有任何數據變化,它反映了交易。
  • 如果買方B在2012年購買了相同的產品A但售價爲19.99美元,則您希望將其記錄爲單獨的交易。確定它是同一個產品,但這一行代表一個新的交易。

通過以上的設置,您可以更改價格,您認爲合適的product表,但它不會影響到已經發生的記錄在sales_transaction表銷售。

僞模式:

product

  • ID INT(11)無符號NOT NULL AUTO_INCREMENT
  • 名VARCHAR(255)
  • 價格小數(14.2)
  • 主鍵( ID)
  • 唯一密鑰(名稱)

sales_transaction

  • ID INT(11)無符號NOT NULL AUTO_INCREMENT
  • 的product_id INT(11)無符號NOT NULL
  • PROVIDER_ID INT(11)無符號NOT NULL
  • 價格小數(14.2 )
  • created_at datetime默認'0000-00-00 00:00:00'
  • 外鍵(product_id)在產品('id')上刪除casca德
  • 外鍵(PROVIDER_ID)引用上刪除級聯

provider提供商( 'ID'):

  • ID INT(11)無符號NOT NULL
  • 名VARCHAR(255)未空
  • 主鍵(ID)
  • 唯一的密鑰(名稱)

現在,您可以根據您在問題中的要求運行查詢,以獲取任何提供商的任何日期的任意產品的總和。

示例查詢:

# On Jan 5, 2011, Provider A makes $500 total off of its products 
SELECT prov.*, SUM(sales.price) 
FROM 
    provider AS prov 
INNER JOIN 
    sales_transaction AS sales on sales.provider_id = prov.id 
WHERE 
    provider.name = 'Provider A' 
AND 
    sales.created_at BETWEEN '2012-01-05 00:00:00' AND '2012-01-05 23:59:59' 
GROUP BY 
    prov.id 

提供的模式在本質上是骨骼,所以隨時爲您的業務需求決定增加一列,但它應該讓你在正確的方向前進。

另外,最後一條建議,我會建議將您的日期時間存儲在UTC。如果您選擇在當地時區存儲,則如果您進行需要從當地時區進行轉換的銷售,則會遇到任何令人頭痛的問題。

0

爲什麼不在銷售表中的日期字段?這將使每條記錄成爲特定日期的特定產品的銷售總額。

相關問題