Prisma - Database with Planet scale


これは、フロントエンドでバックエンドと同様のデータベース・テーブルを作成する場合に便利であり、フロントエンドでもデータベースを管理できます.
この記事では、MySQLをベースにPrismaとPscaleについて議論します.

それはなぜですか。Prismaを使いますか?


翻訳機のテキストなどの役割を果たすのに便利です.
Prisma - Next-generation Node.js and TypeScript ORM for Databases
これは、データベースをより容易に管理する方法です.
node.js typescriptを使用するユーザーに便利さを提供します.
npm install -D prisma
vscodeの拡張のためprismaのインストールを推奨します.
npx prisma init
으로 초기 설정파일을 만들어주어야 한다.
初期設定後のメッセージ
  • Set the DATABASE_URL in the .env file to point to your existing database. If your database has no tables yet, read https://pris.ly/d/getting-started
  • Set the provider of the datasource block in schema.prisma to match your database: postgresql, mysql, sqlite, sqlserver or mongodb (Preview).
  • Run prisma db pull to turn your database schema into a Prisma schema.
  • Run prisma generate to generate the Prisma Client. You can then start querying your database.

  • まず.envファイルのDATABASE URLを設定する必要があります.

  • schema.prismaファイルでdataoucreのプロバイダを設定します.

  • // This is your Prisma schema file,
    // learn more about it in the docs: https://pris.ly/d/prisma-schema
    
    generator client {
      provider = "prisma-client-js"
    }
    
    datasource db {
      provider = "mysql"
      url      = env("DATABASE_URL")
    }
    
    model User {
      id        Int      @id @default(autoincrement())
      phone     Int?     @unique
      email     String?  @unique
      name      String
      avatar    String?
      createdAt DateTime @default(now())
      updatedAt DateTime @updatedAt
    }
    
    // 해당 provider를 mysql로 사용한다는 의미이다. 
    // 그 외로 postgresql, mysql, sqlite, sqlserver or mongodb 가 있다.
    
    // model User 를 생성하여 간단한 테이블 표를 만들수 있다.
    
    @autoincrement :
    기본 DB 내에 정수 형태의 시퀀스를 만들고 시퀀스에 따라 생성된 레코드의
    ID 값에 증가된 값을 할당한다.
    
    @id : 모델에 단일 필드 id를 지정한다.
    
    @updateAt : 레코드가 마지막으로 업데이트된 시간을 자동으로 저장한다.
    시간을 직접 지정하지 않으면 Prisma Client는 이 속성이 있는 필드의 값을 자동으로 설정한다.
    
    ? 사용한 이유는 꼭 있어야 하나 그 차이일뿐. 필수 요소가 아닌 경우 붙여준다.
    PlanetScale
    MySQL対応サーバレスデータベースプラットフォーム
    ただし、Server lessではないのは、Vitesという名前の最大規模のオープンソースデータベースだからです.
    今はPscaleというものをインストールする必要があります.
    Scoop
    https://github.com/planetscale/cli
    レポートウィンドウPowerShellバージョンで2つのリンクをインストールして終了

    pscaleコマンドを入力すると、そのようなウィンドウが表示されます.

    PlanetScale CLI


    PlanetScaleはデータベースだけでなく、CLIは複雑なコマンドだけではありません.pscaleコマンドラインには、ブランチ、導入リクエスト、およびその他のplanetScale概念が用意されています.
    pscale database create carrot-market --region ap-northeast
    上記のコマンドでは、pscaleのrepoなどのデータベース・リポジトリを作成できます.
    これはCLIのコマンドにすぎず、pscaleで直接作成できます.

    dbデータをprismaに転送する方法

    npx prisma db push
    その前にenvファイルでDATABASE URL="mysql://127.0.0.1:11873/carrot-市場
    pscale connect carニンジン-marketを使用してconnectを行った場合、envファイルのurlに自分のサーバアドレスを書くことに成功し、接続に成功します.
    これによりprisma schemaでテーブルの整理に成功することが保証されます.

    npx prisma studio

    npx prisma studio
    適切なデータベース・テーブルを用語で直接変更できるページが開きます.

    npm install @prisma/client

    npm install @prisma/client
    // libs/client.ts
    import { PrismaClient } from "@prisma/client";
    
    export default new PrismaClient();
    上記のファイルを作成すると、npx prisma generate人が入力します.

    api/clinet-test.jsx

    // libs/client.ts
    
    import { PrismaClient } from "@prisma/client";
    
    export default new PrismaClient();
    上記の設定が完了するとapiというサーバを変更できます.
    これはNextJSの機能で、NextJSは全スタックを要求するフレームワークです.
    // api/clinet-test.jsx
    import { NextApiRequest, NextApiResponse } from "next";
    import clinet from "../../libs/client";
    
    export default async function handler(req: NextApiRequest, res: NextApiResponse) {
      await clinet.user.create({
        data: {
          email: "hi",
          name: "hi",
        },
      });
      res.json({
        ok: true,
      });
    }
    http://localhost:3000/api/client-testに進むと、対応するjsonファイルを表示できます.

    またprisma studioではデータが追加されたファイルも見られます.

    ORMは


    オブジェクトリレーションシップマッピング、オブジェクト-リレーションシップマッピング

  • とは、オブジェクトとリレーショナル・データベースを自動的にマッピング(接続)するデータのことです.
  • オブジェクト向けプログラミング使用クラス、リレーショナル・データベース使用テーブル.
  • オブジェクトモデルとリレーショナルモデルの間に不一致があります.
  • ORMにより、オブジェクト間の関係に基づいてSQLが自動的に生成され、矛盾した問題が解決されます.
  • データベースデータ<-マッピング->オブジェクトフィールド
  • オブジェクトによってデータベースデータが間接的に処理される.
  • Persistant APIとも言えます.
  • 長所

  • オブジェクト向けのコードを使用すると、ビジネスロジックにより直感的で集中できます.
  • ORMを使用すると、SQL Queryではなく直感的なコード(メソッド)を使用してデータを操作でき、開発者がオブジェクトモデルのプログラミングに集中できるようになります.
  • 宣言、割当、終了などの付帯コードは減少または急激に減少する.
  • の各種オブジェクトに対してそれぞれコードを記述するため、コードの可読性が向上する.
  • SQLのオブジェクト向けメソッドは、プログラム性や順序性のメソッドではなく、生産性を向上させます.
  • は、再利用とメンテナンスの利便性を向上させます.
  • ORMは独立して作成され、これらのオブジェクトを回収することができます.
  • のため、モデルで加工されたデータはコントローラを介してビューと統合された形式であり、設計モードを強固にするのに有利である.
  • マッピング情報は明瞭であり、ERDの表示への依存性を低減する.
  • DBMSへの依存性が減少した.
  • オブジェクト間の関係に基づいてSQLが自動的に生成され、RDBMSのデータ構造とJavaのオブジェクト向けモデルとの距離を短縮することができる.
  • ORMソリューションのほとんどはDBに依存しません.
  • は実施方法に依存せず、多くのソリューションからデータ型まで有効である.
  • プログラマーはオブジェクトに専念し、DBMSを極端に交換する膨大な作業でもリスクと時間が少ない.
  • javaで加工する場合、equals、hashcodeのoverrideなどのjava機能を使用でき、簡潔で迅速な加工が可能です.
  • 短所

  • の完全なORMだけでサービスを実現するのは難しい.
  • は使いやすいですが、非常に慎重に設計されています.
  • 種目の複雑さが増すと、難易度も上がる.
  • エラーが発生すると、速度が低下し、深刻な場合にコンシステンシがクラッシュするという問題が発生する可能性があります.
  • の一部で一般的に使用される大規模なクエリーでは、速度を速めるためにSPを使用するなど、追加の調整が必要になる場合があります.
  • DBMSの固有機能を利用するのは難しい.(ただし、これは、特定のDBMSの-固有機能を使用すると移植性が低下するという欠点だけと見なすことはできません.)
  • プロセスが多数存在するシステムでは,ORMのオブジェクト向けの利点を利用することは困難である.
  • は、すでに多くのプロセスがあるシステムでは、オブジェクトに再変換する必要があり、生産性の低下やリスクの増大を招く可能性があります.
  • [OEMソース]https://gmlwjd9405.github.io/2019/02/01/orm.html