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    |             |
+----+------------+------------+-------------+

客户服务:

+----+-----------+------------+----------------------------------+---------------------------------------------+
| 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}                        |
+----+-----------+------------+----------------------------------+---------------------------------------------+

现在我想要任何键的服务值,即client_id 1000 的data_transfer 或quota 仅来自mysql select 查询。答案应分别为 102400 或 204800

有没有更好的方法来形式化表格或存储信息。请建议。

4

2 回答 2

1

绝对有更好的方法。您的架构需要另外两个表client_services_features和一个client_services_values, 而不是client_services. client_services_features具有以下列:

  • ID
  • client_id
  • services_id
  • service_feature_id
  • 已启用

client_services_values具有以下列:

  • ID
  • client_id
  • services_id
  • 值名
  • 价值价值

每当您找到一个将事物列表保持在一行中的表结构时,您通常希望为该列表创建一个单独的表。当列表包含 id 时,您总是希望为列表创建一个单独的表。

于 2013-03-21T13:44:55.247 回答
0

在列中存储值、json 或 xml 的列表会使查询特定数据变得非常困难。通常最好将数据分成单独的行。

我会做另外两张桌子

客户端服务值:

+----+-----------+------------+---------------------------------+
| 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 回答