2016-01-12 3 views
0

Я реализую базу данных для хранения данных для своих пользователей. Обычно я хотел бы создать так:Проектирование схемы базы данных (MySQL)

UserID metafield1 metafield2 metafield3 
1   value11  value12  value13 
2   value21  value22  value23 
3   value31  value32  value33 

Но, глядя на базы данных в Wordpress, они сделали это так:

UserID metafieldname metafieldvalue 
1   metafield1  value11 
1   metafield2  value12 
1   metafield3  value13 
2   metafield1  value21 
2   metafield2  value22 
2   metafield3  value23 
3   metafield1  value31 
3   metafield2  value32 
3   metafield3  value33 

Из того, что я вижу, это проще добавлять/редактировать/remmove новые метапланы. Вам не нужно изменять структуру таблицы.

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

Спрашивает быстрее, используя вторую схему?

Мне интересно, в чем преимущество второго подхода по сравнению с первым?

Спасибо.

+0

Вы уже указали преимущество ... Поля могут быть добавлены/удалены/изменены без изменения схемы. Для сценария с динамически динамической схемой это общий подход. Недостатком является то, что это добавляет сложности. – David

ответ

-1

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

+0

Почему это вниз? – fractal5

0

Скорость запроса зависит от того, какое поле вы ищете, и если это поле проиндексировано. Также зависит от количества строк в таблице, а также от типа данных столбца.

Если вы должны были запросить, где UserId = somevalue, то значительная разница в скорости не изменится, если предположить, что типы данных одинаковы в обеих схемах.

Если метафоли были проиндексированы и запрошены, вы увидите тонкие различия в скорости.

Я бы порекомендовал вам второй, который вы указали для целей оптимизации.

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