2016-08-07 15 views
0

dbの製品のカテゴリ情報を保持する方法に関するいくつかの質問があります。例えば、私のアプリのデータソースは、一部の製品についての情報を含むXMLです:製品のカテゴリをdbで保持する方法

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

すべての製品が、その後の情報を解析された後に私のアプリは、各製品に関連した情報を解析し、DBに保存する必要があります各製品のdbに保存されます。いくつかの制約があります.xmlはStAXパーサーを使用して解析され、XMLを1回トラバースすることが許可されています。問題は、dbには2つのテーブルがあります.1つは製品用で、もう1つは関連する製品カテゴリです。カテゴリテーブルには、2つの列があります。

CategoryId(PK, AI),CategoryName(UNIQUE) 

また、製品表には製品のカテゴリに関連する列があります。私の質問は、この場合です:製品テーブルのカテゴリに関連する列には、カテゴリまたはカテゴリIDの明示的な名前が含まれますか? CategoryテーブルのCategoryIdがProductテーブルの外部キーになるのは普通でしょうか?しかし、この場合、dbに新しい製品を挿入する際に問題が発生します.xmlにはカテゴリ名だけが含まれているため、カテゴリIDはわかりません。この場合、どのように進めるのが良いですか?この場合に使用される正しいDAO、適切なDTO、適切なデータモデルをどのように見えるかについても興味があります。

答えて

0

商品表には、カテゴリ名ではなくカテゴリIDを参照する必要があります。外部キーは常に参照されるテーブルのIDである必要があります。

カテゴリ名を持つ製品ノードがある場合は、まずカテゴリテーブルにエントリがあるかどうかを確認する必要があります。はいの場合は、そこからカテゴリIDを取得します。そうでない場合は、そのカテゴリ名の新しいエントリを挿入します。新しく生成されたカテゴリIDにアクセスするには、この回答を参照してください。PreparedStatement with Statement.RETURN_GENERATED_KEYS

次に、新しいレコードを商品テーブルに挿入することができます。

各新製品の選択フォームカテゴリテーブルを避けるには、カテゴリ名をキーとして保存し、生成されたカテゴリIDを値として保存することができます。しかし、これは、そのようなマップが利用可能なメモリを超えない場合、およびカテゴリテーブルがXMLを読み取る前に空である場合にのみ機能します。

関連する問題