並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 22 件 / 22件

新着順 人気順

外部キーの検索結果1 - 22 件 / 22件

タグ検索の該当結果が少ないため、タイトル検索結果を表示しています。

外部キーに関するエントリは22件あります。 databaseDB設計 などが関連タグです。 人気エントリには 『外部キー制約は何も考えずに適用するとよくない - かとじゅんの技術日誌』などがあります。
  • 外部キー制約は何も考えずに適用するとよくない - かとじゅんの技術日誌

    このブログが話題になってますね。制約を付けること自体はよいことだけど、無目的に適用すると害も生じると思います。 無目的という言い方はおかしいな…。外部キー制約をどのように使えばいいのか、逆にどんなときに使うとまずいのかを考えてみたいと思います。 tech.tabechoku.com 例えば、これ。外部キー制約はできるだけ付けるとか、何も考えずに付けるとよくないと思います。 外部キー制約は、可能な限りつけるようにしています。 DBが別れている場合、外部キーはもちろん貼れないのですが、そうでない場合はとにかく何も考えず貼っています。データベース設計の際に気をつけていること - 食べチョク開発者ブログ テーブル設計をシミュレーションする いいたいことの結論はこれ。以上終了なのですが、もう少しわかりやすく書いてみよう。 何も考えずに外部キーを貼るのは良くないな。トランザクション境界の外で結果整合性

      外部キー制約は何も考えずに適用するとよくない - かとじゅんの技術日誌
    • 僕たちは本当のSQLite3を何も知らない(柔軟なデータ型と外部キー制約の罠について) - give IT a try

      「えっ、SQLite3ってこんな仕様なの!?」と最近ビックリしたことを紹介します。 たとえばこんな2つのテーブルがあったとします。 CREATE TABLE blogs ( id int primary key, title varchar(32) ); CREATE TABLE comments ( id int primary key, content varchar(32), blog_id int, foreign key (blog_id) references blogs(id) ); ポイントはcommentsテーブルのblog_idにはblogs(id)への外部キー制約が貼ってあることです。 もちろん、blog_idもblogs(id)も、どちらもint型です。 で、以下のようなSQLを発行します(blog_idの値に注目)。 -- blogsにデータを追加 INSERT

        僕たちは本当のSQLite3を何も知らない(柔軟なデータ型と外部キー制約の罠について) - give IT a try
      • 外部キー制約が一切ないと何に困るのか?

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

          外部キー制約が一切ないと何に困るのか?
        • PlanetScaleとは何か、なぜ外部キー制約をサポートしていないのか

          PlanetScaleとは PlanetScaleはMySQLのマネージドサービスです。 内部の実装には元々YouTubeのために開発されたMySQLのクラスタリングシステムであるVitessが使用されています。 Vitessの開発に携わってらっしゃるSugu SougoumaraneさんがCTOとして在籍しており、スケーラブルなデータベースを構築するためのサービスとなっています。 すでにSlack, Square, GitHubなどの企業で採用されているそうです。 この記事ではPlanetScaleのどういった点が優れているのか、これまでMySQLが抱えていた問題点をどのように解決しているのかといったことをまとめます。 その中でタイトルにもつけましたが、なぜ外部キー制約をサポートしていないのかといった点も交えて説明します。 これまでのMySQLの問題点 大量のレコードが存在するテーブルの

            PlanetScaleとは何か、なぜ外部キー制約をサポートしていないのか
          • MySQL 8.0 vs 外部キー制約 vs ALTER TABLEでメタデータロック待ちになったら疑うこと

            TL;DR MySQL 8.0(細かくは8.0.4っぽい)とそれ以降は「外部キー制約を持っているテーブルにSELECTするとそのテーブルの親テーブルにもメタデータロック(MDL)を置くようになった」 MDLであるがゆえに foreign_key_checks をOFFにしようが 無効化はできない MySQL :: WL#6049: Meta-data locking for FOREIGN KEY tables WL#6049 “Meta-data locking for FOREIGN KEY tables” and WL#11059 · mysql/mysql-server@6626f76 これ以降にもいくつかコミットが続いている 論より証拠。 サンプルスキーマはこんなかんじ。 CREATE TABLE `item` ( `item_id` int NOT NULL, `registe

              MySQL 8.0 vs 外部キー制約 vs ALTER TABLEでメタデータロック待ちになったら疑うこと
            • 【アップデート情報】 BigQueryで主キーと外部キーが正式にサポートされるようになりました | DevelopersIO

              Google Cloudのデータエンジニアをしています、はんざわです。 先日のアップデートで主キーと外部キー正式にGAになりました。 BigQuery release notes とはいえ、大多数の人が想像するRDBの主キーや外部キーと挙動が違ったりする部分もあるので実際の検証も含めながら触っていきたいと思います。 できないこととできること できないこと 主キーと外部キーの制約は強制しない、つまりデフォルトでは重複もNULLも許容される。 (ユーザー側で制約に一致することを確認する必要がある)。 できること 結合のパフォーマンス大幅改善 さっそくテーブルを作ってみましょう。 主キーと外部キーの登録方法 例として、以下のようなテーブルで考えてみます。 color_table id color

                【アップデート情報】 BigQueryで主キーと外部キーが正式にサポートされるようになりました | DevelopersIO
              • BigQuery の主キーと外部キーで結合を最適化 | Google Cloud 公式ブログ

                ※この投稿は米国時間 2023 年 7 月 15 日に、Google Cloud blog に投稿されたものの抄訳です。 BigQuery は、完全にサーバーレスで費用対効果に優れたエンタープライズ データ ウェアハウスです。各種のクラウドで機能し、データに合わせたスケーリングも可能です。ユーザーデータは BigQuery テーブルに保存されます。すべてのテーブルは、列名、データ型、その他の情報を記述するスキーマによって定義されます。 このたび BigQuery に、強制適用されない主キー制約と外部キー制約が導入されました。この投稿では、強制適用されないキー制約と、それが BigQuery のクエリにどのようにメリットをもたらすのかについて詳細に説明します。 制約の定義CREATE TABLE ステートメントを使用してテーブルを作成する際に、テーブルに制約を定義できます。ALTER TAB

                  BigQuery の主キーと外部キーで結合を最適化 | Google Cloud 公式ブログ
                • PostgreSQLのNull許容外部キーの使い所について

                  はじめに こんにちは、経営管理クラウドを開発するログラスのエンジニアの@Yuiiitotoです。 会社全体で色々なアドベントカレンダーにお邪魔させていただいております。 今回は、PostgreSQLのAdvent Calendar 2021の1つの記事として出しています。 PostgreSQLのNull許容外部キーの使い所について はじめにいっておくと、弊社ログラスではNull許容外部キーについてはよく使っています。 使い所は基本的に 0..1対0..N の関係性のときです。 猫は野良猫がいるので飼い主がない場合があります。その場合、猫は飼い主IDを持っていません。 飼い主は猫を複数飼うことができます。また猫を飼っていない飼い主もいます。 このときcatsテーブルのowener_id(飼い主ID)をnullbleにすることで飼い主のいない猫(野良猫)を表現することが可能です。 この場合のテ

                    PostgreSQLのNull許容外部キーの使い所について
                  • MySQL 外部キー制約とインデックスに必要な知識 - LayerX エンジニアブログ

                    バクラク請求書 でリードエンジニアをしているSaaS事業部の @yyoshiki41(中川佳希)です! バクラクシリーズでは、経理向けSaaSに始まりコーポレートDXをサポートする複数プロダクトを提供しています。 サービスローンチから1年経過したこともあり、2021年12月から2022年1月は短い間に事業部として怒涛のリリースの日々でした。 LayerX インボイスから、バクラクへサービス名称を変更 1周年のインフォグラフィックの公開 TV CM の開始 サービス全体で変化はありましたが今後も変わらずプロダクト開発を通して、経理・コーポレートチームの仕事がバクラクになるようサポートしていきます! 今回の記事は、MySQL の外部キー制約とインデックスについてです。 Foreign Keys 多くの人が馴染みあると思いますが改めて整理すると、2つの役割を担っていると言えます。 複数のテーブル

                      MySQL 外部キー制約とインデックスに必要な知識 - LayerX エンジニアブログ
                    • Aurora(MySQL互換)で、外部キーが絡んだINSERT/UPDATEによるデッドロックが検知されない問題 - Qiita

                      各環境は上記の状態だったため Aurora独自の何かがあるのでは?と思い検証をしてみることに デッドロック発生後の対処 デッドロック発生時、mysqlコマンドでDBにつないで 原因となるクエリをKILLしてみたが解決せず リードレプリカをフェイルオーバーさせることで対応した 検証開始 デッドロックが起きていたテーブル群 offers offer_child_1 offer_child_2 documents document_offer_child_2 ※わかりやすいようにテーブル名は実際とは変えています スキーマ CREATE TABLE offers ( id bigint(8) AUTO_INCREMENT PRIMARY KEY, title text ); CREATE TABLE offer_child_1 ( id bigint(8) AUTO_INCREMENT PRIMA

                        Aurora(MySQL互換)で、外部キーが絡んだINSERT/UPDATEによるデッドロックが検知されない問題 - Qiita
                      • sqlite3で外部キー(foreignkey)を有効にする方法

                        sqlite3のデフォルトでは外部キー(foreign key)を使用できない。 (CREATE TABLEで、外部キーのあるテーブル自体は作成できるが、使用時にその外部キー制約が完全無視される。。。) 以下サンプルテーブル test2テーブルにtestテーブルのid列を参照する外部キーtest_id列を作成してみる。 サンプルテーブル CREATE TABLE test( id int primary key, name varchar(32) ); CREATE TABLE test2( id int primary key, name varchar(32), test_id int, foreign key (test_id) references test(id) ); test2テーブルに外部キー(test_id)は問題なく作成できるが、このままでは外部キーは有効になっていない

                        • MySQL の外部キーのため自動作成されたインデックスは不要になると自動で削除される

                          知らなかったのでメモ。 MySQL の外部キーは相当するカラムのインデックスが必要 必要なインデックスがない場合は外部キー作成時に自動でインデックスも作成される こうして自動で作成されたインデックスは、不要になった際に自動で drop される 不要になった際 = その外部キーをカバーできるような別のインデックスが追加された場合 MySQL :: MySQL 5.7 Reference Manual :: 1.7.3.2 FOREIGN KEY Constraints MySQL requires that foreign key columns be indexed; if you create a table with a foreign key constraint but no index on a given column, an index is created. MySQL :

                            MySQL の外部キーのため自動作成されたインデックスは不要になると自動で削除される
                          • 外部キー制約をかける時にMySQLはインデックスを暗黙的に作成するがPostgreSQLは作成しない -- ぺけみさお

                            概要 外部キー制約をかける時にMySQLはインデックスを暗黙的に作成しますがPostgreSQLは作成しません。この違いを知らないと、同じスキーマを作成したつもりであってもインデックス有無が異なるため、MySQLとPostgreSQLでパフォーマンスに大きな違いが生じるかも知れません。 前提ソフトウェア ソフトウェア バージョン 備考 MySQL 8.0.19 - PostgreSQL 12.2 - ドキュメントを確認する ドキュメントにもそのように書いてあります。現時点で一番新しいバージョンの日本語と英語のドキュメントを引用します。(ドキュメントが変更されていて、日本語と英語は一部対応していないところがあります) 余談ですがPostgreSQLのユーザに選択を委ねる姿勢の方が私は好きです。 https://dev.mysql.com/doc/refman/5.6/ja/create-ta

                            • 外部キー制約が使えない場合のRailsの実装方法 - エニグモ開発者ブログ

                              こんにちは、エンジニアの川本です。 主にBUYMAの決済・配送を担当しているチームでバックエンドの開発をしています。 この記事は Enigmo Advent Calendar 2023 の 20 日目の記事です。 個人開発でPlanetScaleというMySQL互換のサーバーレスデータベースを使用しているのですが、特筆すべき仕様として外部キーのサポートがありません。 planetscale.com 外部キー制約はDBレベルで強い整合性を担保できる便利な手段ですが、PlanetScaleではその機能が利用できないので、アプリケーションレベルで整合性を担保する必要があります。 MySQLの外部キーのオプションにはいくつか種類がありますが、これらが使えない場合にアプリケーション側ではどのように担保すればよいのでしょうか? 今回は、Railsを例にしてアプリケーション側でMySQLの外部キーに相当

                                外部キー制約が使えない場合のRailsの実装方法 - エニグモ開発者ブログ
                              • 外部キー制約と AWS Lambda と私 - エムスリーテックブログ

                                これは エムスリー Advent Calendar 2022 17 日目の記事です。 こんにちは、基盤開発チームの高島(id:rst76)です。 有名なボクサー、モハメド・アリの言葉に "It isn’t the mountains ahead to climb that wear you out; it’s the pebble in your shoe." というものがあるそうです。山に登るから疲れるのではなく靴の中に小石があるから疲れるんだ、という意味ですね。今日はそんな小石を取り除いた話をしたいと思います。 前提 課題 原因 まとめ 前提 多くのシステムには古いデータを削除する機能が備わっていると思います。エムスリーで運用している認証システムの 1 つにもありました。これは 1 日 1 回 AWS Lambda で実行しており、下図のような構成のテーブルに対して、子テーブル B,

                                  外部キー制約と AWS Lambda と私 - エムスリーテックブログ
                                • Rails 7: PostgreSQLの外部キー制約にdeferrableを指定可能になった(翻訳)|TechRacho by BPS株式会社

                                  データベースの外部キー制約は、参照整合性を強制します。これによって子レコードを作成する前に親レコードが存在しなければならないことを保証できるようになり、制約は各ステートメントの直後でただちに強制されます。 しかし、制約のdeferrableを変更すればこの動作を変更可能です。deferrableは、制約をただちにチェックするのではなく、トランザクションがコミットされるまでチェックを延期(defer)するという意味です。PostgreSQLは制約を延期可能なSET CONSTRAINTS機能をサポートしています。 Rails 7より前は、PostgreSQLでdeferrable制約を使うために生SQLを書く必要がありました。 変更前 # /db/migrate/20220322071034_add_foreign_key_to_reviews.rb add_foreign_key :rev

                                    Rails 7: PostgreSQLの外部キー制約にdeferrableを指定可能になった(翻訳)|TechRacho by BPS株式会社
                                  • 外部キーにインデックスは必要か?

                                    この記事では”外部キー制約を持つ”カラムに対してのインデックスの話をする。”被外部キー制約を持つ(つまり、被参照)”カラムに対してでないことに注意されたい。 被参照カラムはPRIMARY KEY制約, UNIQUE制約が必要なので、結果的にインデックスは自動で張られているので、今回の議論の対象にはしない。 A foreign key must reference columns that either are a primary key or form a unique constraint. https://www.postgresql.org/docs/current/ddl-constraints.html#DDL-CONSTRAINTS-FK ※タイトルがぱっと見で分かりづらい はじめに このトピックで記事を書こうと思ったきっかけは、業務でMySQLを使っていて、個人的にPostg

                                      外部キーにインデックスは必要か?
                                    • MySQL | 外部キー制約の設定と動作確認 - わくわくBank

                                      「MySQLで外部キー制約を設定する方法」「外部キー制約のオプション設定(RESTRICTCASCADESET NULLNO ACTION)による動作の違い」について解説します。 外部キー制約の実現方法 外部キー制約を実現する方法は2つあります。 データベース上で外部キー制約を設定 アプリケーションで外部キー制約の制限のもと動作するように開発 MySQLのデータベースエンジンであるMyISAMは、外部キー制約をサポートしていません。そのため、アプリケーションで外部キー制約を考慮する必要がありました。しかし、機能拡張などしていくうちに、制限のことが忘れ去られることが多く、データの整合性が崩れるといったことが起こりえます。 アプリケーションだけでデータの整合性を維持しようとすると、後々、 何かしらのトラブルが発生する可能性が高まること データの整合性が維持されているかを確認するための作業が必要

                                        MySQL | 外部キー制約の設定と動作確認 - わくわくBank
                                      • 外部キー制約でデッドロックに引っかかった話

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

                                          外部キー制約でデッドロックに引っかかった話
                                        • MySQL 外部キー制約のデッドロック | 優技録

                                          外部キー(FOREIGN KEY)制約を利用している場合、 子テーブルに追加、更新や削除を行う時は、必ず親テーブルの対象のidに対して排他ロックを行ってから、更新や削除、追加を行う。 親テーブルの該当idに対して排他ロックを取る 子テーブルの該当行に対して追加、更新、削除等を行う これならロックは起こらない。 外部キー制約を利用していると、 子テーブルにINSERT, UPDATE, DELETEを行うと親に共有ロックがかかる 外部キー制約を利用している子テーブルにINSERT, UPDATE, DELETEを行う場合は、 排他ロック「FOR UPDATE」をかけてからINSERT, UPDATE, DELETEを行う 共有ロック→排他ロックはデッドロックが起こる原因になる。外部キー制約を利用しているテーブルをSELECT以外で操作する場合は、必ず排他ロックを行ってから、更新や削除、追加を

                                          • FOREIGN KEY制約(外部キー制約を設定する)

                                            CREATE TABLE [ IF NOT EXISTS ] table_name ( column_name1 data_type1, column_name2 data_type2, [... ,] FOREIGN KEY ( column_name1 [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ] ) 外部キー制約を設定するカラム( column_name1 )と、参照するテーブル( reftable )と参照するカラム( refcolumn )を設定します。 FOREIGN KEY 制約によって参照されるカラム( refcolumn )には UNIQUE 制約または PRIMARY KEY 制約が設定されている必要があります。 -- -- それでは実際に試してみます。今回は参照される側のテーブルとして depart

                                              FOREIGN KEY制約(外部キー制約を設定する)
                                            • 【Rails】後からカラムを追加して外部キーを張る際に、add_referenceを使う場合の注意点。 - Qiita

                                              【Rails】後からカラムを追加して外部キーを張る際に、add_referenceを使う場合の注意点。RubyRails 始めに 忘れがちになるため、備忘録。 環境 Ruby 2.6.5 Rails 5.2.4.2 アソシエーション対象 投稿用のpostsテーブルと、ユーザーのusersテーブルを関連付け。 postsテーブルに外部キー制約を張ったuser_idカラムを追加する カラム追加用のマイグレーションを作成 1.マイグレーション作成

                                                【Rails】後からカラムを追加して外部キーを張る際に、add_referenceを使う場合の注意点。 - Qiita
                                              1

                                              新着記事