Что для нас означает «реляционный» в «реляционной базе данных»?

StackOverflow https://stackoverflow.com/questions/1689867

  •  18-09-2019
  •  | 
  •  

Вопрос

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

Но я не могу понять, что это значит для меня как веб-разработчика!

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

Если вы кэшируете каждый запрос выбора, лучше кэшировать простые запросы, чем сложные.Вы можете либо кэшировать «выбрать * из таблицы1, где id = 123» и «выбрать * из таблицы2, где id = 456», либо «выбрать * из таблицы1, tbl2, где...», но если вы выберете второй путь, вы нужно кэшировать каждую комбинацию объектов — это не круто.

Хорошо, теперь мы используем только очень простые запросы, такие как «выбрать * из таблицы 1, где id = 123» или «выбрать идентификатор из таблицы 1 по лимиту идентификатора 0, 30» и кэшировать их (или мы можем кэшировать только первый тип запросов, независимо от того, ).Там запросы и не менее простые INSERT, DELETE и UPDATE — это все, что нам нужно и все, чем мы пользуемся!

Как мы видим, вся реляционная логика находится на основном языке приложения, а не на SQL.Итак, зачем нам нужны все эти реляционные вещи?Что они имеют в виду?Что есть у «реляционного» типа, чего нет у других типов, но это необходимо?Если мы не используем реляционные функции, почему все до сих пор используют MySQL или другие реляционные базы данных, даже если их заботит производительность?

Этот тип баз данных стал стандартом.Почему?Я понятия не имею.Я почти никогда не слышал о том, чтобы кто-то использовал нереляционную базу данных, за исключением GAE.

Я что-то пропустил?

Это было полезно?

Решение

Если вы хотите узнать, что такое реляционные отношения, я рекомендую книгу «SQL и реляционная теория"от Ц.Дж.Дата.

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

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

Существуют веские причины использовать нереляционные решения.Зачастую они очень хорошо решают конкретные задачи управления данными, но слабы в других областях.В то время как SQL и реляционные базы данных находят компромисс, адекватно решая больший набор проблем с меньшим количеством слабых мест.

Другие доступные в настоящее время технологии, не основанные на реляционной модели, перечислены в разделе «Базы данных нового поколения."

Другие советы

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

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

Кроме того, вы говорите, что хотите кэшировать «все запросы являются узкими местами», и вы хотите кэшировать только «простые» запросы.Однако я на 90% уверен, что выполнение нескольких небольших запросов потребует больше ресурсов, чем выполнение нескольких запросов меньшего размера.вам также не нужно кэшировать каждую комбинацию, а только те, которые действительно существуют.в моем примере, что не так с таким запросом?

SELECT person.*, car.* from person left join on car where person.car_ID = car.ID

Реляционные базы данных стали де-факто базами данных по ряду причин.

  1. Установка первичных, внешних и уникальных ограничений обеспечивает соблюдение определенных бизнес-правил на самых низких уровнях, помогает обеспечить целостность данных и делает отношения с базами данных легко понятными практически для любого уровня ИТ-специалистов.

  2. Правильно спроектированная реляционная база данных на самом деле работает быстрее для многих процессов (не для всех).

  3. Запросы к реляционной базе данных довольно быстро освоить и легко выполнить.

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

и многие другие, но это лишь некоторые.

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

Это позволяет вам нормализовать ваши данные и удалить избыточность.Вместо того, чтобы хранить все данные в простой таблице (например, в электронной таблице Excel), вы храните разрозненные данные в отдельных таблицах, а затем связываете их друг с другом.

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

ПользовательА -> ПродуктА

ПользовательА -> ПродуктБ

ПользовательБ -> ПродуктА

ПользовательC -> ПродуктB

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

Валя, если данные в вашем приложении не будут добавляться, обновляться или удаляться, то кэш — самый быстрый способ их поиска и отображения.Мне интересно узнать, что это за данные, которые все так спешат увидеть, но не будут обновляться?Возможно, некоторые детали помогут.Я знаю человека, который хранил всю свою базу данных в памяти с помощью кэша со сквозной записью, и да, она летала!Он единственный известный мне разработчик, который смог осуществить это.Возможно, вам нужно заново изобрести ракетный двигатель, а может быть, и нет.

Отношение — это математическое слово, обозначающее таблицу.Столбцы связаны друг с другом, иначе они не находились бы в одной таблице.

Например, два числа находятся в связи друг с другом, если они отличаются кратно 3.Запишем некоторые из них:(0,0), (1,4), (2,-1) и т. д.Вы увидите набор строк, который представляет собой таблицу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top