- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题
假设您有多个花园,每个花园种有不同数量的植物。你的工作是不时检查每个花园的每株植物。每次访问时,您都必须注释植物的某些属性,例如浇水是否良好和高度。该应用程序旨在在这些访问期间提供帮助。
我的方法
我想使用房间数据库。因此,我创建了一个实体 GardenVisit,它具有唯一的 ID 和访问日期。然后我需要一个 GardenAnnotation 实体。该实体将为花园中的每株植物排成一排,并在访问当天标注其 ID 和特征。我考虑过为每个 GardenVisit 创建一个表,并以一对一的关系将它们链接起来,但我找不到实现此目的的方法。
为什么我要为每次 GardenVisit 创建一个 GardenAnnotation 表?
在应用程序中,您可以删除花园参观。因此,在删除它时,它也应该删除它的 GardenAnnotation 表。这似乎是拥有此功能的最简单方法。
结论
如何在房间数据库中创建同一实体的多个表并将它们与另一个表链接?
如果您有更好的方法,我将不胜感激。实际上,为同一个实体创建很多表感觉很奇怪。
最佳答案
为了拆分基本相同的布局(模式)而使用多个表可能意义不大,而且可能会使事情复杂化。
根据您的描述,您有一些共同点:-
我会相应地建议表格。
Garden 表可能有但可能不限于花园的人类标识符(Kew,巴比伦空中花园......)(因为它已经存在并且有效) 标识符 (id)。
Plant 表(蒲公英、玫瑰......),其中包含关于植物的 ID、名称和其他信息的列。
将植物映射/链接/关联到花园的表格(未提及),允许多对多关系(一个花园可以有很多植物,一个植物可以在多个花园中使用)。 2 列,一列是通往花园的 map ,另一列是植物的 map 。
Visit 表,其中包含访问的日期/时间(也许是开始/结束)以及 map /链接……到花园。
Trait 表,例如浇水好,死了(如果我正在照料植物)....列将是 id 和 trait(确切的要求)
一个注释表,它将链接到访问(因此也是花园)并链接到花园内的植物以及指向要分配的特征的链接。
因此模式可以基于 SQLite(以演示数据库/关系如何从 SQLite pov 工作):-
DROP TABLE IF EXISTS annotation;
DROP TABLE IF EXISTS trait;
DROP TABLE IF EXISTS visit;
DROP TABLE IF EXISTS garden_plant_map;
DROP TABLE IF EXISTS garden;
DROP TABLE IF EXISTS plant;
CREATE TABLE IF NOT EXISTS garden (garden_id INTEGER PRIMARY KEY, garden_name TEXT UNIQUE);
INSERT INTO garden (garden_name)
VALUES('Kew' /* id will be 1 */),('Hanging Gardens of Babylon' /* id will be 2 and so on (probably)*/)
;
CREATE TABLE IF NOT EXISTS plant(plant_id INTEGER PRIMARY KEY, plant_name TEXT UNIQUE);
INSERT INTO plant (plant_name)
VALUES('Rose' /* id will be 1 etc*/),('Dandelion'),('Poppy'),('Azelia'),('Oak'),('Beech')
;
CREATE TABLE IF NOT EXISTS garden_plant_map (
garden_map INTEGER,
plant_map INTEGER,
PRIMARY KEY (garden_map,plant_map)
FOREIGN KEY (garden_map) REFERENCES garden(garden_id) ON DELETE CASCADE ON UPDATE CASCADE
FOREIGN KEY (plant_map) REFERENCES plant(plant_id) ON DELETE CASCADE ON UPDATE CASCADE
);
INSERT INTO garden_plant_map
VALUES
(1 /* Kew */, 3 /* Poppy*/),
(1 /* Kew */, 1 /* Rose */),
(2 /* Babylon */, 2 /* Dandelion */),
(2,5),(2,6) /*Oak and Beech for Babylon */
;
CREATE TABLE IF NOT EXISTS trait (trait_id INTEGER PRIMARY KEY, trait_description UNIQUE);
INSERT INTO trait (trait_description)
VALUES ('Well watered'),('Dead'),('Stressed'),('Flourishing'),('under watered')
;
CREATE TABLE IF NOT EXISTS visit (
visit_id INTEGER PRIMARY KEY,
garden_map INTEGER,
start_of_visit TEXT /* will be date in yyyy-mm-dd hh:mm:ss format*/,
end_of_visit TEXT,
visit_done INTEGER, /* 0/false or 1 (or greater)/true */
FOREIGN KEY (garden_map) REFERENCES garden(garden_id) ON DELETE CASCADE ON UPDATE CASCADE
);
INSERT INTO visit (garden_map,start_of_visit,end_of_visit,visit_done)
VALUES
(1,'2020-01-01 08:00','2021-01-01 10:00',true)
,(1,'2021-01-01 08:00','2021-01-01 10:00',false)
,(2,'2021-02-01 08:00','2021-02-01 10:00',false)
,(1,'2021-03-01 08:00','2021-03-01 10:00',false)
,(2,'2021-04-01 08:00','2021-04-01 10:00',false)
;
CREATE TABLE IF NOT EXISTS annotation (
annotation_id INTEGER PRIMARY KEY,
visit_map INTEGER REFERENCES visit(visit_id) ON DELETE CASCADE ON UPDATE CASCADE,
trait_map INTEGER REFERENCES trait(trait_id) ON DELETE CASCADE ON UPDATE CASCADE,
garden_plant_map_garden_map INTEGER, garden_plant_map_plant_map INTEGER,
FOREIGN KEY (garden_plant_map_garden_map,garden_plant_map_plant_map) REFERENCES garden_plant_map(garden_map,plant_map)
);
INSERT INTO annotation (visit_map, trait_map, garden_plant_map_garden_map, garden_plant_map_plant_map )
VALUES
(1 /* visit on 1/1/20 */, 1 /* Well watered */, 1 /* Kew */, 3 /* Poppy */ )
, (1 /* visit on 1/1/20 */, 5 /* under watered */, 1 /* Kew */, 1 /* Rose */ )
, (3 /* visit on 1/2/21 */, 2 /* dead */, 2 /* Babylon */, 2 /* Dandelion */ )
, (3 /* visit on 1/2/21 */, 4 /* flourishing */, 2 /* babylon */, 6 /* Beech */ )
, (3 /* visit on 1/2/21 */, 3 /* stressed */, 2 /* babylon */, 5 /* Beech */ )
;
SELECT
garden_name,
start_of_visit,end_of_visit, visit_done,
plant.plant_name,
trait.trait_description,
CASE WHEN visit_done THEN 'Completed' ELSE 'ToDO' END AS status
FROM annotation
JOIN visit ON visit.visit_id = annotation.visit_map
JOIN garden ON visit.garden_map = garden.garden_id
JOIN plant ON garden_plant_map_plant_map = plant_id
JOIN trait ON trait_map = trait_id
;
查询结果为:-
假设 id 为 1 的访问被删除(尽管您可能认为 visit_done 为真有效删除(因此您总是可以及时返回))例如使用:-
DELETE FROM visit WHERE visit_id = 3;
然后相同的查询返回:-
即访问 3 的三个注释已被删除
忽略删除,即 visit_id 为 3 的访问剩余,那么表格看起来像:-
花园
植物
特质
访问
花园植物 map
注释
关于android-studio - 如何在房间数据库上创建同一实体的多个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70533333/
都是整数,但一直报错 "Only assignment, call, increment, decrement, await, and new object expressions can be us
我有以下情况:一个“对话”实体/表,它有多个关联的标签。Tag 也是一个实体/表 - key/id 是 tagName(一个字符串)。 在客户端 (javascript),我在处理标签时使用字符串数组
我想通过 maven java 源代码生成器自动生成 java 源代码。我想通过查看一个大实体 xml 文件来创建实体类,该文件将包含系统中的所有实体和实体关系。据我搜索,目前maven中没有这样的插
我有一段时间有这个疑问,有人说 EJB 3.0 中没有所谓的实体 bean。有没有可能这样说,EJB 3.0 使用 JPA 来持久化数据并且没有对以前版本(EJB 2.1)中的实体 bean 进行增强
我观看了关于 Core Data 的 2016 WWDC 视频并查看了各种教程。我见过使用 Core Data Framework 创建对象以持久保存到 managedObjectContext 中的
实体(entites) 用于定义引用普通文本或特殊字符的快捷方式的变量,可在内部或外部进行声明 实体引用是对实体的引用 声明一个内部实体 语法: <!ENTITY 实体名称 "
This page建议 !ENTITY: If you want to avoid duplication, consider using XML entities (for example, [ ]
我正在努力解决这个问题:如何判断一个概念是聚合根还是只是一个实体(属于 AR 的一部分)? : 他们都有 ID 它们都是由实体或值对象组成 也许如果我需要引用其他 AR 中的实体,那么我需要将其设为
我使用 Symfony2 和 Doctrine,我有一个关于实体的问题。 出于性能方面的考虑,我想知道是否可以在不进行所有关联的情况下使用实体? 目前,我还没有找到另一种方法来创建继承带有关联的类的模
我已经尝试在 HTML 中包含以下代码,用于附加文件符号。但它显示一个空的白框。 📎 📎 📎 是否有替代的 HTML 附加文件符号实体? 如果没有,我们可以手动创建
我在 grails 中有一个域类......我如何让 gorm 在创建数据库时忽略这个实体?就别管它了。 最佳答案 如果我理解,你不想从域类创建表?如果是,请在域类中使用此代码: static map
我正在努力解决这个问题:如何判断一个概念是聚合根还是只是一个实体(属于 AR 的一部分)? : 他们都有 ID 它们都是由实体或值对象组成 也许如果我需要引用其他 AR 中的实体,那么我需要将其设为
我已经尝试在 HTML 中包含以下代码,用于附加文件符号。但它显示一个空的白框。 📎 📎 📎 是否有替代的 HTML 附加文件符号实体? 如果没有,我们可以手动创建
如何在我的实体中以 14-04-2017 格式存储日期? 但我必须从字符串中解析它。 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-
我需要从两个连接表中获取数据。数据集是什么类型?我是否需要创建一个包含这两个表中的属性的类以用于数据集类型,或者我可以使用实体模式中的类型。我如何修改我的方法才能正常工作? public static
好的,我们正在尝试建立一个中央站点来查看来自销售我们产品的多个供应商的数据。这些多个供应商使用不同的销售系统(确切地说是两个不同的系统),因此每个数据库看起来完全不同。我们与他们的数据库同步,因此数据
我是 backbone 的新手。但是当我研究模型实体时,我不明白一些事情。如果我们可以像 java 或 C# 这样的标准语言一样定义模型属性,那就太好了。有没有可能是这样的。所以我的想法是这样的: M
我想获取存储在可绘制的 xml 文件中的形状的颜色。 我来到了将 Drawable 存储在 Drawable 变量中的步骤,所以,现在我想获取形状的颜色(纯色标签)。 有什么建议吗? 最佳答案 Gra
实体是直接映射到我们的数据库(我们用于 Hibernate)的类。 在调用 DAO 之前,我们的服务类包含这些实体的业务逻辑。 我们还有命令对象,它们是与特定 View 相关的 POJO。有人告诉我实
在我的应用程序中,我需要显示不同存储过程返回的记录列表。每个存储过程返回不同类型的记录(即列数和列类型不同)。 我最初的想法是为每种类型的记录创建一个类,并创建一个函数来执行相应的存储过程并返回 Li
我是一名优秀的程序员,十分优秀!