我正在研究以下 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;
的表格:
收获_req_id | number_of_harvests | 描述性生长季节 | min_length_of_growth_harvest | max_length_of_growth_harvest | 收获开始日期 |
---|---|---|---|---|---|
1 | 2 | 年度的 | 55.0 | 75.0 | 2017-01-15 |
2 | 2 | 年度的 | 55.0 | 75.0 | 2017-06-30 |
但是当我尝试以下查询时,我只得到一个开始日期:
SELECT common_name, harvest_start_date
FROM plant, harvesting_req
WHERE plant.harvesting_req_id = harvesting_req.harvesting_req_id;
common_name | 收获开始日期 |
---|---|
豌豆 | 2017-01-15 |
Plants
我倾向于在和之间建立一对多的关系Harvests
。即,该
Harvests
表有一个外键,Plants
可以根据需要允许尽可能多的收获。该Harvests
表将包含与单个收获相关的所有详细信息,例如Start Date
、Minimum Duration of Harvest
等。我会把两张绿色的桌子结合起来。如果一次收获的开始日期早于第二次收获的开始日期,那么这只是显示它们在表示层中正确排序(即通过
ORDER BY
子句 onStartDate
)。我创建了一个简单的小提琴来向您展示我将如何在这里实现设计。
这是 DDL:
加入表格如下所示:
输出如下所示:
我不相信您需要
number_of_harvest
在表格中添加一列,因为每次收获harvesting_req
都会有一行。