Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
18.03.2014, 12:18
|
|||
---|---|---|---|
|
|||
Как лучше сделать N:M relationship между очень большой таблицей и очень маленькой? |
|||
#18+
Есть таблица HUGE_TABLE. Пара миллионов записей, новые записи добавляются ежечасно сотнями. Есть таблица tiny_table. Записей 20. Если добавится одна запись раз в полгода, то уже хорошо. Каждой huge_table соответствует 0 или более записей из tiny_table (обычно 3-4). Мне зело не хочется для каждой записи из huge_table делать несолько записей в какой-нибудь junction table. (Место на винчестере жалко и использоваться связь будет редко). Как такое дело лучше организовать? Я пока сделал так: вместо обычной junction table (которая связывала бы каждую строку huge table id и нужные строки в tiny table id) сделал табличку tiny_table_collection с двумя полями: collection_id, tiny_table_row_id. И если я хочу сопоставить записи к huge_table записи TT1 и TT2 из tiny_table, то я ищу/создаю такой collection_id (назовем его CID), для которого есть записи (CID, TT1), (CID, TT2) в tiny_table_collection и других записей с таким CID нету. Решение вроде работает, но может вариант получше есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
18.03.2014, 20:31
|
|||
---|---|---|---|
Как лучше сделать N:M relationship между очень большой таблицей и очень маленькой? |
|||
#18+
Вообще-то это вопрос для форума: http://www.sql.ru/forum/db-design Но в принципе, если рассматривать tiny_table как список возможных флагов и этот список не выйдет за 64 штуки, то можно воспользоваться методом издревле применяющимся в С - битовые флаги. И нет, в SQL нету удобных методов для работы с битами. А описанный тобой метод может быть работоспособным до тех пор, пока мало этих самых "коллекций". Но теоретически их у тебя может быть до 2^count(tiny_table). То есть пока в tiny_table у тебя 20 записей, размер таблицы tiny_table_collection будет до 2^20, а это уже больше миллиона. Сколько, говоришь, у тебя в HUGE_TABLE записей? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=54&mobile=1&tid=2008809]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 274ms |
total: | 409ms |
0 / 0 |