问题涉及两个SQLite数据库表:
persons
和measurements
。
一个人可以进行多次测量,但每次测量只有一个人。因此,人与测量之间存在1:M的关系。
我已经有一份显示所有人的清单。 persons
表中的数据库实体通过我自己编写的对象关系映射类转换为person对象,然后列表中会显示人名。
现在我必须扩展列表,不仅要显示人名,还要显示每个人的测量数。
一个列表条目应如下所示:
Person XY
2 Measurements
一种方法是在显示列表之前为每个人单独进行COUNT
查询。但是,这将是一个非常低效和糟糕的解决方案。
另一种方法是在人员表中添加ref_count
列,其中必须包含相关测量的数量。
如果感觉关系数据库对于这样的问题有一个糟糕的结构。我该如何实施清单?
答案 0 :(得分:4)
关系数据库适合这种用途。
在查询人员表的位置,您需要更改查询以包括每个人的测量表中的项目数。像这样的东西;
SELECT PersonName, Count(Measurements.ID) AS NumberOfMeasurements
FROM Persons LEFT JOIN Measurements on Measurements.PersonID = Persons.ID
GROUP BY Persons.ID, Persons.PersonName
这将为您在结果光标中提供两列,人员名称和名为NumberOfMeasurements的度量计数。我的SQL可能不准确,但count,join和group by是重要的位。请注意,您从Persons表返回的所有字段都必须包含在组中。
有关详细信息,请参阅this网站