1

製品データベースの設計に関してどの方向に向かうべきか、またそこからデータを保存/取得するための最良の方法についてのアドバイスを探しています。私がぶつかっている障害は、製品が持つ可能性のあるさまざまな (有効な) オプションをどのように最もよく表現するかということです。

基本的な構造は次のとおりです (実際のテーブル定義ではありません)。

PRODUCT_TABLE {
ID(int),
NAME(varchar),
AVAILABLEOPTIONS(varchar),
etc...
}

COLOROPTIONS_TABLE {
ID(int),
COLORNAME(varchare),
etc...
}

BODYOPTIONS_TABLE {
ID,
BODYNAME,
etc...
}

AVAILABLEOPTIONS フィールドに値を格納して、OPTIONS テーブルと、製品が利用可能なテーブル内の ID を指定できるようにする最善の方法は何でしょうか。特定のオプション表)

私は(主にこの素晴らしいサイトで)たくさんの調査を行い、JSON、シリアライズ値、多次元配列などを見てきましたが、最善の方法はわかりません。

最終的に、AVAILABLEOPTIONS 値は、製品ページにオプションを表示するために使用されるか、ユーザーが有効な製品コードを生成するためのフォームを作成するために使用されます。また、管理者が DB に格納するための availableoptions 値を生成できるようにする入力フォームをセットアップしようとしています。

ヒントや考えは大歓迎です!


これがこの更新を配置するのに適切な場所かどうかはわかりませんが、ここに行きます。

さらに調査を行ったところ、単一のフィールドに複数の値を格納することは明確に禁止されているようです。EAV モデルが私のニーズに合っているかどうかもわかりません。しかし、私が持っているデータベース要件を正規化することになると、まだ理解できているかどうかわかりません。私はこれを思いついた:

画像はこちら: http://dev.aqualux.com.au/images/1.png (私はここに新しすぎるため、編集で画像を投稿できません...)

オレンジ色のテーブルの pid/oid は外部キーです。私が把握していない問題は、特定の製品に特定のタイプの複数のオプションがあるか、まったくないということです....

ありがとう

4

2 に答える 2

2

ブリッジのように機能する追加のテーブルを作成することを考えたことはありますか? 最近、Adobe Captivate の結果を MSSQL に保存するデータベースを構築しました。要件の 1 つは、従業員とその部門に基づいて一意の学生を作成することでした。これだけでも、個々の評価の識別子としてブリッジを使用した 3 つのテーブルがありました。

以下に私のブログの抜粋を掲載しました。これは MSSQL から直接取得されることに注意してください。

CREATE TABLE [dbo].[division](
    [id] [INT] IDENTITY(1,1) NOT NULL,
    [divisionName] [VARCHAR](50)

CREATE TABLE [dbo].[employee](
    [id] [INT] IDENTITY(1,1) NOT NULL,
    [personName] [VARCHAR](50)

CREATE TABLE [dbo].[student](
    [id] [INT] IDENTITY(1,1) NOT NULL,
    [employee_id] [INT] NOT NULL,
    [division_id] [INT] NOT NULL

CREATE TABLE [dbo].[core](
    [id] [INT] IDENTITY(1,1) NOT NULL,
    [assessment_id] [INT] NOT NULL,
    [status_id] [INT] NOT NULL,
    [rawScore] [INT] NOT NULL,
    [maxScore] [INT] NOT NULL,
    [minScore] [INT] NOT NULL,
    [accuracy] [INT] NOT NULL,
    [TIME] [datetime] NOT NULL,
    [student_id] [INT] NOT NULL, /****** My unique record ******/
    [DATE] [datetime] NOT NULL

したがって、あなたの場合、 Options テーブルがあります

CREATE TABLE options(
    id INT AUTO_INCREMENT PRIMARY KEY,
    color SMALLINT,
    body SMALLINT
);

AVAILABLEOPTIONS が SMALLINT および外部キーになるように PRODUCT テーブルを変更します ( https://stackoverflow.com/a/1545264と同様) 。

于 2012-06-02T03:15:38.920 に答える
1

私が正しく読んでいれば、あなたはそれをより難しくしています。

製品テーブルに製品を保存します

PRODUCT_TABLE {
    ID(int),
    NAME(varchar),
    etc...
}

次に、オプション テーブルで Id を参照します。ただし、オプションテーブルを1つにする方法を考えます。次の例では、 magento が使用するEAV モデルを使用しています。

OPTIONS_TABLE {
    PRODUCT_ID(int),
    ATTRIBUTE(varchar), // colorname, or bodyname
    VALUE(varchar) // value
}

製品とそのオプションを取得するには、単純な結合を行います

select
    product_table.id,...options_table.attribute, options_table.value
where
   product_table.id=<ID> and options_table.product_id = options_table.id
于 2012-06-02T03:02:40.970 に答える