skillup

技術ブログ

Database

論理設計のアンチパターン

投稿日:

今回からは論理設計のアンチパターンについて。

やってはいけない設計のパターンですね。これはまわりがやっていると気づかずにやっている可能性があるのでしっかりメモしておきたいです。

非スカラ系の値

これはテーブルに配列の値が入っているものです。

例としては下記のようなテーブルです。

社員ID 社員名
001 山田 太郎
次郎
002 鈴木 太郎
次郎
三郎

こういったパターンは見たことがないですね。ただテーブルの中にカンマやアンスコ区切りで複数の値を入れているのをみたことはあるので概念としては同じかもしれないです。しかもSQLのデータ構造として配列型というものがあるらしいですね・・・使ったことはありませんが。

原則としては「配列型は使わない。第一正規系を使う」というのが正しい考え方のようです。

また人名のようなものはなるべ分割していれたほうがあとあと楽ですね。分割→結合は楽ですが、結合→分割は大変だからです。情報は意味を壊さない程度に分割して保存するようにしましょう。

ダブルミーニング

ID 列1
001 山田 170
002 鈴木 50

ダブルミーニングとは一つの列で別の意味をもたせることです。001番は列1は身長で、002は体重みたいな。ここまで露骨なものはさすがに見たことはないのですが、大局的に意味が近いものはやろうかなとおもったことはありましたね・・・(汗)

プログラマが変数を使うようにテーブルの列を変数とみなすことでこのようなことが生まれるケースがあるようです。

列は変数ではなく、一度意味を決めたら変更不可にしましょう。

単一参照テーブル

コードタイプ コード コード名
com_cd C001 A商事
com_cd C002 B商事
pref_cd P001 北海道

単一参照テーブルというのはテーブル数を少なくするという意図で複数のマスタを同一テーブルで管理するという手法のようです。

オブジェクト指向の多態性の考え方をテーブルに持ち込んだもののようですね。

メリットとデメリットをまとめると以下のようになります。

メリット

  • マスタテーブルの数がへるため、ER図やスキーマがシンプル
  • コード検索のSQLを共通化できる

デメリット

  • データの長さを大きめにとっておく必要がある
  • レコード数が大きくなりパフォーマンスに悪影響がでる
  • コードのSQLでコートタイプやコード値を間違えてもエラーにならず、バグに気づきにくい

基本的にはしないようがいいようですね。テーブルに多態性を持ち込んではいけないようです。

 

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

MariaDBインストール

CentOS7からはyumでmysqlをインストールするとMariaDBがディフォルトになるようです。 せっかくなので、これを機にMariaDBを使ってみました。といってもMySQLとほとんど一緒でし …

no image

CASE式のすすめ その3

本日もCASE式です。 下記のようなテーブル(studentclub)があるとします。 std_id | club_id | club_name | main_club_flg —&#82 …

no image

JSON型の検索

複数のタグなどを入れる場合、JSON型のカラムやデータなどを入れることがあるかと思いますが、ここから検索できるということが昨日わかりましたので、メモしておきます。 SQLServerで発見しましたが、 …

no image

SQLで数列を扱う

今回はSQLで数列を扱ってみましょう。 例えば下記のような0から9までの数字が書かれている数列があったとして、 これにより連番を作成してみましょう。 digit ——- 0 1 …

no image

NoSQLについて

NoSQLについて。 現在の案件ではmongoDB(NoSQL)を使っていますが、NoSQL自体が始めてだったので、これを機に少し掘り下げてみようとおもいます。 Contents1 NoSQLとは?2 …

アーカイブ