Почему массивы не сохраняются в sql

Я знаю, что sql не может сохранять массивы (поправьте меня, если я ошибаюсь) .
почему?
Я знаю, что это глупый вопрос, но
Массивы - это только структурированные данные. Почему sql не может сохранить это?

Могу ли я переписать мою базу данных mysql или загрузить аддон для sql, чтобы я мог сохранять массивы?

заранее спасибо

В мире SQL вы должны нормализовать свои данные. Массив не является атомарным (вы, вероятно, захотите обратиться к конкретному элементу массива, а не к массиву в целом). В любом случае PostgresSQL / Oracle позволяют хранить массивы.

Lukasz Szozda 07.09.2018 16:45

Если вы хотите использовать массив, вы можете использовать NOSQL

D-Shih 07.09.2018 16:46

Sql может хранить сериализованные данные, например, Json или XML, вы можете использовать это для сохранения массивов

johnny 5 07.09.2018 17:05
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
3
39
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Чтобы ответить на свой вопрос, я сначала хочу поблагодарить за комментарии
СПАСИБО!
Вернемся к вопросу: обычный sql не может сохранять массивы и не хочет сохранять сохранение из-за проблем с нормализация.

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

Если вам нужно это сделать или вы хотите это сделать, вы можете использовать Nosql или PostgreSql или сохранить данные с помощью JSON, Oracle и XML.

Ответ принят как подходящий

Системы управления реляционными базами данных (СУБД), такие как MySQL, SQL Server, Oracle и PostgreSQL, обычно хранят данные в таблицах. Это очень хороший способ хранить связанные данные.

Допустим, есть три объекта: клиенты, заказы и продукты, а заказы содержат несколько продуктов. Отсюда четыре таблицы:

  • клиенты (customer_no, имя)
  • товары (product_no, name, price)
  • заказы (номер_заказа, номер_клиента, дата)
  • order_details (order_no, product_no, amount)

Мы предоставляем индексы (то есть деревья поиска), чтобы легко находить заказы клиента или продукты в заказе. Теперь предположим, что мы хотим узнать, сколько заказов было сделано для продукта 123:

select count(distinct order_no)
from order_details
where product_no = 123;

СУБД быстро найдет записи order_detail для продукта, потому что поиск по индексу похож на поиск по фамилии в телефонной книге (двоичный поиск). А дальше это просто подсчет. Таким образом, считываются только несколько записей, и весь запрос выполняется очень быстро.

Теперь то же самое с массивами. Что-то вроде:

products(product_no, name, price)

customers
(
  customer_no,
  name, 
  array of orders
  (
    order_no, 
    date,
    array of products
    (
      product_no,
      amount
    )
  )
)

Что ж, детали заказа теперь скрыты внутри элемента заказа, который сам находится внутри объекта клиента. Чтобы получить количество заказов для продукта 123, кажется, единственный подход - прочитать записи клиентов все, просмотреть заказы все и посмотреть, содержат ли они продукт. Это может занять очень много времени. Более того, без ограничений внешнего ключа для отношений между сущностями массивы могут содержать номера продуктов, которых даже не существует.

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

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

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