Рубрики
Без рубрики

Присоединяйтесь к Semotics и MassiveJs V6

MassiveJS версия 6 неизбежна. Этот следующий релиз закрывает самый широкий оставшийся разрыв между массивным гером … Tagged with JavaScript, ShowDev, SQL, база данных.

MassiveJs Версия 6 неизбежна. Этот следующий выпуск закрывает самый широкий оставшийся разрыв между массовыми сгенерированными API и повседневным SQL, не говоря уже о других библиотеках доступа к данным более высокого уровня: Присоединяйтесь s.

Это что -то вроде изменения для масштабного, которое до сих пор имело очень ограниченную функциональность для работы с несколькими сущностями базы данных одновременно. Я даже написал об этом как о ограничении не без преимуществ (и, для записи, я думаю, что все же-специальные соединения-это инструмент, который будет разумно использовать в коде приложения!).

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

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

const whoCheckedOutCalvino = await db.libraries.join({
  books: {
    on: {library_id: 'id'},
    patron_books: {
      type: 'LEFT OUTER',
      pk: ['patron_id', 'book_id'],
      on: {book_id: 'books.id'},
      omit: true
    },
    who_checked_out: {
      type: 'LEFT OUTER',
      relation: 'patrons',
      on: {id: 'patron_books.patron_id'}
    }
  }
}).find({
  state: 'EV',
  'books.author ILIKE': 'calvino, %'
});

( отношение в этом смысле указывает на таблицу или представление.)

И вывод:

[{
  "id": 2,
  "name": "East Virginia State U",
  "state": "EV",
  "books": [{
    "author": "Calvino, Italo",
    "id": 1,
    "library_id": 2,
    "title": "Cosmicomics",
    "who_checked_out": [{
      "id": 1,
      "name": "Lauren Ipsum"
    }]
  }]
}, {
  "id": 3,
  "name": "Neitherfolk Public Library",
  "state": "EV",
  "books": [{
    "author": "Calvino, Italo",
    "id": 2,
    "library_id": 3,
    "title": "Cosmicomics",
    "who_checked_out": [{
      "id": 2,
      "name": "Daler S. Ahmet"
    }]
  }, {
    "author": "Calvino, Italo",
    "id": 4,
    "library_id": 3,
    "title": "Invisible Cities",
    "who_checked_out": []
  }]
}]

Или, другими словами, именно то, что вы бы надеетесь, это будет выглядеть – и что, если вы используете масштабные, вы, возможно, ранее имели дело с схемой взгляда и разложения для достижения. Это умеренно сложный пример, и между по умолчанию (например, type to inner ) и самоанализ, объявление соединения может быть таким же простым, как именовать цель: db.libraries.join ('books') Анкет

Схема соединения – это что -то вроде эволюции на схеме разложения, разделяя ту же структуру, но вывод списков столбцов, первичные ключи таблицы и даже некоторые на Условия, где существуют однозначные отношения иностранных ключей. Это более лаконично, менее хрупко и все еще определяет только то, когда и где это нужно. Еще лучше, составные объекты, созданные из таблиц, могут использовать методы стойкости, что означает, что join () может заменить многие, если не большинство существующих использования глубокого вставки и разложения результатов.

Может показаться немного нетрадиционным, чтобы просто изобрести энсатц базы данных из всей ткани. Есть какой -то прецедент – Массивные уже обрабатывают сценарии, такие как функции базы данных – но составные объекты, созданные Readable.join () немного сложнее, чем это. Однако есть метод этого безумия, и его происхождение датируется до того, как Тед Кодд придумал идею самой реляционной базы данных.

Семиотика с 30 000 футов

Вкратце, семиотика-это изучение значения, с корнями 19-го века как в лингвистике, так и в формальной логике. Это также растягивающаяся интеллектуальная традиция в диалоге с множеством других растягивающихся интеллектуальных традиций, поэтому я не собираюсь отдаленно справедливости. Основополагающая идея приписывается на стороне лингвистики Фердинанду де Соссюру: значение создается в отношении сигнал к Значительный , или взят вместе знак Анкет Дым, чтобы стрелять, письмо к звуку и так далее. Все остальное исходит от этих отношений. Конечно, есть гораздо больше всего всего, и, как и многие другие основополагающие идеи, оригинальная сауссуровская диада является чем -то вроде музейного произведения.

Но идея теоретизирования самого значения почти в алгебраических терминах будет переживать De Saussure. Логик Чарльз Сандерс Пирс уже пришел к аналогичным выводам и понял, что интерпретируемая ценность отношения значения с его значением так же важна, как и два других. Пейрс, следуя этой линии рассуждений, понимал, что этот «интерпретатор» сам является знаком, включающим его собственное значение и означало, что, в свою очередь, дает их собственный интерпретатор, в бесконечных цепях значения. Луи Хьельмслев, тем временем, переосмысленную диаду де Соссюра как отношение выражение к Контент и добавил второе измерение форма и вещество Анкет Для Hjelmslev знак – это функция, в математическом смысле, отображая «форму выражения» с «формой содержания», называя как «вещество выражения» и «вещество содержания» сырье, образованное в знак Анкет

Использование термина «вещество» звучит как своего рода философский жаргон, но здесь нет никаких уловок: это просто вещи . Нет более конкретного обозначения, чем подобное «вещество» для «то, что было превращено в знак»; Категория включает в себя все, от физических материалов до света, жеста, позиционирования, электричества, больше, в бесконечных комбинациях. Знак создается этими вопросами, которые выбираются и образуются в содержание и выражение: топливо, кислород и тепло, организованные в огонь и дым, или звуки, произнесенные в порядке, соответствующем известному лингвистическому количеству. Следует также сказать, что сознание не должно вступать в него: все может сделать знак, и даже растение может интерпретировать его.

Все это сказать: есть вещи, и что общего, так это то, что это сделано для значения. На самом деле большинство вещей постоянно означают много вещей одновременно, если существует процесс интерпретации – и всегда есть что -то Анкет Команда философа-психолога из Жиля Делеза и Феликс Гваттари представляла изначальный суп по вопросам, ожидающему, в качестве пространственного измерения: плоскость последовательности или Плана имманентности Анкет Значение, как они предложили в 1000 плато , случается на и выше плоскости последовательности, поскольку вопросы отбираются и извлечены из нее, чтобы стать субстанцией и знаком. Рекурсивный характер значения означает, что эти признаки затем выбираются в вещество еще других признаков, становясь слоями или слоями на плоскости таким образом, чтобы они сравнивали с образованием осадочной породы.

Знаки и базы данных

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

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

Это, конечно, приходит к наследству долгое время. В огромных терминах объекты базы данных являются первыми экземплярами базы Сущность класс, после чего они наследуют второй прототип: один из Последовательность , Исполняемый файл , или Удобочитаемый . Некоторые из последних могут быть дополнительно сформулированы как Записывается S, тоже; нет Записывается S, которые также не Удобочитаемый s.

Но здесь происходит многое, и упорядочение таблиц, представлений и функций базы данных в класс-структура является вторым шагом-вопросы должны быть выбраны, прежде чем они могут быть сформированы в знаки. Именно на этом первом этапе стратификации массивный добавляет файлы скриптов в систему знаков API, обрабатывая их (почти) идентично функциям и процедурам.

Readable.join () требует той же идеи, чтобы расширить отношения базы данных: до Читабельно Нанесите на карту один на один с одним таблицей или представлением. Но до тех пор, пока SQL может быть сгенерирована для удовлетворения, нет никакой причины, по которой кто -то Читабельно не мог составить карту с несколькими отношениями. Записывается S тоже, в этом отношении:

const librariesWithBooks = db.libraries.join('books');
const libraryMembers = db.patrons.join('libraries');

// inserts work exactly like deep insert, persisting an
// entire object tree
const newLibrary = await librariesWithBooks.insert({
  name: 'Lichfield Public Library',
  state: 'EV',
  books: [{
    library_id: undefined,
    title: 'Jurgen: A Comedy of Justice',
    author: 'Cabell, James Branch'
  }, {
    library_id: undefined,
    title: 'If On a Winter\'s Night a Traveller',
    author: 'Calvino, Italo'
  }]
});

// updates make changes in the origin table, based on
// criteria which can reference the joined tables
const withCabell = await librariesWithBooks.update({
  'books.author ilike': 'cabell, %'
}, {
  has_cabell: true
});

// deletes, like updates, affect the origin table only
const iplPatrons = await libraryMembers.destroy({
  'libraries.name ilike': 'Imaginary Public Library'
});

Попробуйте!

Первый предварительный срок V6 доступен сейчас: npm я массив@Далее . Теперь есть раздел пререлиаза документов Пройти через то, что нового и отличается в деталях. Но подвести итог других изменений:

  • Узел <7.6 больше не поддерживается.
  • Неявное упорядочение было отброшено.
  • Результат разложения теперь дает массивы вместо объектов по умолчанию. массив Поле схемы больше не признано, и вам нужно удалить его из существующих схем разложения. Чтобы получить объекты, установите Decomposeto: 'Object' вместо.
  • Свойства JSON и JSONB теперь отсортируются как их первоначальный тип вместо того, чтобы обрабатывать текст.
  • Тип Собственность Заказ Вариант устарел в пользу стиля Postgres Field:: Тип кастинг, как используется в другом месте. Он будет продолжать работать через жизненный цикл 6.x, но может быть удален в последующем крупном выпуске.

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

Я очень рад видеть, как далеко присоединяется к возможностям расширить возможности Massive, но, по правде говоря, есть только одна вещь, я думаю, что я и большинство других огромных пользователей получат наибольшее количество пробега: обычный старый запрос Генерация предиката с объектами критериев, без необходимости определения и управления множеством представлений, чтобы охватить базовые Присоединяйтесь с Стратификация – это полезный способ подумать о производстве значения, но сами слои также могут быть мертвым весом.

Оригинал: “https://dev.to/dmfay/join-semiotics-and-massivejs-v6-44he”