プロが教える店舗&オフィスのセキュリティ対策術

accessクエリで下記のような表を作りたいのですが、データベースの作り方の基本がわからないので質問させて下さい。

   A社 B社 C社
面積 広い 普通 狭い
環境 良い 良い 悪い
人員 多い 少ない 多い
開発力 なし なし あり

このような表をクエリで出力させたいと思っています。左の項目はどんどん増えていきます。
このような場合、データベース(テーブル)はどのようにつくるのが基本なのでしょうか。下記のようにすればいいものでしょうか。

   区分 内容
A社 面積 広い
B社 面積 普通
C社 面積 狭い
A社 環境 良い
B社 環境 良い
C社 環境 悪い

#このようにした場合、目的の表示をする場合のクエリなどは、どのようにしたらいいものでしょうか。

A 回答 (1件)

クエリの作り方としては、クロス集計クエリになります。


ただし、普通の作り方としては、「A社」「B社」・・・と「面積」「環境」の軸は入れ替わります。(できなくはないですが・・・)
直接、クエリを作りたければ、例にあげられたテーブルでかまいません。
ただ、正規化(これをきっちりと説明するのは、大変なので、別途探してみてください。)をするなら、少し構造が変わってきます。
まず、会社テーブルをつくり以下のようにします。(主キーは会社ID)

会社ID 社名
1    A社
2    B社
3    C社

あと区分と内容の対比ですがこれを関連づけるとなると区分テーブル、内容テーブルが必要になります。

内容テーブル(主キーは内容ID。内容テーブルは別の振り方もあります。)
内容ID 区分 内容
1    1  広い
2    1  普通
3    1  狭い
4    2  良い
5    2  悪い

区分テーブル(主キーは区分ID)
区分ID 区分
1    面積
2    環境
3    人員

4つ目のテーブルとして、3つのテーブルの関連を結びつけるテーブルを作ります。(これも作り方は、いろいろありますが、1例を挙げます。)

関連テーブル(主キーは会社IDと内容IDの複合主キー)
会社ID 内容ID
1    1
1    4
2    2
2    4
3    3
3    5

ここで会社テーブルの会社IDと関連テーブルの会社ID、区分テーブルの区分IDと内容テーブルの区分ID、内容テーブルの内容IDと関連テーブルの内容IDにリレーションを張ります。

これで正規化されたデータベースができました。利点は、会社・区分・内容が増えたり変更などがあった場合、データベースの変更が一箇所で済み、混乱しないことです。逆に欠点としては、データの検索に時間がかかることです。
あとは、例にあげられているテーブルのように表示するクエリを作るだけです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す