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

json列と複数の列

    短い回答、複数の列。

    長い答え:

    世界の聖なるものすべてを愛するために、複数のデータセットを単一のテキスト列に保存しないでください

    どちらかになるテーブルがあると思います

    +------------------------------+      +----------------------+
    | User |  cell | office | home |  OR  | User | JSON String   |
    +------------------------------+      +----------------------+
    

    まず、これらのソリューションはどちらも最善の解決策ではありませんが、2つから選択する場合は、最初の解決策が最適です。主にいくつかの理由がありますが、具体的に変更および照会する機能は非常に重要です。 2番目のオプションを変更するためにalgrothimについて考えてください。

    SELECT `JSON` FROM `table` WHERE `User` = ?
    
    Then you have to do a search and replace in either your server side or client side language
    
    Finally you have to reinsert the JSON string
    

    このソリューションは、合計2つのクエリと検索および置換アルゴリズムです。ダメ!

    次に、最初の解決策について考えます。

    SELECT * FROM `table` WHERE `User` = ?
    
    Then you can do a simple JSON encode to send it down
    
    To modify you only need one Query.
    
    UPDATE `table` SET `cell` = ? WHERE `User` = ?
    
    to update more than one its again a simple single query 
    
    UPDATE `table` SET `cell` = ?, `home` = ? WHERE `User` = ?
    

    これは明らかに優れていますが、最善ではありません

    3番目の解決策があります。ユーザーが無限の数の電話番号を挿入できるようにしたいとします。

    そのためにリレーションテーブルを使用してみましょう。これで2つのテーブルができました。

                  +-------------------------------------+
    +---------+   |      Phone                          | 
    | Users   |   +-------------------------------------+ 
    +---------+   | user_name| phone_number | type      |
    | U_name  |   +-------------------------------------+
    +---------+
    

    これで、次のようなユーザーのすべての電話番号を照会できます

    これで、結合を介してテーブルをクエリできます

    ユーザーを選択します。、電話。 FROM Phone、ユーザーWHERE phone.user_name =? AND Users.U_name =?

    インサートも同様に簡単で、タイプチェックも簡単です。

    これは単純な例ですが、SQLは実際にデータ構造に大きな力を提供するため、回避するのではなく使用する必要があります



    1. データベースを削除して再作成した後、Hibernateにテーブルの作成を強制する

    2. インストールされているSQLServerインスタンスとそのバージョンを確認するにはどうすればよいですか?

    3. MySQLリモートアクセス用のSSHトンネルを作成する

    4. RAC OneNodeアーキテクチャでのActiveDataGuardフィジカルスタンバイの設定–パート2