shiftB
instagramyoutube
運営会社プライバシーポリシー特定商取引法に基づく表記JavaScript学習サイト JS Gym
お問い合わせ
©2025 bubekichi inc.

Prismaのリレーション設定

0
Threads
受講生ブログ

Prismaのリレーション設定

icon
kento

Prismaのリレーション設定

投稿日: 2024年12月22日

学習振り返り
Tips
要約
  • リレーションとはデータベースのテーブル間の関係を定義し、関連データを取得するために使用される。
  • 双方向のリレーションを設定することで、モデル間のデータを双方向からアクセス可能にする。
  • 正しくリレーションを設定することで、データベース設計が直感的になり、アプリケーションのデータ操作が容易になる。
音声で記事を再生

はじめに

今回は、課題10、11、オリジナルアプリ制作で必要な内容となっています!
DB設計にも活きる知識になりますので、よかったら読んでやってください笑

リレーション

リレーションとは、データベースのテーブル間の関係を「リレーション」(DB設計おける外部キーと同じ)としてモデル(DB設計で言うとテーブルに相当する)を定義します。
これにより、関係するデータを取得することができます!
リレーションは、@relation属性を使って設定されます。


例: ContactモデルとUsersモデルの関係

user_idフィールドがUsersモデルのidフィールドを参照する外部キーとして機能します。
  @relation(fields: [user_id], references: [id])を使用して、`user_id`が`Users`モデルの`id`を参照することを示しています。

prisma

model Users {
  id                  Int               @id @default(autoincrement())
  created_at          DateTime          @default(now())
  updated_at          DateTime          @updatedAt
  username            String
  profileIcon         String
  biography           String            @db.Text
  cafes               Cafe[]
  contacts            Contact[]
  information         Information[]
  favorites           Favorite[]             
}

model Contact {
   id                 Int              @id @default(autoincrement())
  created_at          DateTime         @default(now())
  updated_at          DateTime         @updatedAt
  user_id             Int              @unique
  contact_content     tring            @db.Text
  users               Users            @relation(fields: [user_id], references: [id])    
}

双方向のリレーション

双方向のリレーションとは、リレーション設定する際、関連する両方のモデルにリレーションフィールド(外部キーがある列)を持たせる必要があります!
これにより、モデル間のデータを双方向からアクセスできるようになります!
フィールドは配列型(`[]`)として定義されます。
これにより、一対多の関係を表現することができます。

例: InformationモデルとCafeモデルの双方向リレーション
Informationモデル
cafeフィールドが`Cafe`モデルを参照します。

Cafeモデル
informationフィールドがInformationモデルのリストを保持します。
これは、1つのカフェが複数の情報(`Information`)を持つことができることを示しています。

model Information {
  id                      Int               @id @default(autoincrement())
  created_at              DateTime          @default(now())
  updated_at              DateTime          @updatedAt
  is_suggested            Boolean           
  latest_info             String 
  time_elapsed            String            @db.VarChar(50)
  recommended_cafe        String
  recommendation_reason   String            @db.Text
  user_id                 Int
  cafe_id                 Int              
  user                    Users             @relation(fields: [user_id], references: [id])
  cafe                    Cafe              @relation(fields: [cafe_id], references: [id])
}


model Cafe {
  id                      Int               @id @default(autoincrement())
  created_at              DateTime          @default(now())
  updated_at              DateTime          @updatedAt
  cafe_name               String            @db.VarChar(100)
  thumbnail_image         String            @db.VarChar(255) 
  area                    String  
  opening_time            String            @db.VarChar(5)
  closing_hours           String            @db.VarChar(5)
  closing_days            String
  cafe_url                String            @db.VarChar(255)
  wifi_available          Boolean
  wifi_speed              Boolean
  wifi_stability          Boolean
  power_outlets           Boolean
  seat_availability       Boolean
  star_rating             Int               
  comment                 String
  locationCoordinates     String
  user_id                 Int
  information             Information[]//Cafeが持つInformationのリスト
  favorites               Favorite[]
  users                   Users             @relation(fields: [user_id], references: [id])
}

まとめ

リレーション設定することで、Prismaを使用してモデル間のデータを効率的に操作できます。
リレーションを正しく設定することで、データベース設計がより直感的なり、アプリケーションのデータ操作が容易になる。

0

シェア!

Threads
icon
kento
プロフィールを見る
Loading...
記事一覧に戻る
Threads
0

関連記事

TAの使い方とマインドセット

icon
tomoe

Webにおけるデザインのコツ

icon
こーすけ

オリジナルアプリ奮闘記

icon
tomoe

自分情熱大陸 -感謝を伝えたいと思い、書きました-

icon
tomoe

個人開発のモチベーション維持(TAのさえずり)

user
吉本茜

MBTI×学習スタイル 巨匠の私が約4ヶ月で完走した学習戦略

user
吉本茜

最新記事

TypeScriptの型安全を殺す!? 個人的アンチパターン🔥

user
吉本茜

初心者向け!3つのパターンのコード比較で理解するNext.jsのコンポーネント分割

icon
タマネギ

NestJSのデコレーターとは?@Controllerや@Injectableの意味と使い方を初心者向け

icon
kento

NestJS初心者向け:AppModule / Controller / Serviceの基本構成と動作の流れ

icon
kento

Nest.jsの基本構成ガイド

icon
kento

コミュニティを楽しむためのステップ

icon
まえたく