タグ

RDBに関するfuyu77のブックマーク (39)

  • データベースの正規化(第1〜第3正規形) - Wiz テックブログ

    こんにちは!バックエンドエンジニアの小室です。 先日、4月から入社予定の方に向け「データベース設計」について研修を行いました。 その中でもメイントピックであった「正規化」について改めてまとめてみました。 さっそくですが、データベースにおける正規化とは、 データベースで保持するデータの冗長性を排除し、 一貫性と効率性を確保するためのデータ形式へ変換することを指します。 一般的に第3正規形までで十分とされているため第3正規形までを取り上げます。 第1正規形 テーブルの行と列が交わる1つマスを「セル」と呼ぶことにします。 第1正規形の定義は「1つのセルには1つの値しか含まれない」です。 社員テーブル このように1つのセルに1つの値が含まれているとき、この値を「スカラ値」と言います。 社員テーブル(非正規形) 上のようなテーブルがあった場合、1人の社員は複数の子を養っているので、このように表現した

    データベースの正規化(第1〜第3正規形) - Wiz テックブログ
    fuyu77
    fuyu77 2023/03/30
  • 外部キー制約でデッドロックに引っかかった話

    今回は仕事で直面したデッドロックのケースについて話したいと思います。 今回ハマったケース 今回ハマったケースは、複数プロダクトが共有するデータベースにあるデータを単体プロダクト専用のデータベースに持ち帰る開発を行っていたときでした。かなり簡略化しておりますが現状と分離後の理想型は下記の通りです。 現状 担当プロダクトと別プロダクトは同じ従業員データを参照している 従業員データの中には、担当プロダクト専用のカラムもあれば、別プロダクト専用の項目もある マイクロサービスがもつマスタ従業員データと旧従業員データがそれぞれ持つ名前カラムは同期している 理想系 担当プロダクトは新しい専用の従業員データをもち、専用のカラムはそのテーブルにもつ マイクロサービスがもつマスタ従業員データと各プロダクトの従業員データの名前カラムは同期させる この対応を段階的に進めている途中で、 担当プロダクトによる旧従業員

    外部キー制約でデッドロックに引っかかった話
    fuyu77
    fuyu77 2022/12/16
  • ドキュメントDBかリレーショナルDBどっち使う? - Qiita

    { "id": "bbc16639-c082-47e8-b9c0-2d59579c7336", "first_name": "taro", "last_name": "momo", "lastLoggedIn": "2022-07-31T06:03:37+00:00", "email": "[email protected]", "skills": [ {"name": "python"}, {"name": "golang"}, {"name": "英語"} ], "work_history": [ { "company": "ENECHANGE", "position": "Software Developer", "start_date": "2018-03-26", "end_date": null }, { "company": "Company Inc.", "position"

    ドキュメントDBかリレーショナルDBどっち使う? - Qiita
    fuyu77
    fuyu77 2022/08/19
  • 外部キー制約が一切ないと何に困るのか?

    こんにちは。株式会社プラハCEOの松原です 注目を集めつつあるMySQLプラットフォームのPlanetScaleですが、外部キー制約が効かないという一見致命的に見える仕様について調べていたところ、こちらのDiscussionで興味深い回答が開発者から寄せられていたので日語でまとめ直してみようと思いました。 外部キー制約がなくてもそれほど困らない理由 今回の話はParentテーブル(id)とChildテーブル(id,parent_id)を前提に考えていきます そもそも外部キー制約は何に役立つのか 今回のDiscussionでは質問者から「外部キー制約がないとこういう時に困るよ!」と質問が寄せられています: 外部キー制約がないと参照先のデータが存在していることを保証できない! 外部キー制約がないとデータの重複を回避できない! それぞれの質問に対して回答者の回答は以下の通りです: 外部制約がな

    外部キー制約が一切ないと何に困るのか?
    fuyu77
    fuyu77 2022/04/12
  • WEB+DB PRESS Vol.122に特集「Rustで実装!作って学ぶRDBMSのしくみ」を書いた - Write and Run

    KOBA789 です。 時が経つのは早いもので、気づけば2月末に無職になってから1ヶ月以上が過ぎていました。 その間に何をしていたのかといえば、表題の特集記事の執筆をしていました。 宣伝 このブログ記事は WEB+DB PRESS Vol.122 を読みたくなるためのものです。ぜひ買ってね。買ったらちゃんと読んでね。 作って学ぶ RDBMS のしくみ、書きました。みんな大好き Rust を使って解説してます https://t.co/nm526qQYnm— KOBA789 (@KOBA789) April 8, 2021 gihyo.jp 使用言語は Rust だし、RDBMS はそもそも難しいトピックだしで結構重めの内容ですが、まずは読み物として寝転びながらでもいいので読んでみてほしいです。 ゴールデンウィーク*1の自由研究のお供にもどうぞ。たぶんちょうどいい分量なんじゃないかなぁ。ゴー

    WEB+DB PRESS Vol.122に特集「Rustで実装!作って学ぶRDBMSのしくみ」を書いた - Write and Run
    fuyu77
    fuyu77 2021/04/09
  • カラム命名規則 - Qiita

    もちろん全部が全部、英語の基文法に合うわけではないのだけれども 開発チーム内でわかりやすいカラム名をつけるのが大事 定義そのままに難しい言葉を使ってみんながわからなくなるのはNG チーム内参考備忘録 日付 DBに登録する、何かの行為が完了した時点の日付ということで、過去形で作成。 dateもdatetime型も前置詞はatにしておけばどちらも問題ない 例: created_at updated_at canceled_at expired_at ※ただしスケジュールの開始日時など、そのものの属性はstart_atと現在形を使うなど適宜変更 存在・所有 「何かをもっている」というboolean型のカラムを作成したいとき booleanのgetterだと補完するとisAAA()となるので、その後ろについてもヘンじゃない 過去分詞(基は過去形と似たようなもの、~ed)または形容詞を使う。現在

    カラム命名規則 - Qiita
    fuyu77
    fuyu77 2020/12/03
  • データベースを遅くするための8つの方法

    はじめに Twitterのタイムラインを見ていたらバッチ系のプログラムで逐次コミットをやめて一括コミットにしたら爆速になったというのを見ました。当たり前でしょ、と思ったけど確かに知らなければ分からないよね、と思って主に初心者向けにRDBを扱うときの注意点をまとめてみました。 プログラミングテクニック的なところからテーブル設計くらいの範疇でDBチューニングとかは入ってないです。 自分の経験的にOracleをベースに書いていますが、他のRDBでも特に変わらないレベルの粒度だと思います。 大量の逐次コミットをする バッチアプリケーションでDBにデータをインサートすると言うのはかなり一般的な処理です。しかしデータ量が少ない時はともかく大量のインサートを逐次コミットで処理するとめちゃくちゃ遅くなります。数倍から十数倍遅くなることもあるので、10分程度のバッチが1時間越えに化けることもザラにあるので原

    データベースを遅くするための8つの方法
    fuyu77
    fuyu77 2020/11/17
  • Home | DBML

    Intro​ DBML (Database Markup Language) is an open-source DSL language designed to define and document database schemas and structures. It is designed to be simple, consistent and highly-readable. It also comes with command-line tool and open-source module to help you convert between DBML and SQL. Table users { id integer username varchar role varchar created_at timestamp } Table posts { id integer

    Home | DBML
    fuyu77
    fuyu77 2020/11/02
  • ダンプとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

    簡単に書くよ ダンプ(英:dump)とは 見たい内容をファイルとかに「ぐへぇ(-O-)=3」と吐き出すこと です。 サクッと一言で説明すると、データをファイルや画面に 「ぐへぇ(-O-)=3」と出力する のが「ダンプ」です。 「○○ダンプ」や「○○をダンプする」といった使い方をします。 例えば「メモリダンプ」という用語があります。 メモリダンプの意味は「メモリの内容をファイルに出力すること」です。 「DBをダンプする」といった表現を使う場合もあります。 意味は「データベースの内容をファイルに出力するよ~」です。 「普通に『出力』で、いーじゃん」と思うかもしれませんけどね。 わざわざ「ダンプ」と言った場合は 手を加えずに、そのまま なニュアンスがあります。 加工しないで、そのまま、ぽいっちょと出すイメージです。 エラー内容やデバッグ中の値を出力するときは「ダンプ」と表現することが多いです。

    ダンプとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
    fuyu77
    fuyu77 2020/10/24
  • 本当にあったやらかしDB設計①【R無しRDB】 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? どうも、IT業界は4年目だけど開発はあんまりやったことがなかった人です 独学でDBとアプリ周りを勉強して最近開発現場へと行くことになったのですが、僕でもわかるようなやばいような事がかなりゴロゴロあって唖然とする毎日です(運が良いのか悪いのか…) 今日はそんな中の一つを紹介したいと思います #R無しRDB これには当にびっくりしました どういうことかというと、外部キーをひとつも使ってなかったのです 分析系DBなのかと思いきや調べたり聞いたりして確認したところがっつり処理系、しかもコアな部分…w データの不整合を許せない部分なのに外部キー

    本当にあったやらかしDB設計①【R無しRDB】 - Qiita
    fuyu77
    fuyu77 2020/08/12
  • 本当にあったやらかしDB設計シリーズ一覧 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    本当にあったやらかしDB設計シリーズ一覧 - Qiita
    fuyu77
    fuyu77 2020/08/12
  • データベース設計の際に気をつけていること - 食べチョク開発者ブログ

    皆さんこんにちは、エンジニアの西尾です。 新しい機能・サービスを開発する際、私は特にデータベース設計に気をつかいます。 データベースはシステムの土台です。 土台が不安定だと、その上に積み上げていくアプリケーションコードがいびつなものになり、つらい思いをします。 また、一度動き出してしまったシステムのデータベース設計を変えるのは、容易なことではありません。 データベース設計には”これだ!”という正解はないと思っています。 サービスの特徴、システムの性質、toB向け/toC向け、Readが多い・少ない、Writeが多い・少ない。 その他もろもろの背景により、データベース設計の仕方も変わってきます。 このテーブルは正規化していないから駄目だ、この設計はいわゆるポリモーフィック関連だから使ってはいけない、などということはありません。 アンチパターンと呼ばれるものも時と場合によっては正解になります。

    データベース設計の際に気をつけていること - 食べチョク開発者ブログ
    fuyu77
    fuyu77 2020/06/16
  • 27. 論理削除とは何か?どのような解法があるのか? w/ twada | fukabori.fm

    話したネタ 論理削除とはそもそも何か? 物理削除とは? なぜ、論理削除が生まれてくるのか? SQLアンチパターン 幻の第26章「とりあえず削除フラグ」 理由1: 心理的なハードルの高さ、怖さがある 理由2: 削除したデータを検索対象に入れたい場合がある 理由3: ログとしての用途 理由4: 誤操作をすぐに戻したい アンチパターンとは何か? なぜ、論理削除はアンチパターンとして捉えられるのか? 全てのSQL文のWHERE句に削除フラグが必ず入る LIMIT 1などが蔓延していく 論理削除に気づくきっかけは何か? テーブル設計や、規約から気づく 論理削除というアンチパターンをどのように解いていくか? 論理削除という概念は世の中にまずなく、お客様は論理削除という言葉を使っていない 要件をどのように設計すればいいのか? ORMの論理削除プラグインはあまり良くない 状態遷移として捉える方法 Soft

    27. 論理削除とは何か?どのような解法があるのか? w/ twada | fukabori.fm
    fuyu77
    fuyu77 2020/03/03
  • 削除フラグのはなし

    This document discusses using sliding windows to aggregate streaming data in MapReduce. It proposes buffering input tuples in mappers until a window is full, then emitting the aggregate. Combiners and reducers combine partial aggregates across windows. Window ranges are initialized and updated during merging to remove outdated data and handle late arrivals. This approach allows streaming aggregati

    削除フラグのはなし
    fuyu77
    fuyu77 2019/05/17
  • InfoQ: データの削除は非推奨

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    InfoQ: データの削除は非推奨
    fuyu77
    fuyu77 2019/05/17
  • 論理削除が云々について - mike-neckのブログ

    今日朝イチで見たエントリーがこれでした。 qiita.com 論理削除の弊害は色々なところで言われているけど、僕の足りない頭で理解している所によると、二つの値しか持たない削除フラグ的なものはカーディナリティが云々で検索条件につけても性能上的にもよくないし、意味がないということです。 論理削除を完全に悪だとは言いませんが、論理削除を極力排したい人たちは、基的にデータそのものを削除する、もしくは論理削除というのはまだ要件的に未確定な要素が隠されていることを示すフラグであると考えているようです。 僕がITの業界でキャリアをスタートしてから2年目くらいに配置されたプロジェクトではT字型ER手法というのをベースにしたテーブル設計をしていて、そこでかなり鍛えられたわけですが、その時にはだいたいこのような原則を叩きこまれました。 テーブルに状態を持たせない 究極には機械が認識するキーと、人間にとって意

    論理削除が云々について - mike-neckのブログ
    fuyu77
    fuyu77 2019/05/16
  • 論理削除フラグという名の死亡フラグ - @ledsun blog

    RDB - DELETE_FLAG を付ける前に確認したいこと。 - Qiita 論理削除が云々について - mike-neckのブログ Kazuho's Weblog: 論理削除はなぜ「筋が悪い」か 流行っているので乗っかります。 結論 「データ制約の強力さと集合としての表現力を捨てながら、Relational Databaseを使うのはなぜか?」 論理削除フラグのデメリット 大体三つあると考えています。 ユーザーの言葉でない データ制約の弱さ 集合として認識できない ユーザーの言葉でない 私の経験上は、ユーザーから「論理削除」という言葉を聞いたことがありません。 次のような要件は、聞いたことがあります 社員が退職(・転属)する (売掛金の回収を諦めて)売上を打ち消す 「お知らせメッセージ」を公開日がくるまで非表示にする 既読メッセージを表示しない 保存期間が過ぎたアンケート結果をオペレ

    論理削除フラグという名の死亡フラグ - @ledsun blog
    fuyu77
    fuyu77 2019/05/16
  • #ronsakucasual DBの論理削除についてひたすら共有する 論理削除 Casual Talks #1 にいってきたまとめ - もぐめぽろぐ

    名前 とりあえず削除フラグ 目的 エンドユーザから見るとデータがないことにしたいけど、実際のデータは消したくない 削除したデータを検索したい データを消さずにログに残したい 誤った操作をなかったことにしたい、直ぐに元に戻したい アンチパターン 例えばis_deletedというカラムがtrueの場合は削除されているとみなす メリット update文ならデータが簡単に元に戻せる気がするのでなんとなく安心 -> 俺のupdate文でなんとかなる!! 起こること SELECTするときには常にWHERE句が追加で必要になり、コードが削除フラグだらけになる 全員テーブル設計に精通してるわけではないので、テーブルによって削除フラグの有無があったりした場合、認識の齟齬を生みやすい 例えばrubyでdefault_scopeを用いて、よかれとおもってコードレベルでデフォルトを変えたらバグがたくさん出てくる

    #ronsakucasual DBの論理削除についてひたすら共有する 論理削除 Casual Talks #1 にいってきたまとめ - もぐめぽろぐ
    fuyu77
    fuyu77 2019/05/16
  • 論理削除の前に別テーブルに切り出せるかどうかを考えよう - Life is Really Short, Have Your Life!!

    めっちゃよくまとまっているので、大変助かりました。 blog.mogmet.com t-wada氏の「とりあえず削除フラグはアカン」については、僕も全く同感です。論理削除をしなければならないビジネス上の理由がスッポリ抜け落ちている。「とりあえず削除フラグ立てて何かあれば戻せるようにすればいいンゴ」ってのは論理設計を放棄していると言い換えても良いし、「ユーザーの言葉ではない」という指摘も重要。こちらに書かれています。 ledsun.hatenablog.com じゃ、フラグやめてどーすんのって話。フラグを立てたくて立てる人はおらん(はず)。「削除フラグを追加するとSELECT時に常にWHERE句で削除フラグを引っ掛ける必要があるのでクソ」→「削除日や状態カラムを使おう」では解決にならん。t-wada氏の資料でも解決策で上げられてたけど「×」マークがついてます。下記に変わっても誰も嬉しくないと

    論理削除の前に別テーブルに切り出せるかどうかを考えよう - Life is Really Short, Have Your Life!!
    fuyu77
    fuyu77 2019/05/15
  • DELETE_FLAG を付ける前に確認したいこと。 - Qiita

    DELETE_FLAG という思考停止フラグ DELETE_FLAG という boolean の列が DB 設計でよく話題になります。 論理削除という言葉で上手に論理武装し、スキを見せるとすぐに入れたがる人がおり、 一方でそれにつよく反対する人もいます。 自分の経験としては、広義の論理削除はありえると思いますが、実現方法が DELETE_FLAG だとなった時、それはあまり考えてないでなんとなくパターンとして盛り込んでる場合が多いと感じます。 ただし、設計に唯一の答えは無いので、もしかしたらそれが妥当な設計である場合があるかもしれません。 今回は「DELETE フラグがなぜダメなのか?」などという話をするつもりも、アンチパターンだと断言するつもりもありません。 問題は、仕様をきちんと把握すると、「最適な設計は DELETE_FLAG ではない」という場合が有って、その場合は、その最適な設計

    DELETE_FLAG を付ける前に確認したいこと。 - Qiita
    fuyu77
    fuyu77 2019/05/15