学習メモ【Access】

この本をざっくりメモ

https://www.amazon.co.jp/Access%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E3%83%84%E3%83%9C%E3%81%A8%E3%82%B3%E3%83%84%E3%81%8C%E3%82%BC%E3%83%83%E3%82%BF%E3%82%A4%E3%81%AB%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%AC-2019-2016%E5%AF%BE%E5%BF%9C-%E7%AB%8B%E5%B1%B1-%E7%A7%80%E5%88%A9/dp/4798057258


## オブジェクトざっくり
### テーブル
命名例
- T_テーブル名
- MT_マスタテーブル名
### クエリ
命名例
- Q_クエリ名
### レポート
命名例
- R_レポート名

## テーブル
- フィールド追加時に「集計フィールド」から計算式を作るダイアログが開く。パワクと似たような画面
- 命名
    - T_テーブル名
        - 随時更新・追加されるもの
    - MT_テーブル名
        - マスターテーブル。商品情報など更新があまりないもの


### リレーションシップ
3つのポイント

1. 参照整合性：対応していないデータの入力を防ぐ仕組み
    1. 参照される側にある値しか入力できない
    1. チェックを入れると連鎖更新がアクティブになる
        1. フィールドの連鎖更新
        1. レコードの連鎖更新
        1. レコードの連鎖削除
            1. 参照されている側データを削除すると参照している側のレコードも削除される
1. リレーションシップの種類
    1. 1対1
    1. 1対多
        1. 結合フィールドは主キーが定石
    1. 多対多
        1. テーブルA-Bが1対多、テーブルC-Bが1対多なら間接的にA-Cが多対多になる
1. 結合の種類
    1. 内部結合
        1. 両方のテーブルの結合フィールドがないと取り出せない
    1. 左外部結合
        1. よくわからん
    1. 右外部結合
        1. よくわからん

- テーブルデザインビュー
    - フィールドのデータ型
        - ルックアップウイザード

からリレーションシップを組むと参照している側のレコード入力セルにプルダウンメニューが追加される。
## クエリ
### クエリデザイン

- 抽出条件に>=[プロンプト文字列]と書くとInputBoxからの検索条件入力可能になる。
- 演算フィールドは[新しいフィールド名]:[既存のフィールド名]*1.08とか


### クエリ種類
- 選択
    - ざっくり言うとフィルタ機能
    - 抽出条件と表示フィールド、演算フィールドを列挙するだけ 
- 更新
    - 元には戻せない。
    - 事前に抽出結果を確認するのはリボン＞クエリデザイン＞表示
- 削除
    - 元には戻せない。
    - 事前に抽出結果を確認するのはリボン＞クエリデザイン＞表示
    - 削除したものはIDごと全レコードが#Deleted#となり、そのID連番は欠番になる。

他にも
- テーブルの作成
- 追加
- クロス集計
なんてのもあるみたい



### テーブルを結合した選択クエリ上での演算クエリの式
式のカテゴリから直接押してもできるが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281933/2fe405b1-836c-2716-eb4a-991b4c468ce2.png)

[テーブル名].[フィールド名]と入力しようとするとインテリセンスが使えるのと完成後に参照テーブル名まで見ることができて好き。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281933/8aa55359-4555-a66a-a464-f03bf7be4881.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281933/792f4e04-f2b8-b030-1477-48791a65094d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281933/b3637865-2061-f08d-3117-2bab68a53b40.png)
インテリセンスは途中まで入力してからでもいいし、最初から`Ctrl`+`Space`でも出せる。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281933/1b42d1dd-5539-cf71-e6ce-134276325b45.png)


## レポート
ざっくり2種類ある
- テーブルそのままレポート
- 選択クエリの結果をレポート

### ロゴ
jpgとか仕込める。
OLEサイズはストレッチにしておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281933/37aecd96-7121-8743-b615-4990ff950f5c.png)

### 伝票ウイザード
こんな帳票テンプレートもある。すごい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281933/54e7431d-bf86-9c7f-4bb8-266154798e64.png)

### はがきウイザード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281933/884d5764-81ea-0fb3-0ac9-b0072b91a47a.png)


## 正規化
これ地味に知らなかったので

### 第1正規化： 繰り返される列がない
第1の中にも2段階あるっぽい

1. 商品名だ価格だ数量だと同じ種類の列が複数ないこと<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281933/6f86e24b-ebcf-994b-7a8e-d5dd6121f3c7.png)
		


1. 顧客情報などはマスターテーブルに切り出して重複をなくす<br>※結合用にマスタ側のIDを呼び出す側のテーブルに残す<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281933/7bc29744-5eba-ac12-0f68-fa0321c36911.png)


### 第2正規化： 主キーの値が決まると他の列の値が必ず決まる
第1の多段バージョン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281933/31aa632a-bac0-0f8a-8e3b-a74ea0a28d82.png)

まとめるとこうなる
とにかく列も行も重複のないテーブルに因数分解していく作業という印象
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281933/d6d4f9ad-9863-62de-78bc-2e1db3b3796f.png)


### 第3正規化： 主キー以外の列の値によって、他の列の値が決まることがない
また多段バージョン？

この例だと顧客情報も切り出せるよね、という話
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281933/f022ac2a-0ba3-8cd5-44d5-9dfaa7875e0b.png)

### 正規化すればいいというものでもないらしい
- 正規化すると途中で値引きで単価が変わるなどに対して臨機応変さがなくなるというデメリットがある
- 単価×個数で小計は計算すれば良いので列は不要、とすると毎回計算しなきゃなので面倒→計算列は増やしておこうか

など、単に冗長さを取り除くだけでなく、追加や変などに対応できる柔軟さやパフォーマンスなどを鑑みて、システムに求められるよう県から両社のバランスが取れるよう、着地点を見出すことが重要とのこと。

## データベースの共有
### 複数ユーザーが同じレコードを同時に編集できないようにロックする

チェックが「編集済みレコード」ならそのレコードのみ
「すべてのレコード」だとテーブル全体をロック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281933/71e2fd20-4b59-d589-3013-75bf096726f4.png)