0

データベースモデルの概念に問題があります。

将来のウェブサイトのカテゴリ用の大きなCSVファイルがあります。

BIGCAT1;SUBCAT1;SUBSUBCAT1;BRAND1
BIGCAT1;SUBCAT1;SUBSUBCAT2;BRAND2
BIGCAT2;SUBCAT2;SUBSUBCAT3;BRAND1
BIGCAT2;SUBCAT2;SUBSUBCAT4;BRAND3

ご覧のとおり、SUBCATxはBIGCATxにのみ属します。SUBSUBCATxは、SUBCATxにのみ属します。ただし、BRANDxは複数のSUBSUBCATに属することができます。

最初に、CSVパーサーを作成します...そして、サブサブサブ...猫のように各ブランドをカウンセリングします。それは機能しますが、それはとても反抗的です。各ブランドをカテゴリのように扱うと、3,600のブランドがあります...重複を削除すると、2,106の一意のブランドしかありません...(+/- 1,500の重複)。

リレーションカテゴリ(id、is_active)/ category_has_brand(category.id、brand.id)/ brand(id、is_active)のデータベースモデルを考える場合:データベース挿入を生成するためにCSVファイルを操作するにはどうすればよいですか?

そしてそれは楽しいので...それは多言語です(BIGCAT、SUBCAT、SUBSUBCATの場合ですが、BRANDの場合はそうではありません)。

このデータベースを手作業で記入すれば...大丈夫です。しかし、私はそれをしたくありません。

誰かアイデアがありますか?PHPとMySQLを使用してファイルを読み取り、データベースに入力します。

この種のCSVを使用して、次の3つのSQLテーブルにエントリを生成する方法はありますか:category(id、is_active)/ category_has_brand(category.id、brand.id)/ brand(id、is_active)?

よろしく

4

2 に答える 2

1

私はあなたが2つの質問をしていると思います:

  • データベースをどのように構成する必要がありますか?
  • CSVファイルをインポートするにはどうすればよいですか?

データベースの設計は非常に単純です。

Category
-----------
CategoryID
ParentCategoryID

これは、「サブカテゴリは単一の親にのみ属する」というステートメントに基づいています。「多対多」であることが判明した場合は、ParentGategoryIDの代わりに結合テーブルを作成する必要があります。

ローカライズされたカテゴリの説明などを保存するために、ローカライズされた文字列テーブルを作成できます。

CategoryDescription
------------
CategoryID
Locale
Description

あなたが書いたものから、カテゴリーとブランドの間には「多対多」があるので、それは次のように機能します:

Brand
-----
BrandID
.... 

CategoryBrand
---------
CategoryID
BrandID

CSVファイルをインポートするための適切な方法はないと思います。擬似コードは次のようになります。

for each line in CSV file
  for each field in line
     if field is category
          add category if not exists
          if category is not top level
              set category Parent to last category
          end if
     end if
     if field is brand
         add brand if not exists
         set brand category to last category
     end if
   next field
 next line
于 2012-12-10T16:31:00.610 に答える
0

Cat / Subcat/SubSubcat用に3つのテーブルを作成します。

CatId | Description | Whatever else fits there, like "active flag".

..。

SubCatId | Description | Whatever else fits there, like "active flag".

..。

SubSubCatId | Description | Whatever else fits there, like "active flag".

次にブランドテーブル:

..。

BrandId | Name | Description | Whatever else fits there, like "Country Iso Code".

次に、3つのテーブルへのforeighキーを使用して「Triplet+Brand」構造を作成します。

CatId|SubcatId|SubSubCatId|BrandId

これで、CSVインポートは次のようになります。

Read a record from CSV
   Split it into Cat/Subcat/SubSubCat/Brand - these will all be descriptions, or names
   Find if the the Category exists, if yes get ID from DB, otherwise create Category table and generate Id by sequence
   Find SubCategory (as above)
   ...
   Find Brand (as above)
   Create record with  CatId+SubcatId+SubSubCatId+BrandId

適切な一意のキーを使用すると、作成中またはアプリケーションのライフサイクルの後半の両方で重複を回避することもできます。

于 2012-12-10T15:10:54.693 に答える