2012-02-17 3 views
0

Я работаю с PHP и MySQL, и я не слишком разбираюсь в дизайне базы данных. Я знаю основы нормализации, однако мой вопрос заключается в хранении vales из определенной формы, которую я имею.MYSQL хранит входные значения в одной строке или нескольких строках

Итак, так, как настроена моя страница, есть текстовые поля, которые можно динамически добавлять или удалять. Если пользователь нажимает кнопку «+» или «-», он добавляет или удаляет другое текстовое поле.

В любом случае, когда я вытаскиваю значения текстового поля через $ _POST, это массив, а затем я конвертирую его в строку с помощью implode() Ex: пользователь вводит «привет» «мир» «пока», «мир», implode преобразует его в следующую строку: «hello, world, bye, world».

Мой вопрос: было бы лучше сохранить эту строку «hello, world, bye, world» в 1 строке как 1 запись, или было бы лучше разбить эту строку на 4 отдельные строки и сохранить ее в 4 разных строки? Каждое текстовое поле будет содержать вопросы/комментарии, чтобы они могли быть потенциально длинными и, скорее всего, не одним словом, как пример, который я дал.

Причина, по которой я прошу об этом, заключается в том, что все эти входы будут использоваться на одной странице, поэтому все они могут иметь уникальный идентификатор. Вместо запроса несколько раз мне нужно было только один раз запросить запрос.

+1

Что произойдет, если кто-нибудь вступает в запятую в одном из полей? –

+0

Хм, очень верно. Я всегда мог использовать символ «~» или редко используемый символ (и ограничивать его использование), но я просто придерживаюсь метода отдельной строки. – user1104854

ответ

1

Их следует хранить отдельно, поскольку они являются отдельными примерами одного вида данных.

Ваш стол будет (например) comments, и каждая строка должна быть один комментарий, поэтому один ряд для hello, один для world и т.д.

Вы также можете хранить идентификатор страницы наряду с комментариями, так ваша таблица будет выглядеть следующим образом (. обратите внимание, что вы обычно имеете 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 
+0

Большое спасибо за примеры. Я собираюсь сохранить идентификатор рядом с ними, чтобы я мог ссылаться на эту страницу, как вы предлагали. – user1104854

1

Лучше разбить эту строку на 4 отдельные строки и сохранить ее в 4 разных строках в отдельной детской таблице.

Смежные вопросы