タグ

sqlに関するfbisのブックマーク (43)

  • 【ER図】カーディナリティ「必ず1」「1つだけ」と「1」の違い【テーブル設計】 - Qiita

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

    【ER図】カーディナリティ「必ず1」「1つだけ」と「1」の違い【テーブル設計】 - Qiita
    fbis
    fbis 2025/02/10
  • ER図とは?書き方やテクニックをわかりやすく解説

    ER図(Entity Relationship Diagram)とはデータベース設計における代表的な設計図のことです。 システムを設計する手法としては他にもUMLなどの技法がありますが、ER図はDOA(データ中心アプローチ)の技法であり、作成したER図がそのまま物理データベース上に変換できることから、データベース設計手法におけるデファクトスタンダードとなっています。 大規模なシステム開発においてはER図は必要不可欠です。そこで、これからはじめてER図を書くという方向けに、ER図の概要や書き方、テクニックなどについてご紹介します。 ER図のEはエンティティ(Entity)の略で、Rはリレーションシップ(Relationship)の略です。つまりER図は「エンティティ=モノ」と「リレーションシップ=関係」の組み合わせでシステムのデータやデータ間の処理構造を設計します。例として「顧客が商品を注文

    ER図とは?書き方やテクニックをわかりやすく解説
  • 極端な例で確認する SQL Server のストアドプロシージャのリコンパイル - Qiita

    SQL Server のクエリの実行方法として ストアドプロシージャ を使用することができます。 ストアドプロシージャを使用することのメリットとしては、次のような内容があります。 アプリケーションから SQL Server に送信されるテキストの削減によるトラフィックの効率化 クエリのパラメーター化による、SQL インジェクションの保護 コードの再利用性の向上 クエリコンパイルの削減によるパフォーマンスの向上 投稿では「4.」について、極端な例を題材にして、ストアドプロシージャのリコンパイルについてみていきたいと思います。 コンパイルとリコンパイル ストアドプロシージャの実行時に、実行プランが作成されるタイミングとしては、「コンパイル」「リコンパイル」の 2 種類のイベントがあります。 コンパイル コンパイルは、ストアドプロシージャの実行プランが「メモリ上にキャッシュされていない場合」に

    極端な例で確認する SQL Server のストアドプロシージャのリコンパイル - Qiita
    fbis
    fbis 2024/12/19
  • SQL Server のデータパーティションについて - Qiita

    データパーティションとは データパーティションとは、データの格納場所を分割することができる機能です。 1つのテーブルを日付の範囲などで、複数に行分割することができます。 パーティション化することのメリットとは 行を分割することによって、アクセスを迅速かつ効率的に行うことができます。 例えば、過去10年間分の膨大なデータを保持しているテーブルがあったとします。 実際によくアクセスするのは直近2年くらい、といった場合に、年で分割しておくと、アクセスを必要なデータのみにあらかじめ絞る事が出来るので、処理を効率化することができます。 実態は分割されていても理論的には1つのテーブルに見えているので、クエリを書く側はパーティション化されている事を意識することなく使用することができます。 パーティション化していない場合 パーティション化していれば、効率よくデータにアクセスできる 実際にパーティションを設

    SQL Server のデータパーティションについて - Qiita
  • T-SQL 入門 - SQL Server 入門

    T-SQL (Transact-SQL) とは Microsoft と Sybase 開発した、スタンダードの SQL (Structured Query Languag) を拡張した言語で、Microsoft SQL Server で使われています。 制御フローの言語や、ローカル変数、文字列・日付・数値処理等のファンクション、DELETE や UPATE ステートメントの文法等が拡張されています。 データの取得・挿入・更新・削除と、テーブルの作成・変更・削除、ファンクションやストアド プロシージャの作成等、Microsoft SQL Server を使って開発するのに必要な T-SQL の書き方やポイントをご紹介します。 SQL の基 - SELECT 文 JOIN (結合) を使いこなそう T-SQL でテーブルへデータの挿入・更新・削除 T-SQL でテーブルの作成・変更・削除 よ

    T-SQL 入門 - SQL Server 入門
  • Aurora MySQL 2 の EOS に備えて DB のバージョンアップテストを行う - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? こんにちは。 投稿では、Aurora MySQL 2 の EOS と Aurora MySQL 3 へのバージョンアップについての情報を提供するとともに、SQL テストツールを使って、バージョンアップテストを効率化する方法を紹介します。 はじめに いよいよ Amazon Aurora MySQL 2 の EOS ( end of support、サポート終了 ) が2024年10月にやってきます!※余談ですが、EOL ( end of life ) と言う場合もあります。 移行 ( バージョンアップ ) の準備は進んでいますか? また

    Aurora MySQL 2 の EOS に備えて DB のバージョンアップテストを行う - Qiita
  • INSERT...SELETC でauto_increment値が飛ぶ話 - amamanamam

    環境 CREATE TABLE `t2` ( `id` int NOT NULL, `id2` int NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`), KEY `id2` (`id2`) ) mysql> select version(); +--------------+ | version() | +--------------+ | 8.0.28-debug | +--------------+ 1 row in set (0.00 sec) mysql> select @@auto_increment_increment; +----------------------------+ | @@auto_increment_increment | +----------------------------+ | 1 | +----------

    INSERT...SELETC でauto_increment値が飛ぶ話 - amamanamam
    fbis
    fbis 2024/02/28
  • 【Go】新しいORM「Bun」を使ってみる(MySQL)

    はじめに Goの新しいORMを見かけたので、使ってみました。 今回はCRUDだけです。 「Bun」とは Bunは、Go用のSQLファーストのデータベースクライアントです。SQLファーストとは、ほとんどのSQLクエリを自動的にBun式にコンパイルでき、Bun式はSQLクエリのように見えることを意味します。 Bunの目的は、古き良きSQLを使用してクエリを記述できるようにし、結果を一般的なGo型(構造体、マップ、スライス、スカラー)にスキャンできるようにすることです。 らしいです。 ※公式より引用 GORMよりも早いみたいです。 Bunの良いところは公式にPlayGroundがあり、そこにSQL文を貼り付けると自動的にBunのコードに変換してくれるところが素晴らしい!(ただし取得のみ) サブクエリとかJoinしまくりの複雑な取得も一発で解決します!!(これは当に凄い!) 環境 go 1.17

    【Go】新しいORM「Bun」を使ってみる(MySQL)
    fbis
    fbis 2023/12/12
  • Gormにおける「仕様通り」なSQLインジェクションの恐れのある実装についての注意喚起 - ANDPAD Tech Blog

    ANDPADボードチームの原田(tomtwinkle)です。 Node.jsの mysqljs/mysql の仕様に起因するSQLインジェクションが話題に上がっていたので、それGolangORMであるGormでも同じような「仕様」があるよ! という注意喚起の意味も込めて筆を執りました。 ※ 2022/02/21追記 コードレビューを自動化して指摘してもらう記事を公開しました! tech.andpad.co.jp Node.jsのMySQLパッケージにおけるエスケープ処理だけでは防げない「隠れた」SQLインジェクション | 株式会社Flatt Security TL;DR GormのQuery Conditions関数に関する危険な仕様 対策 締め TL;DR GormのConditions関数(Find, First, Delete...)を使用する際、第2引数の値にStringを引き渡

    Gormにおける「仕様通り」なSQLインジェクションの恐れのある実装についての注意喚起 - ANDPAD Tech Blog
    fbis
    fbis 2023/10/27
  • GoでSQLの複雑なクエリのテストを書いてみた - ZOZO TECH BLOG

    はじめに こんにちは。ブランドソリューション開発部FAANSバックエンドブロックの佐野です。普段はサーバーサイドエンジニアとして、FAANSのバックエンドシステムを開発しています。 FAANSとは、弊社が2022年8月に正式ローンチした、アパレル店舗で働くショップスタッフの販売サポートツールです。例えば、コーディネート投稿機能や成果確認機能などを備えています。投稿されたコーディネートはZOZOTOWNやWEAR、Yahoo!ショッピング、ブランド様のECサイトへの連携が可能です。成果確認機能では、投稿されたコーディネート経由のEC売上やコーディネート閲覧数などの成果を可視化しています。 記事では、成果データの集計処理におけるBigQueryのクエリ実行処理のユニットテストをGoで実装した取り組みと、その際の工夫についてご紹介します。 目次 はじめに 目次 成果データの集計処理とは 抱え

    GoでSQLの複雑なクエリのテストを書いてみた - ZOZO TECH BLOG
    fbis
    fbis 2023/10/10
  • 【SQL】グループごとに最大の値を持つレコードを取得する方法3選

    普通に考えて、スコアとか、他の値も取りたいですよね。 group byしちゃうと取れないので、元のテーブルにjoinして取得しましょう。 select user_scores.* from user_scores inner join ( select user_id, max(created_at) created_at from user_scores group by user_id ) t1 on user_scores.user_id = t1.user_id and user_scores.created_at = t1.created_at ; こうなりますね。 usersテーブルにjoinしてscoreを取りたいよ〜という場合は、こうなります。 select users.*, latest_scores.score from users inner join ( selec

    【SQL】グループごとに最大の値を持つレコードを取得する方法3選
    fbis
    fbis 2023/09/12
  • ドメインロジックとSQL - Martin Fowler's Bliki (ja)

    以下の文章は、Martin Fowler による Domain Logic and SQLの日語訳である。 データベース指向ソフトウェア開発者とメモリ上(in-memory)アプリケーションソフトウェア開発者との間のギャップは、ここ数十年、徐々に広がってきている。このギャップが原因で、データベースの機能(SQLやストアドプロシージャ)をどのように扱えばよいのかという議論が数多く巻き起こっている。ここでは、ビジネスロジックを SQL に置くべきか、それともメモリ上のコードに置くべきかといった問題について、主にパフォーマンスと更新性の観点から考察を行う。考察には簡単な例を使うが、SQL クエリはしっかりとしたもの(rich SQL queries)を用いるので悪しからず。 エンタープライズアプリケーション(訳注:以下、EA)構築に関する(私の近著『P of EAA』など)を読むと、ロジック

    fbis
    fbis 2022/06/06
  • SQLで高速化を考えた時にできるテクニック・コツをまとめて紹介! | ポテパンスタイル

    SQLを高速化するコツ・テクニック ここでは、SQLを高速化するための方法について次の内容を解説します。 キーワードは大文字を使う カラムの演算はしない サブクエリの引数は「EXISTS述語」を使う 「BETWEEN」は基的に使う必要なし EXISTS述語のサブクエリ内では「SELECT *」を使う 極値関数(MAX / MIN)でインデックスを活用する 行数を数えるときは「COUNT(列名)」を使う 「GROUP BY句」でインデックスを活用する 「ORDER BY句」でインデックスを活用する UNION、INTERSECT、EXCEPT には「ALL」を付ける 実はインデックスが使用されていない 行ポインタによるアクセスが最速 ワイルドカードは使わない カラム番号は使わない テーブルに別名をつける 暗黙の型変換は回避する IN述語の引数は「最もありそうなキー」を左に記述する 1つずつ

    fbis
    fbis 2022/05/13
  • 指定列のトップn件を表示する(RANK,ROW_NUMBER関数) | SSJ Tech Lab

    2016-06-15タイトルを変更、DBA_USERSを順番に並べる例を追加 2016-06-10記事公開 列データの大きい、または小さい順の最初の数件を出力する場合に使用できる関数について説明します。 データの順番に番号の付与が可能な関数を使用することで、指定した件数に絞る事が出来ます。 以下DBA_USERSを並び替えた例です。Sから始まるユーザ名をACCOUNT_STATUS毎に、USERNAMEのアルファベットが若い順の番号を付与しています。 ACCOUNT_STATUS毎に上位5件を出力しています。 SQL> set pages 1000 line 120 trim on SQL> column USERNAME format a25 SQL> select * 2 from ( 3 select USERNAME 4 , ACCOUNT_STATUS 5 -- ACCOUNT_

    fbis
    fbis 2021/09/27
  • ORDER BY を指定しない時 / SELECT結果表示並び順 の法則性

    SQLの仕様上SELECTで取得できる列の並びが保証されているのはORDER BYが指定されている場合のみです。指定されていない場合の挙動は仕様には定義されていないので、実装依存となります。 そこで実装側を考えると、一定の並びを保証するということはその通りに並び替えるコストが生じることになりますので、ORDER BYを指定しないというのは利用者からすれば余計な処理はするなという意思表示でもあります。従って多くの実装ではORDER BYが指定されない場合は特別に並び替えをしません。 したがって、 指定しない場合は、どういう基準で、並び順を決定しているのでしょうか? という疑問への答えは、「並び順を決定していない」となります。 実際に列の順番がどうなるかはストレージ上の並びかもしれませんしインデックス順かもしれません。実行計画によっても変わるでしょうからエンジンのバージョンにって変わるのも当然

    ORDER BY を指定しない時 / SELECT結果表示並び順 の法則性
    fbis
    fbis 2021/09/10
  • 複数のテーブルに対して多対一で紐づくテーブルの設計アプローチ|スパイスファクトリー株式会社

    今回は、あまり見かけないようで意外と必要になる「複数のテーブルに対して多対一で紐づくテーブル」の設計について、4つのアプローチをご紹介します。 ポリモーフィック関連、複数の関連テーブル、親テーブルの作成方法や分割。 また、どの方法を用いて設計を行うかの判断基準も解説します。 弊社スパイスファクトリーでは設計において豊富な実績があります。 弊社の概要やサービスプラン、過去の導入実績などをまとめた資料をご用意しました。気になる方はこちらからダウンロードしてください。 どのようなケース? あるテーブルが複数のテーブルのいずれかに対して、自身が多、紐付き先が一で関連する場合のテーブル設計です。 例えば、「記事」と「画像」を投稿できるようなSNSを想定します。 この時、閲覧者が投稿された「記事」と「画像」のどちらにも「コメント」をつけることができる機能があったとします。 このような場合に、どのような

    複数のテーブルに対して多対一で紐づくテーブルの設計アプローチ|スパイスファクトリー株式会社
    fbis
    fbis 2021/07/21
  • 決済システムの残高管理周りの DB 設計と戦略 - カンム テックブログ

    エンジニアの佐野です。今日はカンムの決済システムでユーザの残高管理をどうやっているかについて書きます。 カンムの製品であるバンドルカードはプリペイド方式のカードです。ユーザによる入金、店舗での利用、運営事由の操作などによりユーザの残高が増減します。このような残高の管理について単純に考えると user_id と balance と updated_at あたりをもったテーブルを用意して balance と updated_at を更新していく方法があるかもしれません。しかしながらカンムでは残高を管理するテーブルを持たず、これらイベントの履歴のみで残高を管理しています。以下、記事ではこれらユーザの残高が増減するイベントのことをトランザクションと呼びます。ここでは DB の Transaction Processing を意味しません。 記事のポイントは 残高を管理をするテーブルは作らず、ト

    決済システムの残高管理周りの DB 設計と戦略 - カンム テックブログ
    fbis
    fbis 2021/07/04
  • データベースを遅くするための8つの方法

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

    データベースを遅くするための8つの方法
  • A5:SQL Mk-2 - フリーのSQLクライアント/ER図作成ソフト (松原正和)

    特徴・機能 様々なデータベースへの接続 Oracle Database へはOCI接続(オラクルクライアント経由)、直接接続(オラクルクライアント不要)で接続出来ます。 PostgreSQL, MySQLへは直接接続(クライアントライブラリ不要)で接続出来ます。 Microsoft SQL Server へは NativeClient 経由で接続できます。 それ以外のデータベースへはADO(OLE DB)または、ODBCで接続出来ます。 SQL入力支援機能 Ctrl+SpaceでSQL文を解析しテーブル名やテーブルカラム名の入力補完が行えます。 共通表式や副照会も解析する強力な機能です。 AIアシスタント機能 外部AIサービス(OpenAI ChatGPT, Google Gemini, Anthoropic Claude, Microsoft Azure OpenAI, Ollama)の

    fbis
    fbis 2019/10/11
  • 分析SQLのコーディングスタイル - クックパッド開発者ブログ

    SQL、書いてますか? こと大規模データ処理の分野においてはSQLはもはや標準インターフェイスであり、 分析やらバッチやらに関わっている皆様は日々大量のSQLクエリーを生産していることと思います。 そこでちょっと気になるのが、 SQLのコーディングスタイルってどうするのが一般的なんだっけ……? という点です。 イマドキはSQLなんてO/R mapperに吐かせることが多いからなのか、 それともコードを広い範囲で共有することがそもそもないからか、 SQLのコーディングスタイルについて見聞きすることは他のプログラミング言語に比べるとだいぶ少なく、 いまいち決定版と言えるスタイルがないなと感じています。 そんなわけで日は、SQLのコーディングスタイルについての意識を活発化させるべく、 クックパッドでわたし(青木)が使っているコーディングスタイルから特徴的な点を紹介したいと思います。 特に、分析

    分析SQLのコーディングスタイル - クックパッド開発者ブログ