Несколько таблиц уменьшат скорость результата? - PullRequest
1 голос
/ 08 января 2011

У меня есть база данных с несколькими таблицами.

эта множественная таблица связана с одним именем, например ..

Table 1 contains name of the person, joined date,position,salary..etc

Table2 contains name of the person,current projects,finished,assigned...etc

Table 3 contains name of the person,time sheets,in,out,etc...

Table 4 contains name of the person,personal details,skill set,previous experiance,...etc

Вся таблица содержит более 50000 names и их данные.

поэтому мой вопрос - все таблицы содержат информацию, относящуюся к имени, скажем Jose20856, это имя является уникальным индексом всех 4 таблиц.когда я ищу Jose20856, все четыре таблицы будут давать результат и выводиться в интерфейсную программу / html.поэтому мне нужно хранить несколько таблиц или объединять их в одну таблицу ??

Если да, то

CASE 1
Single table -> what are the advantages? will result will be faster? what about the system resource usage?

CASE 2
Multiple table ->what are the advantages? will result will be faster? what about the system resource usage?

Поскольку я новичок в MySQL, мне бы хотелось, чтобы ваше ценное мнение продолжалось

Ответы [ 3 ]

1 голос
/ 08 января 2011

Вы можете объединить их в одну таблицу, но только если это имеет смысл. Трудно сказать, являются ли отношения в ваших таблицах один-к-одному или один-ко-многим, но кажутся ли они взаимными. например Один сотрудник из таблицы 1 должен иметь возможность иметь несколько проектов, навыков, расписания в других таблицах. Все это отношения один-ко-многим.

Итак, придерживайтесь нескольких таблиц. Вам также следует рассмотреть возможность использования первичного ключа на основе целого числа для сотрудника, а не имени. Используйте эту кнопку в качестве fkey в других ваших таблицах, и вы увидите улучшение производительности. (Также рассмотрите объем работы, который вам нужно выполнить, если и когда вы захотите изменить имя. Вы должны изменить все имена во всех таблицах. Если вы используете суррогатный ключ, ключ int pkey, как предложено выше, вы только нужно обновить одну строку.)

1 голос
/ 08 января 2011

Мы говорим здесь о вертикальном разбиении таблицы (в отличие от горизонтального разбиения таблицы).Это допустимый шаблон проектирования базы данных, который может быть полезен в следующих случаях:

  1. Слишком много столбцов, чтобы поместиться в одну таблицу.Это довольно очевидно.
  2. Есть столбцы, к которым обращаются относительно часто, а некоторые - относительно редко.Например, если вам очень часто нужно отображать столбцы joined date,position,salary и столбцы personal details,skill set,previous experiance очень редко, то имеет смысл переместить эти столбцы в отдельную таблицу, поскольку это (вероятно) повысит производительность при доступе к наиболее часто используемым.В MySQL это особенно верно в случае столбцов TEXT и BLOB, поскольку они хранятся отдельно от остальных полей, поэтому доступ к ним занимает больше времени.
  3. Существуют столбцы NULLable, где большинство строкНОЛЬ.Еще раз, если он в основном равен нулю, перемещение его в отдельную таблицу позволит вам уменьшить размер вашей таблицы «мани» и повысить производительность.Новая таблица не должна разрешать нулевые значения и иметь записи только для строк, в которых установлено значение.Таким образом вы также уменьшите объем ресурсов хранилища / памяти.
  4. Специфично для MySQL - вы можете захотеть переместить некоторые из ваших столбцов из таблицы nnoDB в MyISAM, чтобы вы могли использовать полнотекстовое индексирование, сохраняя при этом возможностьиспользовать некоторые функции, которые предоставляет InnoDB.Хотя это не очень хороший дизайн - лучше использовать систему полнотекстового поиска, например, Sphinx.

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


Дополнительное чтение о разделении MySQL (немного устарело, так как MySQL 5.5 добавил некоторыеновые функции)

1 голос
/ 08 января 2011

Читайте в Интернете о нормализации базы данных.

Например, http://en.wikipedia.org/wiki/Database_normalization

Я думаю, вы даже можете добавить к ней больше таблиц.Все зависит от данных и отношений.

Table1 = users incl. userdata
Table2 = Projects (if multiple users work on the same project)
Table3 = Linking user to projects (if multiple users work on the same project)
Table4 = Time spent? Contains the links to the user and to the project.

Я думаю, что ваша таблица 4 может быть объединена в таблицу 1, поскольку она также содержит данные, относящиеся к 1 пользователю.

Возможно, есть ещеможно сделать но как уже говорилось все зависит и от отношений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...