タグ

DB設計に関するatm_09_tdのブックマーク (13)

  • 「SQLアンチパターン」を避けるためのチェックリスト②(DB物理設計編) - log4ketancho

    引き続き「SQLアンチパターン」について、自分なりのチェックポイントを言語化していきたいと思います。下記の記事の続きです。 www.ketancho.net 題に入る前に、ふたつ。嬉しかったこととお詫び(?)を。 t_wada さんからコメントを頂けた😂 素晴らしいエントリをありがとうございます。『SQLアンチパターン』は名著であると胸を張って言えます。ご興味をお持ちの方はこの機会にぜひ。 / “「SQLアンチパターン」を避けるためのチェックリスト①(DB論理設計編) - log…” https://t.co/Vjj0Yh2cqU— Takuto Wada (@t_wada) 2018年3月8日 スーパーなエンジニアの方からコメントをいただけるなんてと、帰り道ニヤニヤしてましたw 色々拙い部分があると思いますが、自分の理解のために拙くてもいいので言語化を続けていこうと思っています。引き

    「SQLアンチパターン」を避けるためのチェックリスト②(DB物理設計編) - log4ketancho
  • ポリモーフィック・アソシエーション - Strategic Choice

    ポリモーフィック・アソシエーション(Polymorphic Associations, ポリモーフィック関連) どういうこと? 【したいコト】 複数の親テーブルを参照します。しかし、各レコードが、どちらの親を参照しているか、わかりません。 【やらかしたコト】 「ポリモーフィック関連 *1 」というテクニックを利用します。ポリモーフィック関連は、レコードが参照する親テーブル名を格納する列を追加します。 どうしてヤル? 親が複数あるような構造でも、親テーブル名を識別として使って、親子を結合することが出来ます。 どうしてダメ? 参照整合性が使用できない 複数の親テーブルを参照する外部キーを宣言することはできません。 両方の親テーブルを結合しにくい 外部結合を使用すれば可能だが、ところどころNULLになる。 どうすれば? 「ポリモーフィック関連の反転」を行います。 ポリモーフィック関連では、来あ

  • DB論理設計のノウハウ - Qiita

    DB設計の概要を簡単におさらいした後、論理設計について主にまとめていきます。 DB設計の全体手順のおさらい DB設計は、大きく論理設計と物理設計に分けられます。 概念スキーマを定義します。 エンティティの抽出 エンティティの定義 正規化 ER図の作成 物理設計 論理設計の結果を受けて、データを格納するための物理的な領域や格納方法を決めます。 テーブル定義 インデックス定義 ハードウェアのサイジング ストレージの冗長構成決定 ファイルの物理配置決定 テーブルの構成要素のおさらい 行と列 行(レコード):横のデータの組 列(カラム):縦のデータの組 キー キーとは、DBのテーブルから特定のデータを引き出すための鍵です。 主キー:その値を指定すれば、必ず一行のレコードを特定できるような列の組み合わせのこと。一意にレコードを識別するためにある 外部キー:2つのデーブル間の列同士で設定するもの。参照

    DB論理設計のノウハウ - Qiita
  • 書籍出版のお知らせ:理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL

    来る2月27日、データベースの新書籍を発売させて頂くことになった。タイトルは「理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL」となっている。単に「データベース」と書いてあるが、RDBがメインのテーマの書籍である。 多くの人が未だにRDBを使いこなせていないのではないか。RDBの使い方をマスターするには何が必要なのか。それがここ数年私が追ってきたテーマであり、この書籍を出すことになった動機である。 あまりにも酷いDB設計、あまりにもスパゲティなクエリ、あまりにも希薄なデータモデルへの理解。そういった問題はどこから生み出されるのか。そのひとつの結論としてたどり着いたのが、「そもそもRDBの使い方があまり理解されていないのではないか」ということだった。名著、SQLアンチパターンでは「やってはいけないケース」について学ぶことができるが、その反対のテーマ、つまり来どの

    書籍出版のお知らせ:理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL
  • テーブル設計のテクニックについて

    これまでクライアントサイドのプログラミング中心できたこともあり、あまりサーバーサイドやDB設計をした経験がないのですが、最近になって基幹系のDB周りの業務も担当するようになってきました。 直近では、すでにあるTBLに削除のフラグのような列があるのを見たとき、最初は何に使うのかわからなかったのですが、インターネットで色々調べるうちに"論理削除"というやり方があるのかと知ったぐらいです。現状がこんな状態なのですが、識者の方に質問があります。 1.登録日時・ユーザー、更新日時・ユーザーのカラムについて 2.TBLDB設計について現場で利用するようなテクニックが記載されたやリソースについて 1.登録日時・ユーザー、更新日時・ユーザーのカラムについて 参考にするために他システムのTBL定義などを見ているのですが、多くのTBLにレコードの登録日時と登録ユーザー、レコードの更新日時と更新ユーザーとい

  • プライマリキーを使った1:1関連でカラム数の多いテーブルを分割する - Hidden in Plain Sight

    おそらく多くのソーシャル系アプリにあてはまるRailsのプチ・デザインパターン的な話。 ぼくが今やっているEast Meet Eastには、ユーザごとに数多くのプロフィール属性があります。名前、性別、生年月日、郵便番号、職業などなど、カラム数にしてざっと25個。これを、全部ひとつのusersテーブルに詰め込むのは、コードの見通しという観点からも性能の観点からも、あまりよろしくありません。 なぜならば、ユーザ関連の情報を扱う局面としては主に メールアドレスとパスワードなどを使ってログインする(アカウント情報) プロフィール情報で条件を指定してユーザを検索・推薦する(プロフィール情報) という2つの独立性の高いユースケースにわかれるため、ログイン処理をやってるときにはプロフィール情報はいらないし、プロフィールを検索してるときにはメールアドレスやパスワードをロードするのは無駄です。また、開発やデ

    プライマリキーを使った1:1関連でカラム数の多いテーブルを分割する - Hidden in Plain Sight
  • DB設計の難しさ

    今日は徒然なるままにDB設計について思っていることを並べてみようと思う。 ようやくWEB+DB Pressの次号の原稿を書き終えた。2年間の連載であるが、来年はプライベートが忙しくなる予定なので、連載はこれにて終了とさせてもらうつもりである。 「なぜ人はリレーショナルデータベースを使いこなせないのか」 このところ執筆や講演を通じてリレーショナルモデルについて説明する機会を色々頂いているが、それらの活動の根源となっているのが、この素朴な疑問である。その疑問をパワーにしてこれまで活動を行なってきた。 現時点での自分の回答は「データベース設計が難しいから」である。もちろんリレーショナルモデルそのものの難しさというのもあるが、それよりは「適切な使い分けができていない」ということが大きいように思う。言葉を変えると、リレーショナルモデルを適用すべきデータとそうでないデータの判断ができていないからDB

    DB設計の難しさ
  • 第3回 テーブル設計のグレーゾーン~毒と薬は紙一重 (4)サロゲートキーVSナチュラルキー | gihyo.jp

    サロゲートキーVSナチュラルキー DBエンジニアの方なら、サロゲートキー(代理キー)という言葉をご存じでしょう。これは、テーブルへの入力データにある列を主キーとせずに、システム側で独自に割り当てるキーのことです(一般的には連番が使われます⁠)⁠。これに対して、入力データ自体の列を主キーにする場合はナチュラルキー(自然キー)と呼びます。 サロゲートキーは、基的には不要なものです。入力データに一意なキーが存在していればそれを主キーとして使うことで、普通は問題ありませんし、オートナンバリングの機能も長らく標準SQLには存在していなかったからです(そのため、今でも実装ごとにやり方はバラバラです⁠)⁠。しかし、以下のような業務要件の場合には、サロゲートキーを使うことを考えます。 ① そもそも入力データに主キーにできる項目がなく、データが重複している場合 ② 主キーの値が使いまわされる場合 ③ 主キ

    第3回 テーブル設計のグレーゾーン~毒と薬は紙一重 (4)サロゲートキーVSナチュラルキー | gihyo.jp
  • その選択、ちょっと待った!NoSQLデータベースへ乗り換える前に検討すべき3つのポイント

    最近、どうも安易に「NoSQLにすれば厄介なDB設計から開放される」と考えている人が多いように思えて仕方がない。だが待って欲しい。当にNoSQLと呼ばれるデータベースを使えばアプリケーションの開発・運用の苦しみから逃れられるのだろうか。もちろん「そんなことは無い!!絶対にだ!!」と私は考える。今日はその理由について語ろうと思う。 トランザクション先日、リレーショナルデータベースにおけるDB設計についてセミナーで解説したばかりだが、リレーショナルデータベースにおけるデータの整合性は何もDB設計だけが担保しているわけではない。リレーショナルモデルと同じかそれ以上に欠かせないのがトランザクションだ。 トランザクションがあるおかげで、トランザクション終了後のステータスは「成功」か「失敗」の2つしかないということが保証される。すなわちオール・オア・ナッシングだ。もしトランザクションの途中で何らかの

    その選択、ちょっと待った!NoSQLデータベースへ乗り換える前に検討すべき3つのポイント
  • DBエンジニアのための技術勉強会で発表したスライドを公開しました。

    DBエンジニアのための技術勉強会というイベントで、リレーショナルモデルにおけるDB設計について話す機会を頂いた。リレーショナルモデルは非常に重要であるにも関わらず、現場ではないがしろにされてしまっている。その結果、アプリケーションのロジックを上手くクエリで表現できず、開発現場では非効率な開発が行われ、多くの人がデスマ的な状況に追い込まれている。そういう危機意識について、これまで何度かブログでも書いてきたし、WEB+DB Pressで連載している動機もその点にある。リレーショナルデータベースはやはりリレーショナルデータベースとして使うべきだ。そのための鍵となるのが、DB設計である。 今回はなんと約2時間の持ち時間を頂いた。リレーショナルモデルについてはこれまで何度か話す機会を頂いたが、2時間というのは最長記録である。それに合わせてスライドもボリュームたっぷりのものになった。過去のスライドと

    DBエンジニアのための技術勉強会で発表したスライドを公開しました。
  • 新著が出ます:『達人に学ぶDB設計 徹底指南書』 - ミックのブログ

    3/16 に新著が出ます。タイトルは『達人に学ぶDB設計 徹底指南書』。名前からピンと来た方もいるかもしれませんが、『達人に学ぶ SQL徹底指南書』の続編に当たります。の装丁も同じ轟木亜紀子さんにお願いしたので、シリーズものっぽく仕上がっています(写真は文末の Amazon へのリンク参照)。 書も、前回の SQL 編と同様、初級者から中級者へステップアップするためのコツやノウハウを詰め込んだ盛りだくさんな内容になっています。ただし、正規化や ER 図の描き方や、インデックスの仕組みやバックアップといった論理・物理両面における設計の基礎についてもカバーしているので、初級者であっても置いてけぼりにすることのないよう配慮したつもりです。 ただ、DB 設計というのは非常に広範囲な内容を含むので、イメージが湧かない、という方もいるでしょう。そこで以下に、書の章構成と前書きを示しますので、購入

    atm_09_td
    atm_09_td 2012/03/11
    これは買っておこう。
  • コメントを頂いたので - SQLer 生島勘富 のブログ

    数値を文字型で持つべきではない コメントをいただいたので。 前の記事はこちら。 http://d.hatena.ne.jp/Sikushima/20110809/1312871002 元ネタはこちら。 http://d.hatena.ne.jp/iad_otomamay/20110808/1312805917 http://d.hatena.ne.jp/iad_otomamay/20100906/1283786846 システムはそれぞれ要件が全く違う。だから、何事も一概には言えない。 しかし、はっきり言えるのは数値を文字で置き換えて保存するのは、普遍的な超バッドノウハウでしょう。これはどう考えてもあり得ん。 インサートされた時点の数値エリアの入力率が50%でそれが最終的に90%になる伸長率が高いデータだったとしても、 PCTFREE = 100% × 数値エリア割合 × 50% としておい

    コメントを頂いたので - SQLer 生島勘富 のブログ
  • Good night, Posterous

    Posterous Spaces is no longer available Thanks to all of my @posterous peeps. Y'all made this a crazy ride and it was an honor and pleasure working with all of y'all. Thanks to all of the users. Thanks to the academy. Nobody will read this.

  • 1