Prismaのリレーション設定
投稿日: 2024年12月22日
今回は、課題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を使用してモデル間のデータを効率的に操作できます。
リレーションを正しく設定することで、データベース設計がより直感的なり、アプリケーションのデータ操作が容易になる。