タグ

SQLに関するs_moriのブックマーク (9)

  • 自己結合の使い方

    はじめに SQLが提供する結合演算には、その特徴に応じて内部結合、外部結合、クロス結合などさまざまな名前が与えられています。普通、これらの結合の多くは、異なるテーブルまたはビューを対象として行われます。しかし、SQLは結合が同一のテーブルまたはビューに適用されることを禁止していません。同一のテーブルを対象に行う結合を「自己結合(self join)」と呼びます。自己結合は、使いこなせば非常に便利な技術ですが、動作がイメージしにくいため敬遠されがちです。そこで稿では、この自己結合の便利さを例題を通して学び、その動作を分かりやすく解説します。 自己結合を理解することは、実務上のテクニックを身につける以外に、もう一つ利点があります。それは、集合指向(set-oriented)というSQLの重要な特徴を理解できることです。オブジェクト指向言語が世界をオブジェクトとして表現するように、SQLは世界

    自己結合の使い方
    s_mori
    s_mori 2013/08/04
  • 「SQLアンチパターン」 #sqlap - tmtms のメモ

    1月末くらいに「SQLアンチパターン」を監訳者の和田さんから頂きました。 なぜ私ごときが頂けたのかわかりませんが、ちょうど読みたいと思っていたところだったので、ありがたく頂戴致しました。 それから1ヶ月くらいかけてやっと読み終わりました。遅読にもほどがあります。すいません。 デブサミで和田さんのサインをもらおうと思っていたのに、不覚にも持っていくのを忘れてしまいました。残念…。 SQLアンチパターン 作者: Bill Karwin,和田卓人(監訳),和田省二(監訳),児島修出版社/メーカー: オライリージャパン発売日: 2013/01/26メディア: 大型購入: 9人 クリック: 698回この商品を含むブログ (20件) を見る 裏表紙より 書はDB設計やSQL記述の際に避けるべき事柄を1章で1つ、25個紹介するという書籍です。リレーショナルデータベースを中心に据えたシステム開発には、

    「SQLアンチパターン」 #sqlap - tmtms のメモ
  • 2013-05-04

    論理設計は議論すべき点が多いと思うが、物理設計以降になってくるとその通りとしか言えないものも増えてくる。 インデックスの性質を理解して、闇雲にインデックスを作成したり、逆に全く設定しないということのないように、というもの。そりゃそうだ。 ただ、解決策に示されているのは、すでに運用中のデータベースに対するパフォーマンス改善としてのインデックスの作成であり、いわゆる物理設計としてのインデックス設計とはちがう。そして、設計段階でのインデックスの設計は意外と難しい。なぜなら、今のデータベースはコストベースのオプティマイザであるため、実際のデータの分布がわからないと、そのインデックス自体が有効か有効でないか?ということがわからない。 このため戦略としては、インデックスが使用される可能性が高い場合のみ設定するように設計するか、多少低くても設定するように設計するか、のいずれかがある。前者は運用中のパフォ

    2013-05-04
  • Entity-Attribute-Value: SQL アンチパターン - ペンギンラボ Wiki

    Bill Karwin “SQL Antipatterns: Avoiding the Pitfalls of Database Programming” の読書メモ。 Jaywalking 目的 ある属性について、複数の値を持たせる。 アンチパターン : カンマ区切りリスト カンマ区切りで複数の値を 1 つの列に納める。 例では、特定の製品についての担当者を複数設定するのにカンマ区切りで、担当者のアカウントIDを記述している。 create table products ( product_id integer, product_name varchar(1000), acount_id varchar(100), -- comma separated list -- ... ); insert into products (product_id, product_name, accou

  • PHP 公式マニュアルにおける SQL インジェクションと PDO の数値の型指定のサンプルコード

    PHP 公式マニュアルの SQL インジェクションのページには数値の扱い方がきちんと明記されている。 アプリケーションが、数値入力を期待している場合、データを is_numeric() で検証するか、 settype() により暗黙の型変換を行うか、 sprintf()により数値表現を使用することを検討してみてください。 サンプルコードも掲載されている。 settype($order, 'integer'); $query = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;"; // フォーマット文字列の%dに注意してください。%sを使用しても意味がありません。 $query = sprintf("SELECT id, name FROM products ORDER BY name LIMIT 2

    PHP 公式マニュアルにおける SQL インジェクションと PDO の数値の型指定のサンプルコード
    s_mori
    s_mori 2012/08/09
    PDO
  • SQLの暗黙の型変換はワナがいっぱい

    補足 この記事は旧徳丸浩の日記からの転載です。元URL、アーカイブはてなブックマーク1、はてなブックマーク2。 備忘のため転載いたしますが、この記事は2009年9月24日に公開されたもので、当時の徳丸の考えを示すものを、基的に内容を変更せずにそのまま転載するものです。 補足終わり このエントリでは、SQLにおいて「暗黙の型変換」を使うべきでない理由として、具体的な「ワナ」をいくつか紹介します。 数値項目に対するSQLインジェクション対策のまとめにて説明したように、RDBの数値型の列に対してSQLインジェクション対策をする方法として、以下の三種類が知られています。 バインド機構を用いる パラメータの数値としての妥当性確認を行う パラメータを文字列リテラルとしてエスケープする このうち、方法3を使うべきでない説明の補足です。具体的には、方法3には、「暗黙の型変換」が発生しますが、それが思わ

  • SQLとJSONをNode.js上で組み合わせた新言語「ql.io」をeBayが公開

    eBayが、JavaScriptアプリケーションからSQL文のような形式でデータベースへの問い合わせを記述できるDSL(ドメイン固有言語)のql.ioを発表。オープンソースとして公開しました。 現在、多くのWebアプリケーションが、バックエンドとのデータのやりとりにHTTPをベースにしたAPIを用いています。しかし、WebベースのAPIによってデータを取り出すのは、プログラマにとって実は手間のかかることです。 例えば、キーワードを入力すると関連する商品の名前、詳細、購入者の評価をユーザーに表示する、というWebアプリケーションでは、まずキーワードでデータベースを検索して商品IDを取得し、今度はその商品IDをキーにして名前や概要、評価の情報を取得する、といったように、APIを繰り返し呼び出す必要があります。 ql.ioはこうした内容をSQLのように分かりやすい記述で実現するだけでなく、複数の

    SQLとJSONをNode.js上で組み合わせた新言語「ql.io」をeBayが公開
  • インデックスの基礎知識

    ■ インデックスとは データベースの世界で、インデックス(索引)とはテーブルに格納されているデータを 高速に取り出す為の仕組みを意味します。 インデックスを適切に使用することによってSQL文の応答時間が劇的に改善 される可能性があります。 インデックスにはB-Treeインデックスをはじめ、ビットマップインデックス、 関数インデックスなどの種類がありますが、ここでは最も一般的に使われ、かつ ほとんどのDBMSでサポートされているB-Treeインデックスについて解説します。 ※ CREATE INDEX文でオプションを指定しない場合は通常B-Treeインデックスが 作成されます。 ■ B-Treeインデックスのしくみ B-Tree(Balanced Tree)インデックスは次のようなツリー状の構造になっています。 ツリーの先頭はヘッダブロックと呼ばれています。ヘッダブロックでは、キー値の 範囲

  • リレーショナル・データベースの世界

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • 1