2

各「列」に追加の列を追加して、MySQL を拡張しようとしています。現在、次のものがあります。

Field, Type, Null, Key, Default, Extra

のような追加の列を「列」定義に追加できるようにしたいと考えていますAttributes。私たちのシステムには、「列」ごとにより多くのデータを記述する必要がある特定の設計仕様があります。MySQL でこれを実現するにはどうすればよいでしょうか?

すべての列を返すクエリは次のとおりです。

SHOW COLUMNS FROM MyDB.MyTable;

編集1

最初にこれを追加する必要がありましたが、そうしなかったことをお詫びします。現在、各列タイプのコメント セクションで属性を説明しています。これが非常に汚い解決策であることは理解していますが、当時はこれしか考えられませんでした。DB 構造を中心に展開するコード ジェネレーターを構築しましたが、これはまさにこのイニシアチブから生まれたものです。列のコード属性を記述して、コード ジェネレーターが変更を取得し、変更または実行ごとにコード ベースを更新できるようにします。

4

1 に答える 1

3

まず、用語: 「フィールド」と「列」は、このコンテキストでは基本的に同義語です。フィールドと列の区別はありません。一部の MySQL コマンドでは、これら 2 つの単語を同じ意味で使用することもできます (例: SHOW FIELDS FROM MyDB.MyTable)。

テーブルの各列に属性を割り当てたいとします。「field」に「field_foo」を追加すると、各行で同じデータが何度も繰り返されます。

簡単な答え: 特定の列に関連する属性がさらに必要なfoo場合は、別のテーブルを作成する必要があります。ここfooで、主キーは、それぞれの個別の値が正確に 1 行になるようにします。これは、データベースの正規化のプロセスの一部です。fooこれにより、元のテーブルでその値を何度も使用する場合でも、データを繰り返すことなく、特定の値を説明する属性を持つことができます。


拡張性も考慮する必要があり、将来的には新しい列を許可する必要があるように思えますが、現時点ではどの列またはいくつの列があるかわかりません。これはかなり一般的なプロジェクト要件です。

私のプレゼンテーションExtensible Data Modelingに興味があるかもしれません。そこでは、この種の問題に対する SQL でのさまざまなソリューションの概要を説明しています。

  • 余分な列
  • エンティティ属性値
  • クラス テーブルの継承
  • シリアライズされたLOB
  • 逆索引
  • オンライン スキーマの変更
  • 非リレーショナル データベース

これらのソリューションはいずれも絶対確実なものではなく、それぞれに長所と短所があります。したがって、それらすべてについて学習する価値があり、特定のプロジェクトにとって重要な長所を持ち、短所はそれほど不便ではないものを決定します (これは、多くのソフトウェア設計の選択の決定プロセスです)。


現在、各列タイプのコメント セクションで属性を説明しています。

したがって、「シリアル化された LOB」ソリューションのようなものを使用しています。

于 2013-11-07T19:09:16.447 に答える