OKWaveサイト内での分類の正規化の誤りを指摘

このQ&Aのポイント
  • OKWaveサイト内での分類において正規化の誤りがあります。正しい分類方法を検討しています。
  • 分類方法によるデータベースの管理を考えると、8つのテーブルが適切かもしれません。
  • ただし、この分類方法では、質問コードによる絞り込みが難しいかもしれません。
回答を見る
  • ベストアンサー

下記の正規化の誤りを指摘して下さいませ。

"OKWaveサイト内での分類( http://okwave.jp/c206.html )"の様に、 もし大中小のカテゴリーに分類してデータベースを管理するのでしたら、 次の通りの8テーブルで済むかも知れない、と私には思われましたが、 こういう分類ですと、質問コードの指定による絞り込みは難しいでしょうか? 『大分類コード・中分類コード』 『中分類コード・小分類コード』 『大分類コード・大分類名称』 『中分類コード・中分類名称』 『小分類コード・小分類名称』 『質問コード・小分類コード・ユーザーID』 『質問コード・質問内容・回答内容』 『ユーザーID・各ユーザー情報』 (此処では、ユーザー情報の詳細の峻別を省きました。)

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

『大分類コード・大分類名称』 1 ↓ 多 『中分類コード・中分類名称・大分類コード』 1 ↓ 多 『小分類コード・小分類名称・中分類コード』 1 ↓ 多 『質問コード・質問ユーザーID・質問内容・小分類コード』 1 ↓ 多 『質問コード・回答連番・回答ユーザーID・回答内容』 そして, 『ユーザーID・各ユーザー情報』

littlekids
質問者

補足

有り難う御座います。 多重性の度合いを基準に据えますと、 ライセンス管理にも役立ちそうですね。 http://okwave.jp/qa/q7750713.html

関連するQ&A

  • 正規化の仕方がわからず困ってます!助けて下さい。

    授業のレポートで郷土料理のデータベースを作っています。正規化をしてみたのですが、合っているのが分かりません。 本を見ながら自分なりに下のようにやってみました。 (1)非正規形 (材料、道具、行事名は複数あるため、材料ID、道具ID、行事ID以下それぞれ繰り返し) 料理ID・料理分類ID・料理分類名・料理名・料理名注解・調理方法・情報源・食べ方・料理に関する情報源・地域・写真の有無・補足情報・材料ID・材料名・旬の時期・栄養価・材料の入手方法(現在)・材料の入手方法(昭和中期~後期)・材料の入手方法(明治~昭和初期)・道具ID・道具名・行事ID・行事名・行事名注解・行事内容・地域・行事に関する情報源 (2)第一正規形 繰り返しをしている部分を分割しました。 ■料理テーブル 料理ID・料理分類ID・料理分類名・料理名・料理名注解・調理方法・どのような時に食べるか・料理に関する情報源・地域・写真の有無・補足情報 ■材料テーブル 料理ID・材料ID・材料名・旬の時期・栄養価・材料の入手方法(現在)・材料の入手方法(昭和中期~後期)・材料の入手方法(明治~昭和初期) ■道具テーブル 料理ID・道具ID・道具名 ■行事テーブル 料理ID・行事ID・行事名・行事名注解・行事内容・地域・行事に関する情報源 (3)第二正規形 部分キーにのみ従属するフィールドを分離しました。 ■材料_材料関連テーブル 料理ID・材料ID ■材料詳細テーブル 材料ID・材料名・旬の時期・栄養価・材料の入手方法(現在)・材料の入手方法(昭和中期~後期)・材料の入手方法(明治~昭和初期) ■道具_料理関連テーブル 料理ID・道具ID ■道具名テーブル 道具ID・道具名 ■行事_料理関連テーブル 料理ID・行事ID ■行事詳細テーブル 行事ID・行事名・行事名注解・行事内容・地域・行事に関する情報源 (4)第三正規形 主キー以外のフィールドに従属するフィールを分離しました。 ■料理テーブル 料理ID・料理分類ID・料理名ID・調理方法・どのような時に食べるか・情報源・地域・写真の有無・補足情報 ■料理分類テーブル 料理分類ID・料理分類名 ■料理名テーブル *ここで料理名IDを付けました。 料理名ID・料理名・料理名注解 ■行事詳細テーブル 行事ID・行事名ID・行事内容・地域・情報源 ■行事名テーブル 行事名ID・行事名・行事名注解 *ここで行事名IDを付けました。 これで合っているのでしょか??全く自信が無いです。 どう考えても料理テーブルがごちゃごちゃしています。 どのように整理したらよいか教えてください。よろしくお願いします。

  • データベースと正規化とINSERT文について

    ただいま以下の一つのテーブルを正規化しようとしています。 テーブル:英単語 フィールド:単語、意味1、意味2、意味3、品詞、分類1、分類2、分類3、例文、難易度、ID(主キー・オートインクリメント) これを以下のように分けました。(分類とは単語の分類です。例えば year なら意味は 年 で分類は 時間 とか 単位 とか属性を入れたいのです。) ****** テーブル:英単語 フィールド:単語、意味1、意味2、意味3、分類ID、分類ID、分類ID、例文ID、難易度、ID(主キー・オートインクリメント) テーブル:分類 フィールド:分類名、ID(オートインクリメント 主キー) テーブル:品詞 フィールド:品詞名、ID(オートインクリメント 主キー) テーブル:例文 フィールド:例文、ID(オートインクリメント 主キー) ****** (1)これで正規化できているでしょうか? もしできていないなら、どうすればよいでしょうか? (2)また、仮にこのままデータベースを作るとすると、INSERTの時に英単語テーブルの分類IDに、分類テーブルのIDをひもづけるにはどうしたら良いのでしょうか? INSERT INTO 分類 (分類名) VALUES("時間") のあと、オートインクリメントされたIDを取り出して、英単語テーブルに入れるにはどうしたらいいでしょうか。

    • ベストアンサー
    • MySQL
  • Accessのコンボボックスを使ったデータ入力

    誤って質問締め切ってしまいましたので、再度内容を修正の上質問させていただきます。 Accessにおいて、コンボボックスを使ったデータ入力で不具合が生じました。 以下のデーターベースを使用します。 ①テーブル:T_材料   フィールド:材料コード、材料分類コード、名称(材料名) ②テーブル:T_材料分類  フィールド:材料分類コード、分類名 ③テーブル:T_レシピ内容  フィールド:ID、料理コード、材料コード、分量 ④テーブル:T_料理  フィールド:料理コード、名称(料理名) ⑤クエリ:Q_レシピ入力用 SELECT T_レシピ内容.ID, T_レシピ内容.料理コード, T_材料.材料分類コード, T_レシピ内容.材料コード, T_材料.名称, T_レシピ内容.分量 FROM T_材料 INNER JOIN T_レシピ内容 ON T_材料.[材料コード] = T_レシピ内容.[材料コード] ORDER BY T_レシピ内容.料理コード, T_レシピ内容.分量; メインフォームにT_料理にして、レシピを入力するためにQ_レシピ入力用のサブフォームを作成しました。 材料分類の”材料分類名”をコンボボックスで選択後、該当する材料の”名称”をコンボボックスで選択し”分量”を入力する形式にしたいです。 ”材料分類”のコンボボックスは、T_材料分類、材料分類コードをコントロールソースで設定、材料名を表示しています。[更新後処理]は以下の通りにしました。 Me!名称.Requery ”名称”のコンボボックスは、T_材料をコントロールソースして、以下の値集合ソースにしました。 SELECT T_材料.名称, T_材料.材料分類コード FROM T_材料 WHERE (((T_材料.材料分類コード)=[Forms]![F_レシピ登録M]![F_レシピ登録S]![材料分類])); 以上の設定でコンボボックスは成功しましたが、入力を行うたびに、T_材料内に入力した食品のデータが追加される現象が出ました。 長文で恐縮ですが、 何が原因だったのか、対策方法をご教授お願いします。

  • ジャンルの分類での方法について

    現在ジャンル大ID、ジャンル中ID、ジャンル小IDに分けて情報をデータベースに格納しています。それをユーザーに選んでもらうようにするのですが、(ちょうどOKwebのカテゴリー分けのように)OKウェイブのようにコンボボックスを3つにしてそこから大分類、中分類、小分類というようなぐわい選ぶ方式はどのようにして作ればいいのでしょうか。なるべく一番複雑な部分なので簡略にプログラムも作りたいと思っています。どうかサンプル的なソースなどを教えて頂けないでしょうか?(汗) どうかお願いします。(汗)

    • 締切済み
    • CGI
  • Accessのコンボボックス 絞込みで登録データは名称に

    アクセスで複数のコンボボックスを使用し絞込み登録を行おうと思っています。 過去の質問等を見てやってみたのですが、 それぞれのコンボボックスの項目テーブルにID、名称があり、その関連付けで登録はされるのですが、実際登録されるデータはIDになってしまいます。 IDで比較してそのIDのものだけを次のコンボボックスに表示するのはいいのですが、実際にフォーム上で選択したものは名称の方がデータベースに登録されるにはどうしたらいいでしょうか?

  • 正規化したテーブルのinsertの方法

    データベースを勉強しているものです. 勉強の題材としてWEBアプリで予約システムみたいなものを作ってみているのですが,正規化したテーブルに対してデータを追加する際にどのようにすればいいのか悩んでいます. 予約tableと予約詳細tableを作り,予約IDで関係付けようと思っているのですが, 予約が入った際に予約tableのデータをinsertしてから予約詳細tableにinsertをすると思われます.このとき,予約詳細tableにデータをinsertする際に予約IDをどのように入れたらいいでしょうか. 1.トランザクション開始 2.予約IDを払い出し(WebAP上の変数で保持する) 3.予約tableに予約IDと登録するデータをinsert 4.予約詳細tableに予約IDと登録するデータをinsert 5.コミット これをやってしまうと予約IDが別のセッションで同じIDになってしまう恐れがあります. どうしたらいいでしょうか. 予約IDテーブルでも作って,払い出した際に,他のセッションに奪われないように作るなどの方法をとればいいのでしょうか.

  • PHP コードイグナイターのDBライブラリについて

    テーブル名 image id | user_id| category | view 1 | 1 | 1 | 0 2 | 1 | 1 | 1 3 | 2 | 1 | 0 4 | 2 | 1 | 1 テーブル名 favorite(お気に入り) id | user_id | favorite_id 1 3 1 user_id が 3 の人が category を 1と検索すると、category が 1 且つ view が 0 と、category が 1 且つ user_id が 1 である 1, 2, 4 の id を抽出したいのですがコードイグナイターのDBライブラリでのやり方がわかりません。 (category == 1 && view == 1) || (category == 1 && user_id == 1) というような表現をしたいのですがお詳しい方、お教えください。 よろしくお願いします。

    • 締切済み
    • PHP
  • このSQL文を教えてください。

    Windows2000(SP3) SQLServer2000(SP3) で開発しています。 テーブルA 項目No,大分類コード,中分類コード,詳細コード,日付,内容 テーブルB 大分類コード,中分類コード,詳細コード,新_詳細コード,内容 TableA,Bでは大分類コード,中分類コード,詳細コードがリンクする このような状況で、TableA,Bを下記のようにjoinして、  TableA.大分類コード,   TableA.中分類コード,  TableB.新_詳細コード, が重複するデータを取得する場合のSQL文を教えてください。 (join) SELECT  TableA.*,  TableB.* FROM  TableA LEFT OUTER JOIN  TableB ON  TableA.大分類コード=TableB.大分類コード  AND  TableA.中分類コード=TableB.中分類コード  AND  TableA.詳細コード=TableB.詳細コード よろしくお願いします。

  • 抽出結果を条件に、抽出

    アクセス超初心者です。 商品コードを基に、いろいろ情報を検索し、閲覧できるフォームを作りたいと思っています。 (↓説明が長いですが、お願いします↓) エクセルで 【カテゴリシート】商品コード/商品名/生産工場/カテゴリ1/カテゴリ2 というシート(4500件くらい)(商品コード重複あり)と、 【ランキング2007シート】人気ランキング順位/商品コード/商品名/ポイント/調査日 というシート(4000件くらい)(商品コード重複なし)があります。 ※カテゴリ1 ・・・(大分類カテゴリ)/カテゴリ2 ・・・(大分類の中の詳細分類) ※カテゴリ1は1つの商品に1種ではなく、複数の場合があります。 必然的にその分カテゴリ2も複数になります。 例:キャラクターペン カテゴリ1=玩具―カテゴリ2対象小学生以上             =文具―カテゴリ2筆記用具             =文具―カテゴリ2消耗品 ※ランキングは廃盤の商品コードもあり、そこ商品に関しては順位とポイントが空欄です。 ここから、ある商品はどのカテゴリに属しているか、また同カテゴリに含まれる商品のみでの人気ランキングを出すように、と仕事で依頼されます。 いつもは、カテゴリシートでオートフィルタをかけ、必要商品コードを抽出し、作業シートを使ってランキングシートから関数で各コードのランキング/ポイントを拾い出し、昇順で並び替えては提出していました。 しかし、このデータは増える予定が無く、ランキングも年に1回更新されるだけなので、みんなが簡単に検索できるようにしたいと思います。 出来ていること フォームでコードを入力すると、その商品名が表示され、カテゴリ1がリストボックスに表示され、そのリストのいずれかをクリックすると、もうひとつのリストボックスにカテゴリ2が表示され、そのいずれかをクリックすると詳細に必要情報が表示される。 したいこと ランキング作成。 リストボックス、カテゴリ2をクリックすると詳細へ表示される、複数のコード。これを検索条件にしてランキングを抽出。 T_商品名 ID(主キー) 商品コード 商品名 生産工場 テーブル2ID※T_テーブル2のNo.とリレーション T_カテゴリ カテゴリ1 ・・・(大分類カテゴリ) カテゴリ2 ・・・(大分類の中の詳細分類) ID(主キー)※T_テーブル1のテーブル2IDとリレーション T_ランキング2007 ランキング順位 商品コード 商品名 ポイント ID(主キー)(リレーション無し) F_総合検索  ヘッダー部分   (1)コード入力欄(テキストボックス非連結)   (2)商品名(テキストボックス非連結)   (3)カテゴリ1(リストボックス)   (4)カテゴリ2(リストボックス)   (5)ボタン  詳細部分    商品コード/商品名/生産工場/カテゴリ1/カテゴリ2 しくみ  I(1)にコードを入力する   →II(2)に商品名が表示/(同時に)(3)カテゴリ1が表示   →III(3)のどれかクリックすると、そこに属する(4)が表示   →IV(4)のクリックされたカテゴリを条件に詳細が表示    ※(5)ボタンは詳細の表示と同じものを別途クエリを作成し、開くようにしています。(今はまだランキングが出来ていないので、クエリをコピーしエクセルでランキングを作っています。) ランキングは毎年あるので過去のもものもあります。 出来ればボタンで『2007』『2006』・・・と作って、クリックすると、現在フォームヘッダーで指定されている条件を基に、クリックされたボタンの年度内でのランキングを作成したいです。 結果は順位の昇順になるようにしたいです。 また、詳細への表示を今はカテゴリ内のコード他が表示されていますが、それをラジオボタン等のチェックでランキングに切り替えたり、出来るでしょうか? VBA、マクロ、SQLは全くわかりません。 そんな私でもどうにかできないものでしょうか。。 お願いします。

  • SQLで同じフィールドを2つ取りだしたい

    以下のテーブルからCSVを出力する際、 ID | 名称 | コード1 | コード2 1 |  A  |  111  |  444 2 |  B  |  222  |  555 3 |  C  |  333  |  666 「ID/名称/コード1コード2」のように取りだす場合のSQL文は SELECT ID, 名称, コード1 || コード1 FROM テーブル名 となると思いますがこれを、「ID/名称コード1/名称コード2」のように同じフィールドを同じ行に2回登場させたい場合はどうすれば宜しいでしょうか。 SELECT ID, 名称 || コード1, 名称 || コード2 FROM テーブル名 とした場合にはエラーになってしまいます。 宜しくお願い致します。