2011-01-13 11 views
2

私はこれまでに見たことのないカスタムWebサイトソフトウェアを持っているクライアントと仕事をしています。 MySQLデータベースのバックエンドがありますが、ほとんどのテーブルはPHPコードによって自動生成されます。これにより、エンドユーザーはテーブルやフィールドを適切に作成することができます。つまり、データベース内のデータベースですが、明らかに、「最も外側の」データベースで使用可能なすべての機能はありません。基本的に自動生成されたテーブル名とフィールドをユーザーフレンドリーなテーブル名とフィールドにマッピングするカップルテーブルがあります*これによりクエリは非常に直感的になりません:P自動データベーススキーマ生成システム?

データ型の適用、外部キー、ユニークなインデックスなど、データベースを直接使用するとすぐに使用できますが、データベース内のデータベースなので、データベースを実行するPHPコードにすべての機能を追加する必要があります。私の頭に最初に来たのはInner Platform Effect *ですが、データベースのエミュレーションから抜け出し、必要な機能を提供する方法はありません。

私は、実際のテーブルを作成するための機能をユーザーに提供し、すべてのリレーショナル機能を無料で利用できるシステムを作ることができますか?以前はテーブルを作成したのは開発者/管理者でしたが、ユーザーはアプリケーションを通じてCRUD操作を行いました。私は、たとえそれがアプリケーションを通してであっても、スキーマ操作にユーザーがアクセスできるようにするという不快感を感じています。私は未知の領域にいる。

この種のシステムの名前はありますか?内部的には、コード内では、これを「コレクション」システムと呼びます。データベース内の「仮想」テーブルとフィールドの名前は「タクソノミー」と呼ばれます。これはCCKやDrupalのタクソノミーモジュールに似ていますか?私はこのようなことをするソフトウェアのモデルを探しているので、落とし穴と利点が分かります。基本的に私は、この種のシステムに関するより多くの外部情報を探しています。

  • これは、内部プラットフォームのエフェクトリファレンスに関するウィキペディアの記事と同様、単純なキーと値のマッピングではありません。これらは、単純なデータベーステーブルのような複数のセルの実際のタプルのように機能します。

答えて

2

私はこれをやったことがある、あなたはそれをかなりシンプルにすることができますまたは完全にナットで行く。あなたは問題にぶち当たっていますが、それを顧客の手に入れても、主キー、固有の制約、外部キーを把握するように求めていますか?

これを念頭において、メタデータリポジトリという別のタイプのデータディクショナリが必要です。あなたはスタートがありますが、列が収集されたアイデアをテーブルに追加してから、プライマリキーと外部キーを指定する必要があります。

その後、DDLを生成することはかなり簡単です。ループスルーテーブル、ループスルーカラム、CREATE TABLEコマンドを作成します。唯一のヒッチは、親が子の前に作成されるようにテーブルをシーケンスする必要があるということです。これは難しくないです。http://en.wikipedia.org/wiki/Topological_ordering

2番目のレベルでは、まず既存のデータベースを調べてから、ALTER TABLE ADD COLUMN ...コマンドを発行する必要があります。だから、それは複雑になり始める。

DEFAULTSの許可、インデックスの指定などを考慮すると、状況はさらに複雑になります。タスクは有限ですが、それよりもはるかに大きくなる可能性があります。

あなたが本当にサポートしたいことをどれだけ考慮して、それをコーディングするかの価値判断をすることをお勧めします。

私のtriangulumプロジェクトはこれを行います:http://code.google.com/p/triangulum-db/ですが、それはAlpha 2でしかありません。生産現場ではまだ使用しないことをお勧めします。

また、Doctrineのhttp://www.doctrine-project.org/には、データベースを構築するためのテキストベースの辞書がありますが、どのくらい離れているのかは分かりません。