Подтвердить что ты не робот

Что такое горизонтальные и вертикальные разделы в базе данных и какова разница?

Я прочитал это

SELECT - это горизонтальное разбиение отношения на два набора кортежей.

и

PROJECT - это вертикальное разбиение отношения на два отношения.

Однако я не понимаю, что это значит. Можете ли вы объяснить это с точки зрения непрофессионала?

4b9b3361

Ответ 1

Не полный ответ на вопрос, но он отвечает на то, что задано в заголовке вопроса. Таким образом, общий смысл горизонтального и вертикального разбиения базы данных:

Горизонтальное разбиение на разделы предполагает размещение разных строк в разных таблицах. Возможно, клиенты с почтовыми индексами менее 50000 хранятся в CustomersEast, в то время как клиенты с почтовыми индексами, большими или равными 50000, хранятся в ClientWest. Две таблицы разделов - это CustomerEast и CustomersWest, в то время как представление с объединением может быть создано над ними обоими, чтобы обеспечить полное представление обо всех клиентах.

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

Подробнее здесь.

Ответ 2

Проецирование создает подмножество атрибутов в отношении, следовательно, "вертикальное разбиение"

Выбор создает подмножество кортежей в отношении, следовательно, "горизонтальное разбиение"

Для таблицы (r) как

a : b : c : d : e
-----------------
1 : 2 : 3 : 4 : 5
1 : 2 : 3 : 4 : 5
2 : 2 : 3 : 4 : 5
2 : 2 : 3 : 4 : 5

Выражение, такое как

PROJECT a, b (SELECT a=1 (r))

-- SELECT a, b FROM r WHERE a=1

Будет ли "делать"

a : b | c : d : e
-----------------
1 : 2 | 3 : 4 : 5
1 : 2 | 3 : 4 : 5
=================    <  -- horizontal partition (by SELECTION)
2 : 2 | 3 : 4 : 5
2 : 2 | 3 : 4 : 5

      ^  -- vertical partition (by PROJECTION)

Результат

a : b
------
1 : 2 
1 : 2 

Ответ 3

Necromancing.
Я думаю, что существующие ответы слишком абстрактны.

Итак, вот мои попытки более практического объяснения:

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

Вот некоторые выдержки из слайдов Билла Карвина о том, что именно горизонтальное разделение - все о:

Horrible

Выше это плохо, потому что:

Problem 1

Problem 2

Решение:

ГОРИЗОНТАЛЬНОЕ РАЗДЕЛЕНИЕ

Горизонтальное разбиение делит таблицу на несколько таблиц. Каждая таблица содержит одинаковое количество столбцов, но меньше строк.

solution horizontal

Разница: производительность запросов и простота

Kirk Quote




Теперь о разнице между горизонтальным и вертикальным разбиением:

"Трайблс" также может накапливаться в столбцах. Пример: Column Tribble

Решением этой проблемы является ВЕРТИКАЛЬНОЕ РАЗДЕЛЕНИЕ
Правильная нормализация - ОДНА форма вертикального разделения

Цитировать технет

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

Два типа вертикального разделения нормализация и разбиение строк:

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

Разделение строк делит исходная таблица вертикально на таблицы с меньшим количеством столбцов. каждый логическая строка в разделенной таблице совпадает с той же логической строкой в другой таблицы, как указано в столбце UNIQUE KEY, который идентичен во всех разделенных таблиц. Например, присоединение строки с идентификатором 712 из каждой таблицы разбиения воссоздает исходную строку. Как горизонтальный разделение, вертикальное разделение позволяет запросам сканировать меньше данных. Этот увеличивает производительность запросов. Например, таблица, которая содержит семь столбцы, на которые обычно ссылаются только первые четыре, могут выгодно разделить последние три столбца на отдельную таблицу. Вертикальное разделение должно быть тщательно продумано, потому что анализ данных из нескольких разделов требует запросов, которые присоединяются к столы.

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

Это хорошо подводит итог.

Proper normalization

Теперь на ВЫБОР против ПРОЕКТА:

Этот ТАК описывает разницу как таковую:

Операция выбора: Эта операция используется для выбора строк из таблицы (отношения), которая задает данную логику, которая называется predicate. Предикат - это пользовательское условие выбора строк по выбору пользователя.

Операция проекта: Если пользователь заинтересован в выборе значений нескольких атрибутов, а не в выборе всех атрибутов Таблица (отношение), то нужно перейти к операции PROJECT.

SELECT - это фактическая операция SQL (оператор), а PROJECT - термин, используемый в реляционной алгебре.

Судя по тому, что вы публикуете это в SO, а не в MathOverflow, я бы посоветовал вам не читать книги по реляционной алгебре, если вы просто хотите изучить SQL для разработки приложений.

Если вам крайне необходима рекомендация для хорошей книги о (продвинутом) SQL, вот одна из них

SQL Antipatterns: Avoiding the Pitfalls of Database Programming
Bill Karwin
ISBN-13: 978-1934356555
ISBN-10: 1934356557

Это одна книга о SQL, которую стоит прочитать.
Большинство других книг об SQL, которые я там видел, могут быть обобщены этим циничным утверждением о книгах по фотошопу:

Существует больше книг о фотошопе, чем людей, использующих фотошоп.

Ответ 4

Рассмотрим одну таблицу в базе данных, она имеет несколько строк и столбцов.

Есть два способа, которыми вы могли бы выбрать данные: вы могли бы выбрать несколько строк, или вы могли бы выбрать несколько столбцов (хорошо, три способа, вы могли бы выбрать несколько строк и внутри этого выбрать несколько столбцов.)

Вы можете думать о том, чтобы выбрать как сбор некоторых строк - это горизонтальный (а не выбор остальных, следовательно, разделение)

Вы можете думать о проекте как о выборе некоторых столбцов - о том, что вертикаль (а не выбор остальных)