teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

補足

2017/01/13 09:18

投稿

popobot
popobot

スコア6588

answer CHANGED
@@ -10,9 +10,9 @@
10
10
  ----
11
11
 
12
12
  もしくは、もし今後管理者と一般ユーザ両方に紐付ける必要がテーブルが増えるなら、authorsという、adminsとusers両方を管理する中間テーブルを作ってauthorsとarticlesを関連付けるのもありかもしれません。
13
-
14
13
  ```
15
14
  authors (id, admin_id, user_id)
16
15
  admins.id ⇔ authors.admin_id authors.id ⇔ articles.author_id
17
16
  users.id ⇔ authors.user_id authors.id ⇔ articles.author_id
18
- ```
17
+ ```
18
+ ※adminsとusersの基底クラスauthorsみたいなイメージ

2

補足

2017/01/13 09:18

投稿

popobot
popobot

スコア6588

answer CHANGED
@@ -5,4 +5,14 @@
5
5
 
6
6
  JOINもシンプルですし、構造上わかりやすいので、そんなに悪いとは思いませんけどね。
7
7
  表示のときには、管理者か一般ユーザか存在する方を出せばよいだけですし。
8
- 唯一のデメリットはNOT NULL制約が使えないことぐらいかと(アプリ側でカバー)
8
+ 唯一のデメリットはNOT NULL制約が使えないことぐらいかと(アプリ側でカバー)
9
+
10
+ ----
11
+
12
+ もしくは、もし今後管理者と一般ユーザ両方に紐付ける必要がテーブルが増えるなら、authorsという、adminsとusers両方を管理する中間テーブルを作ってauthorsとarticlesを関連付けるのもありかもしれません。
13
+
14
+ ```
15
+ authors (id, admin_id, user_id)
16
+ admins.id ⇔ authors.admin_id authors.id ⇔ articles.author_id
17
+ users.id ⇔ authors.user_id authors.id ⇔ articles.author_id
18
+ ```

1

誤字

2017/01/13 09:17

投稿

popobot
popobot

スコア6588

answer CHANGED
@@ -1,4 +1,4 @@
1
- 自分なら以下の実装にしますね。なんどかこういう実装をしたことがあります。
1
+ 自分なら以下の実装にしますね。何度かこういう実装をしたことがあります。
2
2
  ※もしくはadminsとusersのテーブルを統合するか...(影響範囲しだいですが)
3
3
 
4
4
  > 最小限の変更で実装してしまうなら articles.admin_id, articles.user_id というカラムを用意し、管理者が書いた記事には admin_id = 管理者ID, user_id = null にし、ユーザーが書いた記事には user_id = ユーザーID, admin_id = null にするという手段があるかと思いますが綺麗とは言えません。