これは古い質問ですが、最近似たような問題が発生しました。私の場合、NodeJsからMSSQLサーバに接続するためにseriateを使用しており、DB設計に基づいてGraphQLスキーマを動的に作成したいと考えていました。
`SELECT
BASE_TABLE = t.TABLE_NAME,
BASE_COLUMN = col.COLUMN_NAME,
DATA_TYPE,
LEN_PRECISION = COALESCE(
CHARACTER_MAXIMUM_LENGTH,
numeric_precision,
datetime_precision
),
LINKED_TABLE = keys.Data_Table,
LINKED_COLUMN = keys.Data_Column
FROM INFORMATION_SCHEMA.TABLES t INNER JOIN
INFORMATION_SCHEMA.COLUMNS col ON
t.TABLE_NAME = col.TABLE_NAME LEFT JOIN
(SELECT
Base_Table = FK.TABLE_NAME,
Base_Column = CU.COLUMN_NAME,
Data_Table = PK.TABLE_NAME,
Data_Column = PT.COLUMN_NAME,
Constraint_Name = C.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON
C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON
C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON
C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME INNER JOIN
(SELECT
i1.TABLE_NAME,
i2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1 INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON
i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT ON
PT.TABLE_NAME = PK.TABLE_NAME
) keys ON
keys.Base_Table = t.TABLE_NAME AND
keys.Base_Column = col.COLUMN_NAME
WHERE t.TABLE_TYPE = 'BASE TABLE'`
これが最もエレガントなこと、および大規模データベースにいくつかのパフォーマンスの問題をヒットする可能性があるが、それは私のためによく働いていないことがあります。このルートを行く私は、SQLを得ました。最終的なデータセットは、データベース設計の他のテーブル/列ペアへのリンクを含むテーブル/列ペアのリストを提供します。
このデータセットから、リンクを確認し、GraphQLセットアップで必要なサブクエリを作成するのは "些細"なはずです。
この情報の共有に感謝します。ありがとう – lxm7