いろんなテーブルを考えた

※作成更新時などは除く

### twitter
**userテーブル**
| 項目             | カラム名     | データ型 | NOTNULL | ユニーク | 主キー | 外部キー | 説明 | 
| ---------------- | ------------ | -------- | ------- | -------- | ------ | -------- | ------------------------ | 
| ユーザID         | id            | integer  | 〇      | 〇       | 〇     |          |      | 
| 名前             | name         | string   | 〇      | 〇       |        |          |      | 
| メールアドレス   | email        | string   | 〇      | 〇       |        |          |      | 
| パスワード       | password     | string   | 〇      |          |        |          |      | 
| プロフィール画像 | image        | string   |         |          |        | 　       | URL  | 
| 自己紹介         | profile      | string   |         |          |        |          |      | 
| 固定ツイート     | fixed_tweet  | string   |         |          |        |          |      | 


**tweetsテーブル**（一対多）
| 項目       | カラム名 | データ型 | NOTNULL | ユニーク | 主キー | 外部キー | 説明 | 
| ---------- | -------- | -------- | ------- | -------- | ------ | -------- | ------------------------| 
| ツイートID | id       | integer  | 〇      | 〇       | 〇     |          |      | 
| ユーザID   | user_id  | string   | 〇      |          |        | 〇       |      | 
| ツイート   | body     | text     | 〇      |          |        |          |      | 

**mediaテーブル**（tweet1に対して、mdeiaは多）
| 項目       | カラム名 | データ型    | NOTNULL | ユニーク | 主キー | 外部キー | 説明 | 
| ---------- | -------- | ----------- | ------- | -------- | ------ | -------- | ------------------------ | 
| ツイートID | tweet_id | integer     | 〇      |          |        |          |      | 
| メディアID | id       | string      | 〇      |          |        |          | URL  | 
| タイプID   | type_id  | tinyinteger | 〇      |          |        |          |  動画なら１　画像なら２    | 

**likesテーブル**（一対多）
| 項目       | カラム名 | データ型 | NOTNULL | ユニーク | 主キー | 外部キー | 説明 | 
| ---------- | -------- | -------- | ------- | -------- | ------ | -------- | ---- | 
| ユーザID   | user_id  | integer  | 〇      | 〇       |        |    〇     |  いいねをした人    | 
| ツイートID | tweet_id | integer  | 〇      |          |        |    〇     |   いいねされたツイート   | 

・tweet_idをCOUNT関数をつかうことでいいね数が分かる

**retweetsテーブル**（一対一）

| 項目         | カラム名 | データ型 | NOTNULL | ユニーク | 主キー | 外部キー | 説明                     | 
| ------------ | -------- | -------- | ------- | -------- | ------ | -------- | ------------------------ | 
| ユーザID     | user_id  | integer  | 〇      |          |        | 〇       | リツイートした人 | 
| ツイートID   | tweet_id | integer  | 〇      |          |        | 〇       | リツイート| 

**repliesテーブル**（一対一）
| 項目         | カラム名        | データ型 | NOTNULL | ユニーク | 主キー | 外部キー | 説明                             | 
| :----------- | :-------------- | -------- | ------- | -------- | ------ | -------- | -------------------------------- | 
| ユーザID     | user_id         | integer  | 〇      |          |        | 〇       |リプライする人  | 
| ツイートID   | tweet_id        | integer  | 〇      |          |        | 〇       | リプライツイート | 
| リプライ本文 | text            | text     | 〇      |          |        |          |                                  | 

**bookmarksテーブル**
| 説明           | カラム名 | データ型 | NOTNULL | ユニーク | 主キー | 外部キー | 説明                             | 
| -------------- | -------- | -------- | ------- | -------- | ------ | -------- | -------------------------------- | 
| ユーザID       | user_id  | integer  | 〇      | 〇       |        | 〇       | ブックマークを行ったユーザーのID | 
| ツイートID     | tweet_id | integer  | 〇      | 〇       |        | 〇       | ブックマークされたツイートのID   | 

・Created_atすることで順番ごとに表示できる
・ログインしているuser_idをwhere文で取得する

**followersテーブル**（中間テーブル、多対多）
| 項目         | カラム名         | データ型 | NOTNULL | ユニーク | 主キー | 外部キー | 説明             | 
| ------------ | ---------------- | -------- | ------- | -------- | ------ | -------- | ---------------- | 
| ユーザID     | user_id          | integer  | 〇      |          |        | 〇       | フォローした人   | 
| フォロワーID | follower_user_id | integer  | 〇      |          |        | 〇       | フォローされた人 | 

・人と人の関係のテーブル
・フォローを外せば、物理削除




**blocksテーブル**（中間テーブル、多対多）
| 項目             | カラム名      | データ型 | NOTNULL | ユニーク | 主キー | 外部キー | 説明             | 
| ---------------- | ------------- | -------- | ------- | -------- | ------ | -------- | ---------------- | 
| ユーザID         | blocker_id       | integer  | 〇      |          |        | 〇       | ブロックした人   | 
| ブロックユーザID | block_user_id | integer  | 〇      |          |        | 〇       | ブロックされた人 | 

・人と人の関係のテーブル
・Where mute_user_id != block_user_idでブロックされた人を表示しないようにする
・複数の場合はWhere in mute_user_id != [block_user_id,block_user_id]

**mutesテーブル**（中間テーブル、多対多）
| 項目         | カラム名     | データ型 | NOTNULL | ユニーク | 主キー | 外部キー | 説明             | 
| ------------ | ------------ | -------- | ------- | -------- | ------ | -------- | ---------------- | 
| ユーザID     | muter_id      | integer  | 〇      |          |        | 〇       | ミュートした人   | 
| ミュートユーザID | mute_user_id | integer  | 〇      |          |        | 〇       | ミュートされた人 | 

・人と人の関係のテーブル


**direct_messagesテーブル**
| 項目         | カラム名     | データ型 | NOTNULL | ユニク | 主キ | 外部キ | 説明 | 
| ------------ | ------------ | -------- | ------- | -------- | ------ | -------- | ---- | 
| ID 　　　| direct_messages_id | integer  | 　      |          |        |        |　　     | 
| ユーザID | user_id    | integer  | 〇      |          |        | 〇       |送信した人      | 
| 受信者ID | recipient_id | integer  | 〇      |          |        | 〇       |受信した人     | 
| 内容         | content      | text     | 〇      |          |        |          |メッセージの内容      |
| 画像         | image        | image     |       |          |        |          |   URL   |

・自分のページにはrecipient_idが表示される
・order by created_at ASC で下から新しい順に表示される

**notificationsテーブル**
| 項目 | カラム名        | データ型 | NOTNULL | ユニーク | 主キー | 外部キー | 説明 | 
| ---- | --------------- | -------- | ------- | -------- | ------ | -------- | ---- | 
| ID   | id              | integer  | 〇      | 〇       | 〇     |          | 通知のID     | 
|    ユーザID | user_id         | integer  | 〇      |          |        |          | 通知を受け取るユーザーのID     | 
|      | read     | boolean  | 〇      |          |        |          |       通知を見たかチェック    | 
|      | type   | tinyint     | 〇      |          |        |          | 1=いいね 　/ 2=リツイート / 3=リツイート     | 
|      | like_tweet_id | intger   | 〇      |          |        |          |     いいねされたツイート  | 
|      | like_user_id         | intger     |      |     |     |      |  いいねした人  | 
|      | retweet_tweet_id     | intger     |  |  |       |     | リツイートされたツイート     | 
|      | retweet_user_id      | intger     |         |          |        |         |リツイートした人      | 
|      | reply_post_id  | intger     |         |          |        |          |    | 
|      | reply_user_id  | intger     |         |          |        |          |    | 
|      | follower_user_id| intger    |         |          |        |          | フォローした人   | 


-----------------追加----------------



**mentionsテーブル<作成中>**　
| 項目         | カラム名 | データ型 | NOTNULL | ユニーク | 主キー | 外部キー | 説明                         | 
| ------------ | -------- | -------- | ------- | -------- | ------ | -------- | ---------------------------- | 
| ID 　　　　　| id       | integer  | 〇      | 〇       | 〇     |          | メンションのID               | 
| ユーザID     | user_id  | integer  | 〇      |          |        | 〇       | メンションされたユーザーのID | 
| ツイートID   | tweet_id | integer  | 〇      |          |        | 〇       | メンションされたツイートのID | 

**hashtagsテーブル<作成中>**　

| 項目           | カラム名 | データ型 | NOTNULL | ユニーク | 主キー | 外部キー | 説明             | 
| -------------- | -------- | -------- | ------- | -------- | ------ | -------- | ---------------- | 
| ID             | id       | integer  | 〇      | 〇       | 〇     |          | ハッシュタグのID | 
| ハッシュタグ名 | name     | string   | 〇      | 〇       |        |          | ハッシュタグ名   | 

**tweet_hashtagsテーブル<作成中>**　

| 項目           | カラム名   | データ型 | NOTNULL | ユニーク | 主キー | 外部キー | 説明                               | 
| -------------- | ---------- | -------- | ------- | -------- | ------ | -------- | ---------------------------------- | 
| ツイートID     | tweet_id   | integer  | 〇      |          |        | 〇       | ハッシュのID                       | 
| ハッシュタグID | hashtag_id | integer  | 〇      |          |        | 〇       | ハッシュタグのID                     | 


### YOUTUBE
usersテーブル
videosテーブル
commentsテーブル
likesテーブル
subscribersテーブル
playlistsテーブル
playlist_videosテーブル
subscriptionsテーブル
adsテーブル
ad_viewsテーブル
paymentsテーブル