```SQL 国际象棋```
Chess in SQL

原始链接: https://www.dbpro.app/blog/chess-in-pure-sql

本文演示了如何在SQL中构建一个完全可玩、功能齐全的国际象棋棋盘——无需JavaScript或任何框架。核心思想是将8x8棋盘表示为一个表,然后在`SELECT`语句中使用条件聚合将行“透视”为列。这种巧妙的方法将数据转换为可视网格,从而在棋盘上显示棋子。 移动棋子通过简单的`UPDATE`语句实现:从原始位置删除棋子,然后将其插入到新位置。作者通过重现保罗·莫菲和布伦瑞克公爵之间著名的“歌剧棋局”,一步一步地使用纯SQL命令来展示这一点。 该项目突出了SQL超越典型数据存储和检索的惊人表达能力,证明它可以处理像棋盘这样的复杂可视化。这种技术不仅限于国际象棋;它还可以应用于任何基于网格的数据表示,例如日历或热图。

## SQL 中的国际象棋:一种新颖的方法 一位开发者仅使用 SQL 在 dbpro.app 上构建了一个功能完整的国际象棋游戏。这个项目的重点不在于国际象棋本身,而是展示了 SQL 代表任何有状态的二维网格的能力——日历、游戏棋盘等——使用简单的坐标和值模式。这使得可以直接在 SQL 查询中进行强大的关系操作,例如过滤和计算棋子数量(例如,`SELECT COUNT(*) FROM board WHERE piece = '♙'`)。 讨论强调了 SQL 令人惊讶的灵活性,提到了使用 R 树进行优化以及在 SQL 中建模图灵完备语言的可能性。虽然 SQL 不太适合二维数据,但存在诸如透视表和扩展(DuckDB、PostgreSQL)之类的解决方案来改善处理能力。 这篇帖子引发了关于写作风格的争论,一些人怀疑使用了 LLM 辅助,因为其语气有些程式化。尽管如此,许多人觉得这个概念令人着迷和鼓舞,甚至将其与大型 MMORPG 中的状态管理相提并论。还分享了一个 DuckDB 光线追踪器的链接,展示了类似的功能。
相关文章

原文

What if I told you SQL could play chess?

Not "store chess moves in a database." Not "track game state in a table." Actually render a chess board. With pieces. That you can move around. In your browser. Using nothing but SELECT, UPDATE, and a bit of creative thinking.

No JavaScript. No frameworks. Just SQL.

Let's build it.

The Board

First, we need to represent the chess board. A chess board is an 8x8 grid. Each square can either be empty or contain a piece. That's just a table: