數據庫結構——複雜的需求
我有一個建構網站的項目,但它很複雜,而且我無法確定建構數據庫的最佳方法是處理這些特定要求。
該網站供當地建築商和農民(以及使用重型設備的任何其他人)在他們自己之間租用他們的機器。使用者應該能夠註冊並列出設備項目,然後該站點的其他使用者可以搜尋和預訂。
因此,建築商可能會註冊並上傳他的混凝土攪拌機的清單。然後,另一個使用者可以在 2 個日期之間搜尋要租用的混凝土攪拌機,並通過該網站預訂攪拌機。
到目前為止,一切都很好。
問題是建造者應該能夠設置一個預設的每日費率,但他們也應該能夠說整個 7 月份,或者在 8 月的最後兩個週末,混合器的預設每日費率是不同的。因此,基本上每天可能最終都有不同的費率,我無法弄清楚建構數據庫的最有效方法是什麼,以及如果每天可能有不同的費率,如何計算租用幾天的總成本。
目前我正在想像必須循環通過一個 365 大小的陣列,但這不可能。我對此有點陌生,所以我可能只是感到困惑。
除了您應該擁有的其他表格(如設備、農民……)之外,您還可以使用以下方法:
equipment_price --------------- equipment_id equipment_name equipment_default_price equipment_special_price ----------------------- equipment_id special_price_interval_start special_price_interval_end equipment_special_price
現在假設您有一台混凝土攪拌機,預設價格為每天 100 美元,但在 8 月的前 2 週,該設備具有不同的(特殊)價格。
您查找正確價格的查詢(截至今天)將如下所示:
SELECT a.farmer_name, b.equipment_name CASE WHEN d.equipment_special_price IS NULL THEN c.equipment_default_price WHEN d.equipment_special_price > c.equipment_default_price THEN c.quipment_default_price ELSE c.equipment_default_price END AS equipment_price FROM farmers a, LEFT JOIN equipments b ON b.equipment_farmer_id = a.farmer_id LEFT JOIN equipment_price c ON c.equipment_id = b.equipment_id LEFT OUTER JOIN equipment_special_price d ON d.equipment_id = b.equipment_id WHERE d.equipment_special_price = ( -- Usefull if you have multiple special prices, for the same equipment, in overlapping intervals SELECT MAX(equipment_special_price) FROM equipment_special_price WHERE special_price_interval_start >= NOW() AND special_price_interval_end <= NOW() )
有一個
equipment
包含的表,equipID, farmerID, defaultRate
以及一個包含 的表rentRate``equipID, date, specialRate
然後該
equipment
表應該包含設備的正常資訊,並且您應該將所有例外情況寫入該rentRate
表。實際的使用者界面可能允許使用者選擇一個日期範圍,並且您可以通過循環插入到數據庫中(例如,如果您允許他們選擇特殊價格的開始日期和結束日期)。
查看費率時,數據庫會首先檢查是否有特殊的租金率
rentRate
,如果沒有,則列出預設費率。