我正在使用PHP和MySQL,而且我对数据库设计经验不足。我知道规范化的基础知识,但我的问题是关于从我拥有的特定形式存储数据。
好的,所以设置我的页面的方式,有可以动态添加或删除的文本框。如果用户按下" +"或" - "按钮,它添加或删除另一个文本框。
无论如何,当我通过$ _POST拉取文本框值时,它是一个数组,然后我使用implode()将其转换为字符串Ex:用户输入" hello" "世界" "再见" " world",implode将其转换为以下字符串" hello,world,bye,world"。
我的问题是存储这个字符串"你好,世界,再见,世界"在1行作为1个条目,或者将这个字符串分成4个单独的字符串并将其存储在4个不同的行中会更好吗?每个文本框都会包含问题/评论,因此它们可能很长,很可能不像我给出的示例那样只有一个字。
我之所以这样问是因为所有这些输入都将在同一页面上使用,因此它们都可以共享一个唯一的ID。我不是多次查询,而只需要查询一次。
答案 0 :(得分:1)
它们应该单独存储,因为它们是一种数据的单独示例。
您的表格(例如)comments
,每行应该是一条评论,因此hello
有一行,world
有一行等等。
您还可以在评论旁边存储页面ID,因此您的表格看起来像这样(请注意,您通常还会在评论ID中添加id
字段。为简洁起见,我省略了它):
|--------------|---------|
| comment | page_id |
|--------------|---------|
| hello | 1 |
| world | 1 |
| bye | 2 |
|--------------|---------|
然后你仍然可以在page_id上搜索,但你的数据在逻辑上是分开的,你可以根据需要搜索特定的评论。
SELECT * FROM comments WHERE page_id = 1 -- 2 results
您也可以非常轻松地按字母顺序排序,或按时间排序(使用新列)。
|--------------|---------|------------|
| comment | page_id | time_made |
|--------------|---------|------------|
| hello | 1 | 1234567890 |
| world | 1 | 2356480546 |
| bye | 2 | 5168161543 |
|--------------|---------|------------|
SELECT * FROM comments WHERE page_id = 1 ORDER BY time_made DESC -- most recent first
答案 1 :(得分:1)
最好将此字符串分成4个单独的字符串,并将其存储在单独的子表中的4个不同的行中。