4

アップデート #1を追加。質問の最後にチェックを入れてください。ありがとう。

友達、

カテゴリとカテゴリに関連付けられたフィルタを使用して製品リストを設計しています。現在、静的カテゴリを持つデータベース スキーマがあります。それらを動的にする必要があります。動的にするための適切なスキーマを見つけることができなかったので、フォームにスキーマをハードコーディングしました。私の詳細な作業は次のとおりです。


MySQL のもの

メインの製品テーブルはすべての製品のインデックスであり、製品の各カテゴリには個別のフィールドがあります。たとえば、自転車とテレビを考えてみましょう。これら 2 つの製品は、製品テーブルにある共通のフィールドを共有しています。

  1. 製品番号
  2. 名前
  3. 価格
  4. 写真
  5. カテゴリー

カテゴリに関しては、追加のフィールドがいくつかあります。したがって、bike は自動車のカテゴリに属し、次のフィールドがあります。

  1. マイレージ
  2. エンジン型式
  3. シーター
  4. 燃料

TV 製品の場合は、独自のカテゴリである TV に分類され、フィールドは次のとおりです。

  1. 寸法
  2. ビデオの種類
  3. 反応時間
  4. 入力オプション

現在、私のデータベース構造は次のとおりです。

DESC `Products`;
+------------+--------------+------+-----+---------+----------------+
|      FIELD |         TYPE | NULL | KEY | DEFAULT |          EXTRA |
+------------+--------------+------+-----+---------+----------------+
| Product ID |      int(11) |   NO | PRI |  (null) | auto_increment |
|       Name | varchar(255) |  YES |     |  (null) |                |
|      Price |      int(11) |  YES |     |  (null) |                |
|      Photo | varchar(255) |  YES |     |  (null) |                |
|   Category |      int(11) |  YES |     |  (null) |                |
+------------+--------------+------+-----+---------+----------------+

カテゴリ フィールドは次のとおりです。

DESC `television`;
+---------------+--------------+------+-----+---------+-------+
|         FIELD |         TYPE | NULL | KEY | DEFAULT | EXTRA |
+---------------+--------------+------+-----+---------+-------+
|    Product ID |      int(11) |  YES |     |  (null) |       |
|    Dimensions |  varchar(25) |  YES |     |  (null) |       |
|    Video Type | varchar(255) |  YES |     |  (null) |       |
| Response Time |  varchar(25) |  YES |     |  (null) |       |
| Input Options |         text |  YES |     |  (null) |       |
+---------------+--------------+------+-----+---------+-------+

DESC `automobiles`;
+-------------+--------------+------+-----+---------+-------+
|       FIELD |         TYPE | NULL | KEY | DEFAULT | EXTRA |
+-------------+--------------+------+-----+---------+-------+
|  Product ID |      int(11) |  YES |     |  (null) |       |
|     Mileage |      int(11) |  YES |     |  (null) |       |
| Engine Type | varchar(255) |  YES |     |  (null) |       |
|      Seater |      int(11) |  YES |     |  (null) |       |
|        Fuel | varchar(255) |  YES |     |  (null) |       |
+-------------+--------------+------+-----+---------+-------+

データベースにデータを挿入するときは、次の方法を使用します。

INSERT INTO `television`
    (`Product ID`, `Dimensions`, `Video Type`, `Response Time`, `Input Options`)
VALUES
    (1, 100, 'hd', 2, 'hd');
INSERT INTO `automobiles`
    (`Product ID`, `Mileage`, `Engine Type`, `Seater`, `Fuel`)
VALUES
    (1, 100, 'hd', 2, 'hd');

HTML/PHP

次のような単純なフォームを使用するカテゴリの静的セットには問題ないようです。

テレビ

<form action="new.php">
    <ul>
        <li>
            <label>Name</label>
            <input type="text" />
        </li>
        <li>
            <label>Price</label>
            <input type="text" />
        </li>
        <li>
            <label>Photo</label>
            <input type="text" />
        </li>
        <li>
            <label>Category</label>
            <input type="text" />
        </li>
        <li>
            <label>Dimensions</label>
            <input type="text" />
        </li>
        <li>
            <label>Video Type</label>
            <input type="text" />
        </li>
        <li>
            <label>Response Time</label>
            <input type="text" />
        </li>
        <li>
            <label>Input Options</label>
            <input type="text" />
        </li>
        <li>
            <input type="submit" />
        </li>
    </ul>
</form>

自動車

<form action="new.php">
    <ul>
        <li>
            <label>Name</label>
            <input type="text" />
        </li>
        <li>
            <label>Price</label>
            <input type="text" />
        </li>
        <li>
            <label>Photo</label>
            <input type="text" />
        </li>
        <li>
            <label>Category</label>
            <input type="text" />
        </li>
        <li>
            <label>Mileage</label>
            <input type="text" />
        </li>
        <li>
            <label>Engine Type</label>
            <input type="text" />
        </li>
        <li>
            <label>Seater</label>
            <input type="text" />
        </li>
        <li>
            <label>Fuel</label>
            <input type="text" />
        </li>
        <li>
            <input type="submit" />
        </li>
    </ul>
</form>

私の問題

これで、フォーム データは単純になりました。テーブルの構造を使用してデータベースに挿入するだけです。私が今直面している問題は、カテゴリが動的であると想定されている場合はどうなるかということです。データベース スキーマを動的に変更するにはどうすればよいですか?

では、動的に対する私の見解を定義させてください。管理者が新しいカテゴリを追加したい場合、私が現在行っていることは、カテゴリの新しいフォームを作成し、phpMyAdmin に移動して新しいテーブルを追加すると、同じ挿入クエリと新しいファイルが追加されます。PHP のみを使用して、管理パネルからこれを実行したいと考えています。これは実現可能ですか?どのようなスキーマ変更を行う必要がありますか?


更新 #1

初めに。ありがとう!今、私は自分のテーブルをこのように即興で作りました。今、私は4つのテーブルを持っています。

  1. 製品- すべての製品のインデックス。
  2. カテゴリー-名入れ用? カテゴリ名とその親が含まれます。
  3. 属性- カテゴリの属性名が含まれます。
  4. Association - Product IDAttribute ID、およびその値の関連付け。

さて、私は取り組んでいます。これは有望に見えます。答えを待つと同時に、私の作品も更新します!:) ありがとう。

4

2 に答える 2

1

カテゴリの種類ごとに別のテーブルを用意する代わりに、フィルター用のテーブルを用意する必要があります。フィルタには名前/値があり、カテゴリのサブセットになります。ここでは、簡単にするために、製品は 1 つのカテゴリにのみ属することができるとしましょう。

Product (proID, fields, catID)
Categories (catID, catName)
Filters (filID, catID, filterName)
ProductFilters (proID, filID)

カテゴリにはautomobileとを入力できTVます。どのカテゴリを選択しても、製品はそのうちの 1 つにしか対応できないため、できるだけ一般的なものにする必要があります。次に、事前に設定できるカテゴリのフィルターがあります ( mileagefuelなど)。

カテゴリに適切なフィルタを適用することは、スキーマではなくアプリケーション側で実施する必要があります。

最後に、Products と Filters の間のリンクにより、個々のフィルター名 (mileage値、値、値など) の値を設定できます。対応するすべてのフィルター名が考慮されていること、および間違った catID を持つエントリが含まれていることを確認するためにfuelチェックできます。無視されます。catIDProductFilters

Categories完全に除外して、フィルター、製品、およびそれらのマッピングのみを含めることもできますが、その場合、製品の可能なフィルターに対する追加のチェックは行われません。

于 2013-06-11T04:23:48.317 に答える