タグ

2024年5月15日のブックマーク (2件)

  • SQLアンチパターン:ENUMは使わない方がいいよ | Shiro's secret base

    どうも、シローです。 今回は、特定の文字列に限定した列を定義する方法について、アンチパターン「サーティワンフレーバー」も一緒に紹介します。 特定の値を持ちうる列とは 例えばユーザ(Users)の権限(管理者かメンバーか)を表したい場合、Usersテーブルにメンバーの権限を表すuser_roleという列を定義するとします。 このuser_roleには管理者の場合はadmin、メンバーの場合はmemberという値を持ちそれ以外の値は格納しない(できない)ようにするにはどうすれば良いのか アンチパターン「サーティワンフレーバー」について 先にアンチパターンについて紹介します。 サーティワンフレーバーと呼ばれる設計方法では特定の値を入れるために 列にCHECK制約を入れる(MySQL8.0以降) 列をENUM型にする という手法を取りうることです。 僕の環境はMySQL5.7なのでENUM型のカラ

    SQLアンチパターン:ENUMは使わない方がいいよ | Shiro's secret base
  • SQLアンチパターン感想その二ーENUM型を扱う

    今回はSQLアンチパターンの感想その二です。 以前のプロジェクトで何回か出会ったことがあり、一つのカラムに対して、いくつかの選択肢がある、という場合、ENUMタイプを安易に使ってしまいましたが、このを読んだら改めて反省しました。 解決したい問題とは 例えばブログポストのステータスというフィールドがあるとして、そのステータスには、DRAFT, PUBLISHEDといった値があります。ただ、ここはstatusフィールドに対して、DRAFTとPUBLISHEDのみに限定したいです。draftでも、newでも、挿入・更新できないように制限をかけたいところです。 アンチパターン:CHECKもしくはENUMを用いる CREATE TABLE Post ( -- ... status VARCHAR(20) CHECK (status IN ('DRAFT', 'PUBLISHED')) ); var

    SQLアンチパターン感想その二ーENUM型を扱う
    katsush
    katsush 2024/05/15