Database-Design
關於 EDR 的問題:植物可能有一個或多個收穫季節
我正在研究以下 ERD,試圖了解在植物範例中連接實體的最佳方式是什麼!現在我只關注 ERD 的右側(黃色、橙色、綠色)!
英語邏輯:
- 每株植物都有種植/生長/收穫的要求!
- 種植**/**生長/收穫要求可能有不同的值和描述!
- 所有植物只有一張桌子來滿足種植要求。
- 所有植物只有一張桌子來滿足不斷增長的需求。
- 然而,有些植物可能有一個或多個收穫要求。
我的問題: 顯示收穫要求的最佳方式是什麼?
一個例子:
黃瓜:
- 種植要求值
- 不斷增長的需求價值
- 一個收穫季節:
- 價值觀
豌豆
- 種植要求值
- 不斷增長的需求價值
- 兩個收穫季節:
- 價值觀
- 價值觀
更新:
我在將上述 ERD 實施到 MySQL 時遇到了一些問題!
這是我創建兩個表的方法:
CREATE TABLE plant( plant_id INT AUTO_INCREMENT, taxon_name VARCHAR(25), common_name VARCHAR(25), general_description TEXT, image BINARY, cultivation_group_id INT, nutritional_info_id INT, disease_id INT, planting_req_id INT, growing_req_id INT, harvesting_req_id INT, PRIMARY KEY (plant_id) ); CREATE TABLE harvesting_req( harvesting_req_id INT AUTO_INCREMENT, number_of_harvests INT, descriptive_growing_season VARCHAR(25), min_length_of_growing_harvest FLOAT, max_length_of_growing_harvest FLOAT, harvest_start_date DATE, PRIMARY KEY(harvesting_req_id) ); ALTER TABLE plant ADD FOREIGN KEY(harvesting_req_id) REFERENCES harvesting_req(harvesting_req_id) ON DELETE SET NULL;
以下是使用Harvesing_req
SELECT * FROM harvesting_req;
的表格:但是當我嘗試以下查詢時,我只得到一個開始日期:
SELECT common_name, harvest_start_date FROM plant, harvesting_req WHERE plant.harvesting_req_id = harvesting_req.harvesting_req_id;
Plants
我傾向於在和之間建立一對多的關係Harvests
。即,該
Harvests
表有一個外鍵,Plants
可以根據需要允許盡可能多的收穫。該Harvests
表將包含與單個收穫相關的所有詳細資訊,例如Start Date
、Minimum Duration of Harvest
等。我會把兩張綠色的桌子結合起來。如果一次收穫的開始日期早於第二次收穫的開始日期,那麼這只是顯示它們在表示層中正確排序(即通過
ORDER BY
子句 onStartDate
)。我創建了一個簡單的小提琴來向您展示我將如何在這裡實現設計。
這是 DDL:
CREATE TABLE plant( plant_id INT AUTO_INCREMENT, taxon_name VARCHAR(25), common_name VARCHAR(25), PRIMARY KEY (plant_id) ); CREATE TABLE harvesting_req( harvesting_req_id INT AUTO_INCREMENT, plant_id INT, number_of_harvests INT, harvest_start_date DATE, PRIMARY KEY(harvesting_req_id) ); ALTER TABLE harvesting_req ADD FOREIGN KEY(plant_id_fk) REFERENCES plant(plant_id) ON DELETE SET NULL;
加入表格如下所示:
SELECT p.taxon_name , p.common_name , hr.* FROM plant p INNER JOIN harvesting_req hr ON p.plant_id = hr.plant_id;
輸出如下所示:
我不相信您需要
number_of_harvest
在表格中添加一列,因為每次收穫harvesting_req
都會有一行。