3

ユーザーがソース コードを変更せずにテーブルに追加の列を構成できるように、Scala+Slick アプリケーションを作成したいと考えています。それを行う方法はありますか?

Adam S - はい、それが私が考えていることです。プログラムにはデフォルトの構成ファイルが付属しており、エンドユーザー/管理者はオプションでいくつかのテーブルに新しい列を追加でき、プログラムの開始時にそれらの列が追加されます.

ユーザーが構成するスペア列を使用して初期テーブルを構成するなど、他にもいくつかの方法を考えていました(ただし、スペアの数を制限し、タイプを事前に定義することに問題があります)。もう 1 つの方法は、元のテーブルと同じ主キーを持つ 2 番目のテーブルを定義し、そのテーブルにユーザー定義データのみを含めることです。その後、プログラムは両方のテーブルを維持する必要があります (それぞれのテーブルの数は同じです)。これにより、元のデフォルト テーブルをより慣習的に処理できるようになります。2 つのテーブルは、データベース関数と同期している可能性があります (これにより、データベース固有になります)。

4

1 に答える 1

7

はい、可能です。Table 定義の一部として列を定義する場合、Table オブジェクトの「column」メソッドを呼び出すことによって実行されます。外部から同じことを行うことができます。

for {
  a <- TableA
  b <- TableB if a.id === b.column[String]("dynamic1")
} yield b.column[Int]("dynamic2")

type パラメーターは、列に使用する適切な暗黙の ColumnType を決定します。ColumnType を動的に取得し、そのパラメーターを明示的に指定することもできます。

テーブルの * プロジェクションにすべての列が含まれている必要はないことに注意してください。動的に検出された列の DDL を生成する場合は、create_* によって返される Seq にそれらの列を含めることができます。

于 2013-05-06T09:53:16.893 に答える