我有一个Java中的DatabaseObject,它可以动态地从数据库中检索信息并将其存储在键值对中(它只是一个扩展的LinkedHashMap)。
我的DatabaseObject可以根据提供的与数据库表匹配的列,在表中加载,删除,更新和插入值。
我的数据库中有一个“公司”表和一个“类别”表,每个公司可以有多个类别。我还有一个“CompanyCategories”表,其中记录了每个公司的类别。这些是表格的样子:
Company
CompanyID, Name
Category
CategoryID, Name
CompanyCategories
CompanyCategoryID, CompanyID, CategoryID
在SQL中,我通常会使用group concatentation应用一个简单的连接来获得如下所示的行:
CompanyID, Name, Categories
1, Dummy Company, Photographer;Videographer
我试图找出如何最好地将此信息提取到Java中的Company对象中,该对象包含对另一个Category对象的引用。在我看来,我没有提取CategoryID或CompanyCategoryID,但如果我从公司删除一个类别,我将需要这些,因为它在一个单独的表中。
我的问题是,连续执行多个SQL语句会更好吗?换句话说:
SELECT * FROM company WHERE CompanyID=1; SELECT * FROM category WHERE CompanyID=1;
然后在Java中将它们组合成一个带有Category对象列表的Company对象,或者我应该让数据库进行加入并在我的视图中包含大量额外信息?
SELECT * from company_view
CompanyID, Name, CompanyCategoryIDs, CategoryIDs, Categories
1, Dummy Company, 4;6, 2;3, Photographer;Videographer
我对后者的问题在于,保持直线会很快成为问题,而我担心前者的表现。对于一家公司而言,这不会是一件大事,但任何时候都可以装载2000-4000家公司。
我非常喜欢我正在处理数据库表的面向对象方法,但我不确定如何最好地处理视图。
哪个更有效率?