MYSQL将输入值存储在一行或多行中


MYSQL storing input values in one row or multiple rows

我使用的是PHP和MySQL,在数据库设计方面经验不足。我知道规范化的基本原理,但我的问题是如何存储特定形式的值。

好的,按照我的页面设置方式,有一些文本框可以动态添加或删除。如果用户按下"+"或"-"按钮,则会添加或删除另一个文本框。

无论如何,当我通过$_POST提取文本框值时,它是一个数组,然后我使用内爆()将其转换为字符串。例如:用户输入"hello"world"bye"world",内爆将其转换成以下字符串"hello,world,bye,world"。

我的问题是,将这个字符串"hello,world,bye,world"存储在1行中作为1个条目更好吗?还是将这个字符串分成4个单独的字符串并存储在4个不同的行中更好?每个文本框都将包含问题/评论,因此它们可能很长,很可能不是像我举的例子那样的一个单词。

我之所以这么问,是因为所有这些输入都将在同一个页面上使用,所以它们都可以共享一个唯一的ID。我只需要查询一次,而不是多次查询。

它们应该单独存储,因为它们是一种数据的单独示例。

您的表将是(例如)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

最好将此字符串分成4个单独的字符串,并将其存储在单独子表的4个不同行中。