Replies: 7 comments 4 replies
-
@hokoripon リファクタしたほうがいいかなと思ったことをツラツラと書き残しておきます。 レシピrecipes テーブルに is_published 列がありますが、公開日時を保存する published_at 列を追加することで、公開状態だけでなく公開されたタイミングも保存できると思います。 favorite_recipes テーブルと my_recipes テーブルは、どちらもユーザーとレシピの間の関係を表しているので、 cart_recipes テーブルと cart_ingredients テーブルも同様にテーブルを統合し、cart_items というテーブルでいいかなと思いました。 cart_ingredients テーブルに completed 列がありますが、これは購入が完了したかどうかを示すものと思います。ただ、購入が完了したアイテムはカートから削除されるべきなので、この列は必要ないかもです。代わりに、購入履歴を保存するための新しいテーブルを作成でいいと思いました。 ユーザーuser_memos テーブルにも completedがありますが、これも必要ないと思います。 relationships テーブルは、ユーザー間のフォロー関係でしょうか?やや抽象的かと思ったので、user_followersのほうが具体的かと思いました。 ↓必要ないかもです users テーブルに role_id がありますが、ユーザーが複数の役割を持つこと、user_roles という中間テーブルを作成するのが良いかなと思いました。ユーザーと役割の間に多対多の関係が設定できるので |
Beta Was this translation helpful? Give feedback.
-
設計誤り |
Beta Was this translation helpful? Give feedback.
-
日曜定例より、くまびこさんのコメント |
Beta Was this translation helpful? Give feedback.
-
6/14(水) 会話した内容 ■ロールテーブルを廃止したい。 ■レシピは1つのテーブルとして、新しくシェフIDを絡むとして追加したい。 2023/06/18(日)までに新設計案を定義して、BEチーム会で再度会話する。 |
Beta Was this translation helpful? Give feedback.
-
マイレシピは編集、削除、公開、非公開できるっぽい。 |
Beta Was this translation helpful? Give feedback.
-
追加でレビューさせてもらいます! レシピ
以下のような感じでしょうか const uniqueFilename = `recipe_photos/${recipeId}_${Date.now()}.jpg`;
// ストレージへのアップロード
await supabase.storage.from('recipes').upload(uniqueFilename, file);
// データベースにpathを保存
await prisma.recipePhoto.create({
data: {
recipeId: recipeId,
path: uniqueFilename,
// etc...
},
});
以下のような感じでしょうか const { data: recipes, error } = await supabaseServerClient
.from("recipe")
.select("*")
.eq("userId", session.user.id)
.order("createdAt", { ascending: false });
erDiagram
users ||--o{ cart : ""
cart ||--o{ cart_recipes : ""
recipes ||--|{ cart_recipes : ""
recipes ||--|{ ingredients : "1つ以上"
cart_recipes ||--o{ cart_ingredients : ""
ingredients ||--o{ cart_ingredients : ""
cart {
bigint id PK
references user_id FK
timestamp created_at
}
cart_recipes {
bigint id PK
references cart_id FK
references recipe_id FK
int display_order "0が一番上"
timestamp created_at
}
cart_ingredients {
bigint id PK
references cart_recipe_id FK
references ingredient_id FK
boolean completed
timestamp created_at
}
|
Beta Was this translation helpful? Give feedback.
-
@tuboihirokidesu @kumabiko erDiagram
users ||--o{ recipes: ""
chefs ||--o{ recipes: ""
recipes ||--|{ ingredients: "1つ以上"
recipes ||--|{ instructions: "1つ以上"
recipes ||--o{ recipe_photos: ""
recipes ||--o{ recipe_links: ""
users ||--o{ cart_recipes: ""
ingredients ||--o{ cart_ingredients:""
recipes ||--o{ cart_recipes:""
cart_recipes ||--o{ cart_ingredients:""
users ||--o{ user_memos:""
users ||--o{ favorite_chefs:""
users ||--o{ followers:""
users ||--o{ followers:""
recipes ||--o{ favorite_recipes:""
users ||--o{ favorite_recipes:""
chefs ||--o{ chef_links:""
%% ユーザ周り
admin {
bigint admin_id PK
string name
string email
string password
timestamp created_at
timestamp updated_at
timestamp deleted_at "論理削除"
}
users {
bigint user_id PK
string name "not null"
string email
string password
string avatar "画像保存先までのパス"
timestamp created_at
timestamp updated_at
timestamp deleted_at "論理削除"
}
chefs {
bigint chef_id PK
bigint created_by "adimnのIDが入る(必要か考える)"
string name "あいうえお順で表示するために必要"
string biography "シェフページの説明で利用する"
timestamp created_at
timestamp updated_at
timestamp deleted_at "論理削除"
}
chef_links {
bigint chef_links_id PK
references chef_id FK
string name "twitter等が入るイメージ"
string link "https://~"
timestamp created_at
}
followers {
bigint follower_id FK "user_id"
bigint followed_id FK "chef_id"
timestamp created_at
}
%% レシピ周り
%% 作成者カラムを分けるのはバットプラクティスっぽい。
recipes {
bigint recipes_id PK
bigint created_by FK "ユーザIDまたはシェフIDが入る"
string title "レシピ名"
string description "レシピの説明"
int serving_size "n人前"
string image "保存先までのパス"
timestamp published_at "nullの場合は非公開"
timestamp created_at
timestamp deleted_at "論理削除必要か?"
}
ingredients {
bigint ingredients_id PK
references recipe_id FK
string text "材料名や材料名に関する補足情報"
timestamp created_at
}
instructions {
bigint instructions_id PK
references recipe_id FK
int steps
string instruction
timestamp created_at
}
recipe_photos {
bigint recipe_photos_id PK
references recipe_id FK
string path "保存先までのパス"
timestamp created_at
}
recipe_links {
bigint recipe_links_id PK
references recipe_id FK
string url
timestamp created_at
}
%% ユーザがお気に入りしたレシピ
favorite_recipes {
bigint user_id FK
bigint recipe_id FK
timestamp created_at
}
%% お買い物周り
cart_recipes {
bigint cart_recipes_id PK
references user_id FK
references recipe_id FK "レシピ名取得"
int display_order "0が一番上"
timestamp created_at
}
cart_ingredients {
references cart_recipes_id FK
references ingredients_id FK "材料を取得"
boolean completed
timestamp created_at
}
user_memos {
bigint user_memos_id PK
references user_id FK
string text
boolean completed
timestamp created_at
}
favorite_chefs {
references user_id FK
references chef_id FK "ユーザID"
timestamp created_at
}
|
Beta Was this translation helpful? Give feedback.
-
🐸細かい修正中
Beta Was this translation helpful? Give feedback.
All reactions