タグ

DB設計に関するpeketaminのブックマーク (14)

  • サロゲートキーと複合主キー | DBFlute

    一方で、Webサービス系などで論理設計と物理設計をもう一緒くたにやっていくような場合は、 正規化の論理に目の前にあるサロゲートキーを含めないようにすることが大切で、モデリングはナチュラルキーを基軸に考えていくとよいでしょう。 サロゲートキー (代理キー) サロゲートキー + (複合)ユニーク制約 ナチュラルキーをPKにせず、例えば連番となるようなカラムを用意して、それをPKにします。 これがサロゲートキーと言われるものですが、ナチュラルキーには別途ユニーク制約を付与する というのを忘れてはいけません。 ここでは、ナチュラルキーにユニーク制約を付けずにサロゲートキーだけを導入する方式は、業務的・実装的に意味はないと考え、ここでは取り扱いません。 議論の対象にすらしません。ユニーク制約を付けることで業務的なユニーク性を保ちつつサロゲートキーの恩恵を得ることができ、同時にナチュラルキーを明示する

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

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

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

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

  • 今まで見たもっともクソなテーブル設計 - 何か着ていればいいよ

    あれは、僕がデータベースを扱ううち最初から3件目のプロジェクトだった。 C++のソースが難解で火を吹いているという話で、自分は低スキルの若造。火にくべるには丁度良い程度のやる気と責任感をもっていた。折悪く別のプロジェクトが終了した直後だったもので投入されたのでした。 現場で『DBからデータを吸い出すツールかSQLを作ってくれ』といわれ話をきくと他社が作ったDB定義がすこぶる使いづらいという。 ER図やDB定義を見せてくださいと言ったのだけど、そんなものは無いという返事。 今ならもうここら辺で逃げ出すところですが、当時は『ふーん。』てなもんでそういうこともあるのかくらいの軽い気持ちで考えていました。 で、プロジェクトの資料をあさりまくって何とかDB定義のようなものも見つけDBのデータを調査し始めたのですが何かがおかしい。 機能の数に比して異様にテーブル数が少ないのです。 ふと周りを見ると、皆

    今まで見たもっともクソなテーブル設計 - 何か着ていればいいよ
    peketamin
    peketamin 2014/03/05
    Entity–attribute–value model こそ至上!(この後死亡) / データにはシリアライズしたデータを入れて構造化!
  • 複合主キー「否定派」と「許容派」の論争 - 設計者の発言

    定期的に取り上げたくなるDB設計に関する話題である。WEBアプリが一般化して以来、議論されてきた事柄がある。テーブルの主キーを「単独主キー」のみとするか、複数項目を組み合わせた「複合主キー」を必要に応じて使うべきかという問題だ(*1)。複合主キーに対する「否定派」と「許容派」に分かれた議論は劇烈で、宗教論争のようにも見える。 主キーというものは、テーブルの存在意義といってもいいほどに重大な要素である。にもかかわらず、なぜそんな基的なレベルの議論が始まってしまったのか。2つほどの理由が考えられる。 まず、単独主キーとしてIDを機械的に置くやり方(ID方式)が「オブジェクト指向」と相性がよかったからだ。オブジェクトは固有の識別子(オブジェクトID)を持つので、これに相当するIDをテーブルの主キーとすることで、オブジェクトとDBの設計問題を統合できると考えた技術者が少なからずいた。そのアイデア

    複合主キー「否定派」と「許容派」の論争 - 設計者の発言
  • @nippondanji 氏の「データベース設計徹底指南!!」は神プレゼン!脅威の主義主張の一貫性保証は DB エンジニアの鏡だった件! - #garagekidztweetz

    ツイート今日は、第 1 回のSQL アンチパターンの回から良コンテンツを提供しまくりなエンバカデロ・テクノロジーズさん主催の第 3 回 DB エンジニアのための勉強会に参加してきました。 今回は 漢(オトコ)のコンピュータ道で有名な漢の中の漢、 @nippondanji 氏がデータベース設計を徹底指南してくれるということで、元々 DB エンジニアがバックグランドのわたしとしてはいかないわけにはいかんだろう、と喜び勇んでいってきました! 内容はというと下記の概要をカバーする内容でした。 リレーショナルデータベース(以下RDB)は登場してからかなりの時間が経っています。その名が示すように、RDBはリレーショナルモデルをベースに考案されたソフトウェアです。しかしながら、未だに現場ではRDBが使いこなされているとは言いがたく、リレーショナルモデルへの理解も進まず、誤った常識が跋扈しているのが現状で

    @nippondanji 氏の「データベース設計徹底指南!!」は神プレゼン!脅威の主義主張の一貫性保証は DB エンジニアの鏡だった件! - #garagekidztweetz
  • 決して陳腐化しないデータベース設計の超基礎 | ウルシステムズ株式会社

    昨今、IT関連のメディアを中心に「モデリング」という言葉をよく見かけるようになりました。言葉で言うのは簡単ですが、では実際にモデリングを"まともに"行なえる技術者はどのくらいいるのでしょうか。筆者の経験から、モデリングのスキルは情報システム開発に関するスキルの中でも最重要なものの1つだと断言できます。稿では、モデリングの中でも特にデータモデリング(DB設計)に焦点を絞り、「エンティティ」「関連」「属性」「関連の多重度」という筆者が考えるデータモデリングの4大要素を中心に、その基礎知識やスキル習得法のポイントなどを紹介していきます。 DB設計のスキルは陳腐化しない!近年、DB設計の重要性が再認識されつつあります。今風な呼び方をすると「モデリング」と呼ばれるテーマであり、ちょっとしたブームになっているようにも思えます。例えば、IT雑誌やWebサイトなどの情報源を"チラ見"するだけで、数多くの

    決して陳腐化しないデータベース設計の超基礎 | ウルシステムズ株式会社
  • MySQL:auto_incrementが最大値まで達したとき – 仙人の心得

    auto_incrementにしたカラムの型がintなら2147483647、bigintなら9223372036854775807がautoincrementの最大になる。 実際に最大値までauto_incrementを進めてみる。 ALTER TABLE table1 AUTO_INCREMENT= 2147483647; auto_incrementが最大値に達するともうそのテーブルには行を追加することはできなくなります。 oracleのシーケンスならCYCLEオプションがあるけどmysqlのauto_incrementにはそのような機能は無いらしい。 ではauto_incrementが最大値に達したとき、どうすればよいのか? 単純に ALTER TABLE table1 AUTO_INCREMENT= 1; としても、table1に1より大きいキーが存在する限りauto_incre

  • 「生産管理」で業務知識の学びを効率化しよう - 設計者の発言

    「実装スキルと業務知識を統合するために」で業務知識の重要性について説明したが、そこで「多種多様な業種に関する知識を学ぶべき」とは言っていない点に注意してほしい。その記事で言う「業務知識」とは簿記とDB設計のスキルを指している。個々の業種に関する専門知識(業種知識と呼んでおこう)についてはあえて触れていない。その位置づけと合理的な学習方法について説明しよう。 その前に繰り返しておくが、業務システム開発者としての専門性を身につけたいと考えるのであれば、業務知識(簿記とDB設計)の学びを軽視してはいけない。若手のプログラマが、たとえばOOPの知識をさらに深めようとか、新たに関数言語を学ぼうとか、アジャイル手法をやってみたいとか考えたとしよう。彼/彼女がその時点で、簿記も知らないしDB設計も不如意だとすれば、学びの順序がおかしい。 しつこいようだが、開発実務を2年程度経験した後で、業務知識の習得に

    「生産管理」で業務知識の学びを効率化しよう - 設計者の発言
  • 2013 年の新卒研修メニュー - gist:5316074

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    2013 年の新卒研修メニュー - gist:5316074
  • はてなブログ | 無料ブログを作成しよう

    うめぇヨーグルトソースでもいかがですか。個人差にもよりますが。もしよろしければ。 お久しぶりです。 最近うんめぇ〜と思ってるヨーグルトソースがあるので、書いていこうと思います。 ヨーグルトとハーブ類をもりもり使うので、そういうのがべられない方にはうんめぇソースではないです。ごめんなさい…。もしよろしければお茶だけも…旦~ 【用意する…

    はてなブログ | 無料ブログを作成しよう
  • [データベース設計編]長時間終了しないトランザクションを使ってはいけない | 日経 xTECH(クロステック)

    トランザクション処理の設計は重要である。RDBMSの負荷の面から見ると,トランザクションがアクティブ状態(トランザクションがスタートしてコミットもロールバックもしていない状態)である時間はできるだけ短い方が望ましい。RDBMSは,トランザクションがアクティブ状態だといくつものリソースを獲得して維持する必要があるからだ。具体的には,ロックの情報やUNDOログ(ロールバックされた時にデータベースを元の状態に戻すために使用するデータ),REDOログ(コミットされた後何らかの要因で損傷が発生したデータを復元するために使用するデータ),などがある。長時間終了しないトランザクションがあると,これらのリソースをその間獲得し続けなければならず,ほかの処理やトランザクションに悪影響を与えることがある。 一番分かりやすい例としては,RDBMSのシャットダウンがある。シャットダウンする際にアクティブなトランザク

    [データベース設計編]長時間終了しないトランザクションを使ってはいけない | 日経 xTECH(クロステック)
  • 【データベース設計】 テーブル名、カラム名の名前の付け方(命名規則) at softelメモ

    データベース設計のテーブル名、カラム名の物理名について、とても個人的な自分ルールをご紹介。 テーブル名は、 小文字英数字とアンダースコアだけ使う。大文字は避ける。 一般的な英単語、ローマ字(ヘボン式)でつける。多少長くなってもいい。 頭に何かつける(t_***、m_***、c_***など)。 カラム名は、 小文字英数字とアンダースコアだけ使う。大文字は避ける。 一般的な英単語、ローマ字(ヘボン式)でつける。 頭にテーブル名を付ける。ものすごく長くなってもいい。 大文字小文字はDBMS、OS、プログラミング言語によって区別されたりされなかったりするので、無用なトラブルを避けるため。 ヘボン式で統一すれば、ツはtuなのかtsuなのか、シはsiなのかshiなのかで迷わなくなる。 テーブル名に t_***、m_***、c_*** などを付けて、テーブル、マスタ、多対多の関連を表すテーブル、ログ的な

    【データベース設計】 テーブル名、カラム名の名前の付け方(命名規則) at softelメモ
  • 複合主キーを避けるべき理由 - 虎塚

    データベース設計の話をしていて、「連番の主キーは業務上意味のないデータだから、テーブルに持たせるのはムダだ。複合主キーにするべき」という意見を聞く機会がありました。 脊髄反射で「ないわー」と思ったものの、理由を上手く説明できなかったので、改めて考えてみました。 その結果、次のような結論に至りました。 単一の連番カラムによる主キーと、複合カラムによる主キーとで迷ったら 実装をシンプルにし、業務変更の影響範囲を小さくするために、複合主キーを避ける というわけで、調べたことや考えたことをメモしておきます。# 間違っている部分があれば、教えていただけると嬉しいです。 (2011/07/25 追記)複合主キーとサロゲートキーについては、要件やシステムに依存して多様な判断がありうると思います。にもかかわらず、「避けるべき」というタイトルにしたのは極端でした。申し訳ありません。ご指摘下さった皆さん、あり

    複合主キーを避けるべき理由 - 虎塚
  • 1