Разбиение таблицы Postgres

Я создаю базу данных в Postgres 11, и я хотел бы сегментировать информацию, разбивая таблицы. Таблица встреч уже разделена по диапазонам дат, и я также хотел бы разделить таблицу пациентов; разделение пациентов по каждому врачу.

Возникает вопрос: как я могу разделить таблицу пациентов с помощью списка? Другими словами, для этой таблицы мне нужно было бы установить прямую связь раздела с таблицей доктора, или мне пришлось бы использовать промежуточную таблицу, поскольку между двумя упомянутыми таблицами существует связь многие ко многим.

Прилагаю иллюстративное изображение.

Таблицы базы данных


person bdw    schedule 14.07.2019    source источник
comment
Я также хотел бы разделить таблицу пациентов; разделение пациентов по каждому врачу. Как это работает, если один и тот же пациент может быть назначен нескольким врачам? А чего вы хотите добиться, разбив таблицу на разделы?   -  person Thilo    schedule 14.07.2019
comment
Сколько пациентов и врачей вы ожидаете? Секционирование не нужно (и не полезно), если в вашей таблице всего несколько миллионов строк.   -  person a_horse_with_no_name    schedule 14.07.2019


Ответы (1)


Для отношения «многие ко многим» вам понадобится таблица сопоставления, независимо от того, есть ли разделы или нет. Я бы не использовал искусственный первичный ключ для таблицы сопоставления, но комбинацию id_doctor и id_patient (они все равно искусственные). То же самое и с таблицей appointment.

Поскольку id_doctor не является частью таблицы пациентов (и не должна быть), вы не можете разделить таблицу patient на каждого врача. Почему вы хотите это сделать? Разделение на разделы в основном полезно для массового удаления (и в некоторой степени для ускорения последовательного сканирования). Это ваша цель?

Существует широко распространенное предположение, что большие таблицы следует разделять только потому, что они большие, но это не так. Индексный доступ к многораздельной таблице, если что-то немного медленнее, чем индексный доступ к несекционированной таблице. У вас миллиарды пациентов?

person Laurenz Albe    schedule 14.07.2019
comment
Читая ответы, я вижу, что в этом случае использовать разбиение на разделы неудобно, @LaurenzAlbe, не могли бы вы рассказать мне, как правильно устанавливать отношения "многие-ко-многим"? Спасибо! - person bdw; 14.07.2019
comment
Я могу показать вам, что я считаю хорошим. Например, в doctor_patient удалите id_doctor_patient и вместо этого объявите первичный ключ на (id_doctor, id_patient) (или наоборот). Это экономит столбец и гарантирует, что для каждой комбинации врач-пациент может быть только одна запись. - person Laurenz Albe; 14.07.2019