Недостатки хранения всех столбцов внутри столбца JSON - PullRequest
0 голосов
/ 04 января 2019

Каковы недостатки хранения всех столбцов таблицы внутри одного столбца JSON?

например, для пользовательской таблицы вместо этого

Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('firstname');
        $table->string('lastname');
        $table->string('username')->unique();
        $table->string('email')->unique();
        $table->string('password');
        $table->timestamps();            
        $table->rememberToken();
    });

Просто сделай это

Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
    $table->json('attributes'); // contains all the fields
        $table->timestamps();   
        $table->rememberToken();
    });


Обновление

Итак, вкратце, этот подход не подходит, например, для продуктов с индивидуальными свойствами. Базы данных NoSql оптимальны для веб-сайтов / систем электронной коммерции.

но поле JSON может быть полезно для объединения менее используемых полей, таких как пол, возраст, адрес.

правда

Ответы [ 3 ]

0 голосов
/ 04 января 2019

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

Посмотрите на эти два ответа:

Хранение JSON в базе данных против нового столбца для каждого ключа

Есть ли какое-либо преимущество / недостаток хранения значения поля в виде массива JSON, а не создания новой таблицы и отношения один-ко-многим их ставят?

0 голосов
/ 05 января 2019
  • Вы не можете запросить данные json
  • Вы получаете длинную уродливую строку, пока не десериализуете ее
  • Вы будете вручную обрабатывать содержимое столбца json во время извлечения / вставки, т. Е. Кодирования и декодирования, что приводит к потреблению ресурсов сервера.
0 голосов
/ 04 января 2019

Есть много недостатков, но я бы хотел упомянуть три.

  1. Вы не сможете чистым способом запросить через sql данные таблицы.
  2. Вы должны обрабатывать данные сущности своими собственными, потребляющими ресурсы сервера.
  3. Хранение ваших данных таким образом более подвержено повреждению из-за процесса анализа и ручной обработки.

Это не цель хранения sql. Может быть, вы можете изучить варианты, такие как базы данных на основе документов, как MongoDb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...