Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Много таблиц, или одна, но большая? MySQL 
:(
    Опции темы
Kolia
Дата 26.8.2003, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 132
Регистрация: 11.7.2003
Где: Вильнюс

Репутация: нет
Всего: нет



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

Посоветуйте (вопрос бывалым).
--------------------
Риспект
PM MAIL ICQ Skype GTalk MSN   Вверх
Cepera
Дата 26.8.2003, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PHPexp
****


Профиль
Группа: Экс. модератор
Сообщений: 2146
Регистрация: 25.3.2002
Где: Russia, Samara

Репутация: нет
Всего: 7



зависит от задач, которыми ты будешь нагржуать эту/эти таблицу(ы)


--------------------
I know it is heavy for reading, but I know you will read it anyway...
PM MAIL WWW ICQ   Вверх
Kolia
Дата 26.8.2003, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 132
Регистрация: 11.7.2003
Где: Вильнюс

Репутация: нет
Всего: нет



Цитата(Cepera @ 26.8.2003, 11:28)
зависит от задач, которыми ты будешь нагржуать эту/эти таблицу(ы)

Основная задача - это вывод участников какой-то группы, добавление новых участников в группу, добавление новой группы.

Меня просто терзают сомнения. Уже все готово. Для каждой группы своя таблица. А если таких групп наберется 100, хотя в каждой из них может быть только 2 участника. А может и 100, 200.
--------------------
Риспект
PM MAIL ICQ Skype GTalk MSN   Вверх
Cepera
Дата 26.8.2003, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PHPexp
****


Профиль
Группа: Экс. модератор
Сообщений: 2146
Регистрация: 25.3.2002
Где: Russia, Samara

Репутация: нет
Всего: 7



ну до пары сотен тысяч записей можешь спать спокойно smile.gif


--------------------
I know it is heavy for reading, but I know you will read it anyway...
PM MAIL WWW ICQ   Вверх
Kolia
Дата 26.8.2003, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 132
Регистрация: 11.7.2003
Где: Вильнюс

Репутация: нет
Всего: нет



Значит с одной таблицей?
--------------------
Риспект
PM MAIL ICQ Skype GTalk MSN   Вверх
Vit
Дата 26.8.2003, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Зависит от объёма, если таблица небольшая - не больше 10 000 000 записей - то нет проблем, должна работать как одна нормально (при правильно подобранных индексах и правильно составленных кверях), а если таблица содержит больше 10 миллионов записей, то разбиение её на несколько таблиц может увеличить производительность


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
maxim1000
Дата 26.8.2003, 16:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



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


--------------------
qqq
PM WWW   Вверх
Kolia
Дата 26.8.2003, 17:04 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 132
Регистрация: 11.7.2003
Где: Вильнюс

Репутация: нет
Всего: нет



Цитата(maxim1000 @ 26.8.2003, 16:01)
Не могу себя назвать крупным специалистом в БД, но мне кажется, что нехорошо, когда структура БД (количество таблиц) зависит от количественных показателей предметной области (количество групп).
Представим себе: кто-то хочет смотреть информацию про всех людей (например, их количество)
для него будет написана программка, которая выдает ему это значение
если каждой группе будет соответствовать своя таблица, то все они должны быть перечислены в запросе
значит, при добавлении новой группы придется открывать исходники этой программки, добавлять новую таблицу в запрос, компилировать заново и т.д., и т.п.
и так - для всех подобных программ... (ужас)

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

--------------------
Риспект
PM MAIL ICQ Skype GTalk MSN   Вверх
Piton
Дата 27.8.2003, 13:47 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 27.8.2003

Репутация: нет
Всего: нет



Вообще-то при создании лучше руководствоваться простым принципом: Создаем третью идеальную форму, а затем ломаем ее так, чтобы всегда удобно было сформировать любой запрос, и побыстрее.
Но советую нескольк таблиц, на практике удобней и быстрей (Если это программа серьезная). smile.gif
PM MAIL   Вверх
Medved
Дата 28.8.2003, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



Советую в первую очередь прочитать про три основыне формы нормализации БД. Эта тема как-раз рассматривает вопросы такого рода.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Medved
Дата 28.8.2003, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



Да, хочу сказать сразу, таблица-помойка (где все сразу) - это не есть гуд.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Piton
Дата 28.8.2003, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 27.8.2003

Репутация: нет
Всего: нет



Pegas

Полностью с тобой согласен!

PM MAIL   Вверх
Kolia
Дата 28.8.2003, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 132
Регистрация: 11.7.2003
Где: Вильнюс

Репутация: нет
Всего: нет



Цитата(Pegas @ 28.8.2003, 10:37)
Советую в первую очередь прочитать про три основыне формы нормализации БД. Эта тема как-раз рассматривает вопросы такого рода.

А где прочитать можно? Не подскажешь
--------------------
Риспект
PM MAIL ICQ Skype GTalk MSN   Вверх
Kolia
Дата 28.8.2003, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 132
Регистрация: 11.7.2003
Где: Вильнюс

Репутация: нет
Всего: нет



Цитата(Pegas @ 28.8.2003, 10:38)
Да, хочу сказать сразу, таблица-помойка (где все сразу) - это не есть гуд.

Так как мне разбить эту таблицу-помойку? Альтернатива - каждой группе по таблице. Только сколько таблиц набраться может.

Вот структура "таблицы-помойки":

| ID | Group | User |

Ну, кто ее разобьет?
--------------------
Риспект
PM MAIL ICQ Skype GTalk MSN   Вверх
Cepera
Дата 28.8.2003, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PHPexp
****


Профиль
Группа: Экс. модератор
Сообщений: 2146
Регистрация: 25.3.2002
Где: Russia, Samara

Репутация: нет
Всего: 7



в твоем формате:
tables:
| table_id | table_name |
users:
| user_id | table_id | user_name |


--------------------
I know it is heavy for reading, but I know you will read it anyway...
PM MAIL WWW ICQ   Вверх
maxim1000
Дата 28.8.2003, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



Цитата
Так как мне разбить эту таблицу-помойку? Альтернатива - каждой группе по таблице. Только сколько таблиц набраться может.

когда нам в институте читали курс по БД, нам рассказывали о таком понятии, как роль, это немного похоже на наследование
например, сущность "рабочий склада" может служить ролью для сущности "рабочий"
при использовании ролей информация общая для всех рабочих (имя, фамилия, дата рождения, ...) хранится в одной "таблице-помойке" smile.gif, а информация специфичная для группы рабочих склада (например, номер склада, в котором он работает) хранится в отдельной таблице, в которой есть ID рабочих из общей таблицы
если же набор сведений для всех рабочих одинаковый, непонятно, зачем вводить разные таблицы
Цитата
Так как имена таблиц с участниками группы очень строгое

переносить бизнес-логику на такие вещи, как имена таблиц, IMHO не лучший подход


--------------------
qqq
PM WWW   Вверх
Vit
Дата 28.8.2003, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



В общем виде такая задача не решается. Зависит от конкретных условий:

1) Размер группы большой (более 1000000 записей) - в пользу нескольких таблиц
2) Количество групп большое - в пользу одной таблицы
3) Группы логически очень обособленные, практически не может быть запросов затрагивающих более одной группы - в пользу нескольких таблиц
4) Сложность запросов на таблице - при чрезмерно сложных запросах (когда уровень вложенности более 10 подзапросов) работать с более мелкими, но более структурированными таблицами легче
5) Необходимость разграничения прав доступа между группами - в пользу нескольких таблиц
6) Возможность переноса записи из одной группы в другую- в пользу одной таблицы


и т.д. скорее всего имеет место сочетание факторов, и идеальных условий может не быть, в таком случае и идеальных решений тоже быть не может...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
m@kxus
Дата 29.8.2003, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 20.2.2003
Где: Estonia

Репутация: нет
Всего: 2



OnORACLE советую сделать так (это типа, база данных такая - ORACLE):

1. Таблица работников (ака. "помойка") - все вместе, например, PEOPLE.
2. Классификатор групп (отделов, складов, семейств) - таблица, где все групы, с названиями, адресами и тому подобной хернёй, например, GROUPS.

В таблице ПИПИЛ делаем поле ГРУППА и связываем по FOREIGN KEY с таблицей ГРУПЗ. Какой в таблице ПИПЛ ключ - решать тебе. Скорее всего, это будет ID. Тока группу не надо в ключ - она будет нам излишнюю уникальность обеспечивать - оно нам надо? В таблице ГРУПЗ делай поле ГРУППА, где будет ID группы (отдела) и какой-нить там NAME, ADDRESS, ETC по своему усмотрению.

Так, теперь появится мнение, что из-за громоздкости таблицы-"помойки" будут медленно запросы работать. Неа, ничё подобного! Творим PARTITIONы для каждой группы в таблице ПИПИЛ и вуаля! - нам обеспечена гибкая база данных, упорядоченые данные и быстрый доступ к оным. Добавление новых групп - это всего лишь добавление 1 (одной) записи в таблицу ГРУПЗ. Перетаскивание народа из группы в группу - это обновление всего лишь одного поля в таблице ПИПИЛ. Короче, порядок и цивилизованный подход.

Пример запроса для группы с ID "DEPART1":
SELECT * FROM PEOPLE PARTITION (DEPART1) WHERE SURNAME LIKE 'A%' ORDER BY NAME

... для кого-то это станет откровением свыше ...
PM MAIL WWW ICQ AOL YIM MSN   Вверх
Kolia
Дата 29.8.2003, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 132
Регистрация: 11.7.2003
Где: Вильнюс

Репутация: нет
Всего: нет



Вывод такой: делать с одной таблицей, т.к. я даже сомневаюсь, что в ней наберется и 100000 записей.

Все.
--------------------
Риспект
PM MAIL ICQ Skype GTalk MSN   Вверх
m@kxus
Дата 29.8.2003, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 20.2.2003
Где: Estonia

Репутация: нет
Всего: 2



Kolia, ты почти прав...
PM MAIL WWW ICQ AOL YIM MSN   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0667 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.