什么是多数据存储和提取的最佳方法?

时间:2018-01-31 19:12:28

标签: php mysql sql

下表中每个owner都有自己的页面,当有人访问时,所有Seats都会显示SecretCodes

OwnersSeats
[id    -  ownderid -  type        -  Seat1  -  SecretCode2                            -> Seat50  - SecretCode50              ]
[1     -  3        -  Premium     -  Mark   -  v2ttvgwrxt5cg36g3c63g36c3c54c26y4e73c6 -> Max     - c4wghwh65qcg45g5qx3       ]
[2     -  3        -  Standard    -  Jerry  -  36vyh36cyh6y6wc363v636vc3yc6y3v7y37    -> Marco   - h7wv5cg6qg6qcgqx3xgf5qwy4h]
[3     -  7        -  Enterprise  -  Sonia  -  c3m73uhyv73vyhu3h33c65g33c7v373v73v7   -> John    - 5ctev5hmkbjev7h7kje       ]

每个Seat* VARCHAR(24), SecretCode* TEXT Can be VARCHAR(512) instead.

然后我使用此查询

选择它们

SELECT ownderid, type, Seat1, SecreCode2 -> 50 FROM seats WHERE ownerid = :ownerid

处理此问题的最佳方法是高效,良好的预处理以及更易于使用和编辑?

我考虑将表格中的所有席位存储为TEXT这样的

$SS = [
s1 => 'Mark', sc1 => 'v2ttvgwrxt5cg36g3c63g36c3c54c26y4e73c6', 
s2 => '~~', sc2 => '~~~~~~~',
s3 => '~~', sc3 => '~~~~~~~',
s4 => '~~', sc4 => '~~~~~~~', -> 50
];

但我不知道表现的好坏。

我希望limit50改为100 column[SS],我有50 Seats 50 SecretCode normalization,我是否使用SS来处理此问题?

我认为最好将所有ownerid放在一行中,并使用所有SS数据一次性获取,因为我认为它会更快。

此外,我不知道如何在不使用normalized tablesecond query获取所有相关数据或使用GROUP_CONCAT()的情况下从[OSid - Seat - SecretCode ] [1 - Mark - v2ttvgwrxt5cg36g3c63g36c3c54c26y4e73c6] ~48 ] [1 - Max - c4wghwh65qcg45g5qx3 ] [2 - Jerry - 36vyh36cyh6y6wc363v636vc3yc6y3v7y37 ] ~48 ] [2 - Marco - h7wv5cg6qg6qcgqx3xgf5qwy4h ] [3 - Sonia - c3m73uhyv73vyhu3h33c65g33c7v373v73v7 ] ~48 ] [3 - John - 5ctev5hmkbjev7h7kje ] 获取所有TypeScript,所以我想知道哪一个更适合使用性能。

$.post(this.serviceUrl + '/GetMyCodes', JSON.stringify(item.MyCodeList.trim()), function (CodeData: Something.SomethingElse) {

1 个答案:

答案 0 :(得分:1)

我正在使用答案,而不是评论,因为评论非常有限。我想我开始明白你的表了。所以我只用这些列重写表:

id
ownderId
type
seat  
secretCode

数据看起来像这样:

[id - ownderId - type       - seat   - secretCode                             ]
[1  - 3        - Premium    - Mark   - v2ttvgwrxt5cg36g3c63g36c3c54c26y4e73c6 ]
[2  - 3        - Standard   - Jerry  - 36vyh36cyh6y6wc363v636vc3yc6y3v7y37    ]
[3  - 7        - Enterprise - Sonia  - c3m73uhyv73vyhu3h33c65g33c7v373v73v7   ]
[4  - 3        - Premium    - Max    - c4wghwh65qcg45g5qx3                    ]
[5  - 3        - Standard   - Marco  - h7wv5cg6qg6qcgqx3xgf5qwy4h             ]
[6  - 7        - Enterprise - John   - 5ctev5hmkbjev7h7kje                    ]

如果座位号对您很重要,您可以在其中添加包含该号码的列。像这样:

[id - ownderId - type       - seatNo - seat   - secretCode                             ]
[1  - 3        - Premium    - 1      - Mark   - v2ttvgwrxt5cg36g3c63g36c3c54c26y4e73c6 ]
[2  - 3        - Standard   - 1      - Jerry  - 36vyh36cyh6y6wc363v636vc3yc6y3v7y37    ]
[3  - 7        - Enterprise - 1      - Sonia  - c3m73uhyv73vyhu3h33c65g33c7v373v73v7   ]
[4  - 3        - Premium    - 50     - Max    - c4wghwh65qcg45g5qx3                    ]
[5  - 3        - Standard   - 50     - Marco  - h7wv5cg6qg6qcgqx3xgf5qwy4h             ]
[6  - 7        - Enterprise - 50     - John   - 5ctev5hmkbjev7h7kje                    ]

该表现已标准化。多列中不再存在相同类型的数据。这会使您的查询如下所示:

SELECT seatNo, seat, secreCode FROM seats WHERE ownerId = :ownerid

对数据的任何其他查询都是类似的。