sql >> データベース >  >> RDS >> Mysql

シリアル化されたデータをmysqlデータベースに保存するには、どの列タイプを使用する必要がありますか?

    答える:テキストは多くのDBMSで非推奨になっているようですので、上限のあるblobまたはvarcharのいずれかを使用することをお勧めします(blobを使用すると、varcharとtextの大きな問題であるエンコーディングの問題は発生しません) 。

    また、MySQLフォーラムのこのスレッド で指摘されているように 、ハードドライブはソフトウェアよりも安価であるため、最初にソフトウェアを設計して機能させることをお勧めします。その後、スペースが問題になる場合にのみ、その側面を最適化することをお勧めします。したがって、早い段階で列のサイズを過度に最適化しようとしないでください。最初はサイズを大きく設定することをお勧めします(さらに、これによりセキュリティの問題を回避できます)。

    さまざまなコメントについて:ここではSQLの狂信が多すぎます。私はSQLとリレーショナルモデルが大好きですが、落とし穴もあります。

    シリアル化されたデータをデータベースにそのまま保存する(JSONまたはXML形式のデータを保存するなど)には、いくつかの利点があります。

    • データの形式をより柔軟にすることができます。その場でフィールドを追加および削除したり、その場でフィールドの仕様を変更したりできます...
    • オブジェクトモデルとのインピーダンスの不一致が少ない:データをフェッチしてから、プログラムオブジェクトの構造とリレーショナルデータベースの構造の間でデータを処理および変換する必要がある場合と比較して、データをプログラム内と同じように保存してフェッチします。 。

    また、他にも多くの利点があるので、ファンボイズムにしないでください。リレーショナルデータベースは優れたツールですが、入手できる他のツールを捨てないでください。ツールが多ければ多いほど良い。

    具体的な使用例として、データベースにJSONフィールドを追加して、JSONデータの列(プロパティ)が個別にSELECTされることはなく、適切なレコードの場合にのみ使用されるレコードの追加パラメーターを格納する傾向があります。はすでに選択されています。この場合でも、リレーショナル列を使用してレコードを区別できます。適切なレコードを選択すると、必要に応じて追加のパラメーターを使用できます。

    したがって、両方の長所(速度、直列化可能性、構造の柔軟性)を維持し、行を区別するための一意のキーとして機能するいくつかの標準のリレーショナル列を使用してから、シリアル化されたデータが生成されるblob/varchar列を使用することをお勧めします。挿入されます。通常、一意のキーに必要な列は2つまたは3つだけなので、これは大きなオーバーヘッドにはなりません。

    また、現在JSONデータ型を持つPostgreSQLと、PostSQLプロジェクト に興味があるかもしれません。 リレーショナル列と同じようにJSONフィールドを直接処理します。



    1. Oracleの数値関数かどうかを確認します

    2. MySQLでUNIONを使用する場合の「エラー1054(42S22):「order句」の不明な列「…」」を修正

    3. MySQL>テーブルが存在しません。しかし、それはします(またはそうすべきです)

    4. ODBCとは何ですか?