Database-Design

關於 EDR 的問題:植物可能有一個或多個收穫季節

  • May 19, 2021

我正在研究以下 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_reqSELECT * 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 DateMinimum Duration of Harvest等。

我會把兩張綠色的桌子結合起來。如果一次收穫的開始日期早於第二次收穫的開始日期,那麼這只是顯示它們在表示層中正確排序(即通過ORDER BY子句 on StartDate)。

我創建了一個簡單的小提琴來向您展示我將如何在這裡實現設計。

這是 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都會有一行。

引用自:https://dba.stackexchange.com/questions/291454