1

私は次のようなテーブルを持っています:

サービス:

+----+-----------+------------+-------------+
| id | name      | service_id | description |
+----+-----------+------------+-------------+
| 1  | CHAT      |      1     |             |
| 2  | SMS       |      1     |             |
+----+-----------+------------+-------------+

サービス機能:

+----+------------+------------+-------------+
| id | service_id | name       | description |
+----+------------+------------+-------------+
|10  |          1 | Audio      |             |
|20  |          1 | Video      |             |
|30  |          2 | BULKSMS    |             |
+----+------------+------------+-------------+

client_services:

+----+-----------+------------+----------------------------------+---------------------------------------------+
| id | client_id | service_id |service_features_id               |service_values                               |
+----+-----------+------------+----------------------------------+---------------------------------------------+
|100 |      1000 |          1 |features:{10:enable, 20:disable}  |values:{data_transfer:102400, quota:204800}  |
|200 |      1001 |          2 |features:{30:enable}              |values:{total_sms:100000, users:800}         |
|300 |      1001 |          1 |features:{10:disable, 20:enable}  |values:{quota:204800}                        |
+----+-----------+------------+----------------------------------+---------------------------------------------+

今、私は任意のキーのサービス値、つまりdata_transferまたはclient_id 1000の割り当てをmysql selectクエリからのみ取得したいと考えています。答えはそれぞれ 102400 または 204800 でなければなりません

テーブルを形式化するか、情報を保存するためのより良い方法はありますか。提案してください。

4

2 に答える 2

1

絶対にもっと良い方法があります。スキーマには、さらに 2 つのテーブルclient_services_featuresclient_services_values、の代わりに が必要ですclient_servicesclient_services_features次のような列があります。

  • ID
  • クライアントID
  • services_id
  • service_feature_id
  • 有効になっています

client_services_valuesのような列があります。

  • ID
  • クライアントID
  • services_id
  • 値の名前
  • 値_値

物事のリストを一列に並べたテーブル構造を見つけると、通常、リスト用に別のテーブルを作成したいと思うでしょう。リストに ID が含まれている場合は、常にリスト用に別のテーブルを作成する必要があります。

于 2013-03-21T13:44:55.247 に答える
0

値、json、またはxmlのリストを列に格納すると、特定のデータのクエリが非常に困難になります。一般に、データを別々の行に分割することをお勧めします。

他に2つのテーブルを作成します

client_services_values:

+----+-----------+------------+---------------------------------+
| id | client_id | service_id |service_type   | service_value   |
+----+-----------+------------+---------------------------------+
|1   |      1000 |          1 |data_transfer  | 102400          |
|2   |      1000 |          1 |quota          | 204800          |
|3   |      1001 |          2 |total_sms      | 100000          |
|4   |      1001 |          2 |users          | 800             |
|5   |      1001 |          1 |quota          | 204800          |
+----+-----------+------------+---------------------------------+

およびclient_features

+----+-----------+------------+-----------------+
| id | client_id | feature_id | feature_value   |
+----+-----------+------------+-----------------+
|1   |      1000 |         10 |enable           |
|2   |      1000 |         20 |disable          |
|3   |      1001 |         30 |enable           |
|4   |      1001 |         10 |disable          |
|5   |      1001 |         20 |enable           |
+----+-----------+------------+-----------------+
于 2013-03-21T13:47:12.280 に答える