何度も私たちは、私は同じように同じデータベース内の他の問題を解決することができ、これとカテゴリデザインカテゴリツリーのDBデザインはどれぐらい効率的ですか?
car(id, tag, year, make_category_id, model_category_id)
category (id, name, description, parent_category_id) //this works like a tree
でこれを解決しようとしている
car(id, tag, year, make_id, model_id)
make(id, name)
model(id, name, make_id)
このシナリオを見つけた正規化する場合:
contact(id, nickname, phone_id, email_id, address_id, person_id, company_id)
email(id, email_value, category_id) //category represent the Type(Personal, Work)
phone(id, phone_value, category_id) //category represent the Type(Cell, Home, Work,..)
address(id, address_value, category_id)//category represent the type(Billing, Physical)
したがって、すべてのカテゴリを同じテーブルに配置すると、ツリー内でカテゴリを無期限に作成できるようになりますが、私の質問i s:このアプローチはどれぐらい効率的ですか? おかげ
これは、アクセスDBMのためではありませんが、私は、フォーム上のコンボボックスを埋めるためにアクセスしてSQLのクイックテストを実行します。で
SELECT c.name AS Category, category.name AS Subcategory, category.id
FROM category AS c INNER JOIN category ON c.id=category.parentcategory
WHERE c.[name]='Vehicle';//CB populated with subcategories from Vehicle parent category
とコンボボックスモデル:私はメイクコンボボックス人口車用のフォームで
SELECT c.name AS Category, category.name AS Subcategory, category.id
FROM category AS c INNER JOIN category ON c.id=category.parentcategory
WHERE c.[name]='Email';//CB populated with subcategories from Email parent category
:とのメールの連絡先I人口Eメールタイプコンボボックスの形で
SELECT c.name, c.id
FROM category AS c
WHERE (((c.parentcategory)=[Forms]![Car]![Combo38]));//CB populated with subcategories from Make selected parent category
あなたのデザインが特に効率的で、そして一部のデータベースでは非常に難しいことではありません。親の代わりに、カテゴリの完全パスを含めます。それははるかに効率的です。 –
@ GordonLinoff:私の経験では、(このモデルに必要とされる)再帰的なクエリはかなり効率的です。完全パスを格納するのは、実際には**階層を更新する必要がある場合は非常に非効率的です**。現代のSQL(http://modern-sql.com/slides)をサポートするDBMS _not_は例外であり、今日のルールではありません –
私はモデルを理解していますが、どの問題が解決しているのかはっきりしていません... ...? –