Хранение данных SQL

У меня есть база данных MySQL, которая хранит данные следующим образом:

 id   |   value  |
 1       @value1 
         @value2 
         @value3 
_________@value4__
 2       @value5 
         @value6 
_________@value7__ 
 3       @value8 
         @value9  

В случае, если мне нужно будет извлечь «значение» из определенного «id», я перейду к следующим шагам:

  • ВЫБЕРИТЕ строку «id», которая мне понадобится
  • используя функцию php explode("@",$value), сделайте вырезку значений, которые хранятся в определенном «id», и создайте из него массив.

Итак, мой вопрос: эффективно ли работать и хранить данные таким образом? Возможно, мне следует изменить способ хранения (как показано ниже) и использовать только SQL-запросы для извлечения данных.

Чтобы вы посоветовали?

 id   |   value  |
 1       @value1 
 1       @value2 
 1       @value3 
explode("@",$value)______@value4__
 2       @value5 
 2       @value6 
_2_______@value7__ 
 3       @value8 
 3       @value9  

person Apparatus Simplices    schedule 01.01.2015    source источник
comment
Таблицы в РЕЛЯЦИОННЫХ базах данных построены на ПЕРВИЧНЫХ КЛЮЧАХ. Именно они устанавливают ОТНОШЕНИЕ. Если у вас нет PRIMARY KEY, у вас нет таблицы.   -  person Strawberry    schedule 01.01.2015


Ответы (1)


Измените схему на:

id | group | value
======================
1  | 1     | "Value 1"
2  | 1     | "Value 2"
3  | 1     | "Value 3"
4  | 2     | "Value 4"
5  | 2     | "Value 5"
6  | 3     | "Value 6"
7  | 3     | "Value 7"
8  | 3     | "Value 8"
...

Таким образом, каждая строка имеет уникальный идентификатор, что очень полезно, если вы окажетесь в ситуации, когда вам нужно указать на определенную строку, а значения будут сгруппированы с использованием идентификатора (в данном случае числа).

Теперь вы можете легко выбрать все значения, принадлежащие определенной группе:

SELECT `value` FROM `tableName` WHERE `group` = 2

Это даст вам это подмножество таблицы:

id | group | value
======================
4  | 2     | "Value 4"
5  | 2     | "Value 5"

SQL для создания таблицы:

DROP TABLE IF EXISTS `tableName`;

CREATE TABLE `tableName` (
    `id`    INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `group` INT NOT NULL,
    `value` VARCHAR(256) NOT NULL
);

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

person Sverri M. Olsen    schedule 01.01.2015
comment
Да, это то, о чем я думал, но почему этот способ хранения лучше, чем тот, который я использую в данный момент? - person Apparatus Simplices; 01.01.2015
comment
Это лучше, потому что данные должны быть просто данными. Хранение данных в виде строк, которыми необходимо манипулировать, чтобы их можно было использовать, противоречит цели использования базы данных. Вам следует прочитать о реляционной модели, если вы хотите понять, как работают реляционные базы данных. Это огромная тема, которую я не могу объяснить здесь. - person Sverri M. Olsen; 01.01.2015