1

私は現在、Feature他のさまざまなモデルで使用されているモデルを持っています。この例では、顧客が使用します。

物事を柔軟に保つために、機能は、名、姓、名前、生年月日、会社登録番号などを保存するために使用されます。

これには問題があることに気付くでしょう。これらのほとんどは文字列ですが、生年月日などの機能は、理想的にはDate型の列に格納されます(ビューに入力されるテキストではなく、日付ピッカーになります)。

これはどのように処理するのが最善でしょうか?現在、私は単に文字列列「value」を持っています。複数の値の列(たとえば、string_value、date_value)を使用することを検討しましたが、すべてのレコードに常にnull列があるため、これは特に効率的ではないようです。

これを処理する方法についてアドバイスをいただければ幸いです-ありがとう!

4

1 に答える 1

3

あなたのニーズに応じて、私があなたがこれで行くのを見ることができるいくつかの方法があります。私はこれらのどれにも完全には満足していませんが、おそらく彼らはあなたを正しい方向に向けることができます:

  1. すべてをシリアル化

Railsは任意のオブジェクトをバイトストリームとして格納でき、Rubyではすべてがオブジェクトです。したがって、理論的には、Strings、DateTimes、さらには独自のモデルを含む任意のオブジェクトの文字列表現をデータベース列に格納できます。Marshalモジュールはほとんどの場合これを処理し、オブジェクトに特別なニーズがある場合は独自のシリアル化メソッドを作成できます。

長所:実際には、すべてを1つのデータベース列に格納します。

短所:データベース内のデータを操作する機能は最小限です-この列をストレージ以外の目的で使用することは基本的に不可能です-フォーマットが機能しないため、(おそらく)それに基づいてデータを並べ替えたりフィルタリングしたりすることはできません。データベースが認識するものであれば何でもかまいません。

  1. すべてのデータ型の列

これは基本的に、質問で提案した解決策です。つまり、保存する必要のあるデータ型を正確に把握します。文字列と日付スタンプについて言及します。それらの数が多すぎない場合は、各タイプの列を作成し、そのうちの1つにのみデータを格納することをお勧めします。属性アクセサ関数をオーバーライドして適切な列を使用できます。外部からは、Featureは.value必要なものであるかのように動作します。

長所:必要なテーブルは1つだけです。

短所:すべてのレコードに少なくとも1つのnull値。

  1. 複数のモデル/テーブル

TextFeature、DateFeatureなど、必要になる可能性のある機能の種類ごとにモデルを作成できます。複数テーブル継承に関するこのガイドでは、アイデアと方法論について説明します。

長所:null値はありません-すべてのレコードには、必要な列のみが含まれています。

短所:複雑さ。複数のモデルが必要なことに加えて、データベース内のさまざまな種類の機能を直接操作する必要がある場合は、複雑な結合と結合を実行していることに気付く場合があります。

于 2012-08-21T17:02:00.650 に答える