如何在db中保留产品的类别

时间:2016-08-07 18:46:59

标签: java

我有一些关于如何在db中保留产品的类别信息的问题。例如,我的应用程序的数据源是一个xml,其中包含某些产品的信息:

<product>
 <productId>728737283</productId>
 <productName>chocolate</product>
 <productPrice>78</productPrice>
 <productCategory>Sweets</productCategory>
</product>
<!------other products--------->

我的应用必须解析与每个产品相关的信息并保存在数据库中,在解析完所有产品后,每个产品的信息都会保存到数据库中。有一些约束:xml将使用StAX解析器进行解析,并允许遍历xml一次。问题是在db中我将有2个表:一个用于产品,一个用于产品的相关类别。类别表将包含2列:

CategoryId(PK, AI),CategoryName(UNIQUE)

在Product表中,将存在与产品类别相关的列。我的问题是在这种情况下:与产品表中的类别相关的列将包含类别的显式名称或类别ID?通常,类别表中的CategoryId是Product表中的外键吗?但是在这种情况下,我在db中插入新产品时会遇到问题,我不会知道categoryId,因为xml只包含类别名称。在这种情况下如何更好地进行?我也对如何在这种情况下使用正确的DAO,正确的DTO和正确的数据模型感兴趣。

1 个答案:

答案 0 :(得分:0)

在您的产品表中,您应该参考类别ID而不是类别名称。外键应始终是引用的表的ID。

因此,如果您的产品节点具有类别名称,则首先要检查类别表中是否已有条目。如果是,则从那里获取类别ID。如果不是,则为该类别名称插入新条目。要访问新生成的类别ID,请参阅以下答案:PreparedStatement with Statement.RETURN_GENERATED_KEYS

然后您可以将新记录插入到产品表中。

要避免为每个新产品选择表单类别表,您可以保存一个地图,将类别名称存储为键,将生成的类别ID存储为值。但这只适用于这样的地图不会超过可用内存且类别表在读取XML之前为空的情况。