現代のリレーショナルクエリ言語に求められる機能

2026/08/23 3:38

現代のリレーショナルクエリ言語に求められる機能

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

標準 SQL は強力な基盤的な概念を有しているにもかかわらず、C や Python のような現代の嗜好に比べて不器用で、古臭い CL 依存の構文に依存する点でしばしば批判されています。これは、Rust が ML と Prolog の要素を取り入れて現代の設計に影響を与えたようにです。核心的な主張は、SQL を近代化するために関数型プログラミング技術——例えば区別付きユニオン、堅牢な型システム、和型(sum types)、パターンマッチング——を統合し、コードの冗長性を削減するとともにエラーを防ぐことを支持しています。現在の実装ではパサーが弱いという弱点があり、エラーの位置を不明瞭にすることがあります。例えば MySQL は問題の詳細を明確に指定するのを失敗することがありますが、Oracle は入力エラーを成功裏に報告します。さらに、SQL の宣言的な性質は、1980 年代のプロシージャルプログラミング向けに最適化された標準ライブラリのデフォルトと矛盾し、可変な状態の論理やストアドプロシージャの使用を引き起こします。多くの方言が遅延評価などの関数型パラダイムをサポートするライブラリを欠いている一方で、Postgres や Oracle においてユーザ定義タイプを可能にするといった最近の進歩は、より良いデータモデリングへの有望な道を開きます。今後、業界は遅延評価、改善されたエラー報告ツール、非専門家向けの明確なクエリ計画などの機能を採用すべきです。この変化は、可変な状態の論理によるバグの減少、そして Rust、F#、Erlang、Elixir などの言語の影響を受けたより信頼性の高い設計など、大きな恩恵をもたらすことを約束します。究極的には、これらの関数型パターンを受け入れることは、データベースの世界をプロシージャルな過去から遠ざけ、現代的で堅牢なシステムへと導く可能性があります。

本文

NoSQL の広がりへの対抗:より現代的なクエリ言語の提言

長年にわたり保管してきたこの草案を再検討し改訂した理由は、新しいクエリ言語(例:Acadia)に関する最近の議論がきっかけとなったからである。著者は以下に述べる通り、SQL が背後にある理念には優れているにもかかわらず実装が時代遅れな点への不満と、プログラマにとって扱いやすい関係型データ処理のための新たなアプローチを提案する。

背景と動機

  • 現状の課題
    • SQL は強力な言語だが、実装が頻繁に不器用で時代遅れである。
    • これにより NoSQL が広がる要因の一つとなっている。
    • SQL の理念を参考にした進化系言語こそが、関係型データを扱いやすい鍵となるはずである。
  • 著者の経験背景
    • 主に MySQLDb2 を使用。
    • その他、SQLiteSQL ServerOraclePostgreSQL も経験あり(慣れ順)。

より優れた構文

開発者が PL/I に基づいた古風な構文に嫌気が差すことはよくあることである。現代のプログラミング言語は C や Python などの美学を取り入れる傾向にある。

  • 目指すべき方向性
    • 構文は C、Python のような現代的な美学を採用。
    • Rust などが示唆するように、ML や Prolog の影響も取り入れつつあるべき。
  • エラーハンドリングの向上
    • 現在の MySQL パーサ は、問題の所在やエラーの種類を特定できず、「DELIMITER」などの構文異常しか検知しない(苦痛)。
    • 逆に Oracle のような既存実装は、期待する内容を明示することで優れたエラー報告を実現している。
  • 言語の影響源
    • これらのアイデアは F# (ML ファミリー)、Erlang (Prolog 的)、Elixir から影響を受けている可能性が高い。

関数型プログラミングへの親和性

SQL の最強の武器は「手動ループではなく、何を実現したいかを書く(4GL 的特性)」にあるが、多くの実装は 1980 年代の手順型スタイルに偏っている。

  • 標準ライブラリの貧弱さ
    • Haskell などの関数型パラダイム(遅延評価など)と親和性が高いはずだが、標準ライブラリは貧弱。
    • ストアドプロシージャのサポートが主流になりがちだが、これは本質的に手順型であり SQL の宣言的性質と逆行する。
  • デフォルト設定の重要性
    • ユーザーも言語や標準ライブラリによって「状態変化(カーソル)」「プロシージャ優先」といったスタイルを模倣しがちになる。
    • これらを根本から変更するには、デフォルトで関数型アプローチを採用する必要がある

より透明なクエリプランナ

  • 最適化とリスク
    • 強力なコンパイラでコードを最適化できるのは利点だが、わずかなミスでコスト増大の危険性がある。
  • ブラックボックスの問題
    • SQL に詳しくない限り、クエリプランナは暗号文のように見える(特に MySQL の
      EXPLAIN
      ツール
      は劣悪)。
    • 現在の弱点であり、コンピューターサイエンティストが学んできた分野でもある。

より優れたユーザー定義型 (UDT)

ドメインを通じてユーザー定義データ型の指定は SQL 規格のオプションだが、多くの実装で機能が制限されている。

  • 現状
    • 通常は範囲やチェック演算子の糖衣包装程度に留まる。
    • PostgreSQL が柔軟なサポートを提供し、最近 Oracle も追随した模様。
  • 理論的背景
    • Codd の『The Relational Model』で扱われている概念であり、RDBMS の基礎文献である。
    • PostgreSQL は Ingres の遺産(QUEL を使用)を引き継いでおり、Codd のビジョンに近い実装を選択していると言える。

和型、区別結合型、そしてパターンマッチング

現代の関数型技術(スタックフレーム情報の返却など)を SQL スキーマに適用する例を示す。IBM i システムの管理情報へのアプローチが参考となる。

  • 既存の問題点

    • 従来のスキーマでは、排他的な情報を表現するために多数の
      NULL
      値が必要になる(文字列フィールドとして機能)。
    • スキーマ設計の不備と、一度に一つのテーブルでのみ結果を返すという制約が起因する。
  • 解決策:パターンマッチングによる SQL

    • 以下に示すのは形式的な例であるが、より簡潔でミスに強いクエリ写作が可能となる。
// 簡略化のため要素を省略(型は外部から宣言可能)
type MachineInterfaceInfo = {
    ActivationGroup: long;
    ASP: long;
    Library: string;
}

// IBM i のプログラムモデル
type FrameType =
    | ILE { MachineInterfaceInfo | ServiceProgram: string; Module: string; }
    | OPM { MachineInterfaceInfo | Program: string; }
    | AIX { Bitness: enum(32 | 64); LibArchive: Option(string); Module: string, Syscall: bool; }
    | Java { MethodType: enum(DirectExecution | Glue | Interp | JIT | MMI); ClassName: string; Signature: Option(string); }

table Frame = {
    ThreadID: long;
    FrameType: FrameType;
    Function: Option(string);
}

// パターンマッチングを用いたフィルタリング
select Function 
from StackInfo("1234/JOB/5678") 
where AIX { Bitness: 64 } = FrameType;

// OPM の場合
select Function 
from StackInfo("1234/JOB/5678") 
where MachineInterfaceInfo { Library: "QSYS" } = FrameType;
  • 視覚化への利点
    • 互いに排他的な列のセットを統合可能。
    • スクロール量が大幅に減少し、サブカラムとして表示やタイプに応じた文字列表示が可能になる。

複数の型に対する一致を行う外鍵

Software
Version
Download
という異なる型のオブジェクトに共通する画像(
Picture
)を管理する場合の構想。通常は Many-to-Many テーブルを作成するが、それを冗長化させることなく実装できる。

  • 伝統的なアプローチ
    • 各対象ごとに
      SoftwarePicture
      VersionPicture
      など多くのテーブルを作成し、重複した構造を持つ。
  • 提案されたアプローチ:区別結合型 (Discriminated Union) を用いた Many-to-Many テーブル
    • 外鍵が同一の型 (
      key relates to
      ) を持つことで、異なるオブジェクト種別への一致を一元管理可能。
table ObjectPictures = {
    // 外鍵は対象となる型のいずれかと同一の型を持つと仮定される
    PictureID: key relates to (Picture.PictureID);
    ObjectID: key relates to (Software.SoftwareID | Version.VersionID | Download.DownloadID);
}

// インサート例:ダウンロードオブジェクトに画像を関連付け
insert into ObjectPictures (PictureID, ObjectID) 
values (0x1234, DownloadID { 0x1234 });

// ソフトウェアオブジェクトへの関連付け
insert into ObjectPictures (PictureID, ObjectID) 
values (0x1234, SoftwareID { 0x1234 });

// 画像を所有するすべてのオブジェクトを取得(型による区別あり)
select SoftwareID { software_id } from ObjectPictures where PictureID = 0x1234;

// ダウンロードオブジェクトへの関連付けを特定
select PictureID from ObjectPictures where ObjectID = DownloadID { 0x1234 };

同じ日のほかのニュース

一覧に戻る →

2026/08/24 4:23

従業員エンジニアとして課題を見出す方法

## Japanese Translation: 上級エンジニアは、特定のタスクの実行から、組織的なパターンや根本原因を独立して特定することへと焦点の本質的な転換を行う必要があります。初期の依頼に対して直ちに行動するのではなく、「スポンジ」のように日常的な雑音を吸収し、表面的な症状に対して真のニーズを検証すべきです。このアプローチでは、即座の解決策への要求を無視して workflows(ワークフロー)を実際に観察することが必要であり、そのような忍耐は低価値な一回限りの依頼が自然にフィルタリングされることを可能にし、複数の独立したチームで見られる反復的なパターンを明らかにすることで、より大きな戦略的投資を正当化します。従来の即座の行動という期待とは異なり、この戦略は、複数の部門の問題を目撃してきたクロスファンクショナルな専門家と相談し、共通の問題の形状をより速く定義することに依存しています。 実装前に、チームは捨てられるプロトタイプを使用して仮説を検証し、不確かな概念を直ちにプレッシャーテストします。価値が不足しているか技術的な障壁に直面するアイデアは、厳格な自己説得および公式なレビューを通じて見送られます。最終的に、この移行により、個々のエンジニアがすべてのプロジェクトを所有することなく、信頼性と広範な対話を通じて組織のロードマップに影響を与えることが可能になります。共通のソリューションの形状を先に定義することで、チームは単に特定の機能のギャップを埋めるのではなく、組織の中核的な問題を解決するマルチユースケースのソリューションを提供できます。

2026/08/24 7:41

私が所有するものすべて

## 日本語訳: 要約:インスタ360 Link Web カメラ、ASUS ROG Swift モニター、Shure MV7 マイク、Elgato Cam Link 4K、Elgato Key Light Mini の 5 つの一般的な家電製品が、高度な AI ツールを用いて 2 週間以内の期間にリバースエンジニアリングされ、重大なセキュリティ脆弱性が明らかとなりました。最も緊急の発見事項は、弱い完全性チェック(例:単純なチェクサムまたは MD5 ハッシュ)、保護されていない更新パス、ウェブインターフェースまたはベンダー固有のプロトコルを通じてアクセス可能で、平凡な認証により守られているコマンドシェルなどです。例えば、Insta360 Link Web カメラは任意のファームウェアの書き込みが可能であり、アクティビティ LED などの安全性機能が無効化できます;Shure MV7 マイクは WebHID プレーンテキストシェルを通じて遠隔でのメモリアドレッシングおよび LED 制御を可能にし、これは単純な文字列比較による認証で守られています;Elgato Key Light Mini は UART への HTTP POST を通じて署名のないファームウェア更新を受け入れるように巧妙に操作され、これにより署名検証が無効化されます。研究チームはハードウェアコストの理由から修正されたファームウェアをフラッシュしなかったものの、 exploit の容易さの実証は、周辺機器が安全であると信じているユーザーにとって深刻なリスクを示しています。業界リーダーは即座に完全性メカニズムの強化、ベンダー固有コマンドの分離、そして無許可の改変や IoT ラインナップにおける遠隔乗っ取りを防ぐための堅牢な認証の実装を推進する必要があります。

2026/08/24 4:29

ドメインがメールプロバイダーと見なされる問題について(Google Workspace)(2025 年)

## Japanese Translation: 2026 年 8 月時点で、Google Workspace は、正当なドメイン登録を誤ってブロックしてしまう未解決の不具合を抱えています。この問題は、サインアップページの検証関数に存在する誤った正則表現パターンに起因しており、有効なドメインを保留済みメールプロバイダーとして誤分類してしまいます。具体的には、`web\\..*` というパターンが "web." で始まるすべてのドメイン(プレミアム TLD の `.one` も含む)をフラグ付けし、`me\\..*` というパターンは "me" で接頭されているドメイン(ウクライナ経済省の `me.gov.ua` など)をブロックします。また、検証リストには文脈が明確でない `alice\\..*` というエントリも含まれています。この欠陥の深刻さは、ウクライナ経済省のドメインの拒否といった高プロファイルな事例によって示されています。調査(エンジニアによるビデオレビューを含む)が行われたにもかかわらず、ユーザーには根本原因は説明されておらず、サポート担当者からはブラウザやデバイスを切り替えるような効果がない回避策が最初に推奨され、その後別の企業ドメインを使用することへの勧告に変わりました。デバッグ機能を通じてフロントエンドの検証機能を無効化するとユーザーがサインアップを進められ、この問題はこれらの破綻したパターンに限定されていることが確認されます。Google が問題のある正則表現エントリを検証配列から取り除くまで、影響を受けた組織はオンボーディングにおける継続的な障壁に直面し、代替メールプロバイダーへの依存か複雑な回避策の使用を余儀なくされます。この持続的な欠陥は、業務の継続性を阻害し、プラットフォームがドメイン所有権を正確に検証する能力に対する信頼を損なっています。

現代のリレーショナルクエリ言語に求められる機能 | そっか~ニュース