sequelize.define()の中身って何を書けばいいの？

sequelize.defineの中に何を書けばいいのかよくわからなかったのでメモ
#モデル名
```JavaScript
const aaa = sequelize.define(
    'bbb',//モデル名
    {
        
})
```
上記で``bbb``になっているところに``モデル名``と言うモノを書くらしい。

## モデルって何？

[Sequelizeを使ってみた](https://polidog.jp/2015/12/19/sequelizejs/)にはこのような記述がある


># [Sequelizeを使ってみた](https://polidog.jp/2015/12/19/sequelizejs/)
 モデルを作ってみる
「テーブル=モデル」という表現は嫌いなんですが、「郷に入っては郷に従え」という事でモデルを作るとあえて言います。

これを見る限り、``テーブル＝モデル``という事になるが、これだけでは判断できないので、他にも同じような情報がないか探してみると明確に記載されているページを見つけた。

[Model | Sequelize](https://sequelize.org/master/class/lib/model.js~Model.html)

> #[Model | Sequelize](https://sequelize.org/master/class/lib/model.js~Model.html)
Model
A Model represents a table in the database. Instances of this class represent a database row.
>> #[翻訳](https://translate.google.co.jp/?hl=ja#view=home&op=translate&sl=en&tl=ja&text=A Model represents a table in the database. Instances of this class represent a database row.)
モデルは、データベース内のテーブルを表します。 このクラスのインスタンスは、データベース行を表します。

**この事から``モデル ＝ データベース内のテーブル``という事が分かった**
ので、

```JavaScript
const aaa = sequelize.define(
    'bbb',//テーブル名 ← 「モデル名」から「テーブル名」に変更
    {
        
})
```
このように解釈した。


# {}の中身

```JavaScript
const aaa = sequelize.define(
    'bbb',//テーブル名
    {
        ----→ここ←----
})
```
次は``ここ``に何を書けば良いのか分からないので調べてみる。

## ``ここ``の書き方
色々な例を見た結果なんとなく理解した

```JavaScript
const Sequelize = require('sequelize');

const aaa = sequelize.define(
    'bbb',//テーブル名
    {
        ccc:{//テーブル内にあるcccという行の設定
            type:Sequelize.INTEGER,//行のタイプを設定
            primaryKey: true,//cccと言う行を主キーに設定
            autoIncrement: true//idなどを指定する時によく使う自動で数が増えていくやつをtrueに設定
        },
        ddd:{//テーブル内にあるdddという行の設定
            type: Sequelize.TEXT//行のタイプを設定

        }
});
```


# 行設定一覧

> # [Manual | Sequelize](https://sequelize.org/v5/manual/models-definition.html)
```JavaScript
ValidateMe.init({
  bar: {
    type: Sequelize.STRING,
    validate: {
      is: ["^[a-z]+$",'i'],     // 文字のみを許可します。
      is: /^[a-z]+$/i,          // 実際の正規表現を使用した前の例と同じ（Google翻訳ではあまり意味が理解できない文章になってしまった）
      not: ["[a-z]",'i'],       // 文字を許可しません。
      isEmail: true,            // メール形式をチェックします（foo@bar.com）（メールアドレスのみ という意味だと思う）
      isUrl: true,              // URLフォーマットをチェックします（http://foo.com）(URLのみ という意味だと思う）
      isIP: true,               // IPv4（129.89.23.1）またはIPv6形式のチェック(ipアドレスのみ という意味だと思う）
      isIPv4: true,             // IPv4のアドレスのみ
      isIPv6: true,             // IPv6のアドレスのみ
      isAlpha: true,            // 文字のみ
      isAlphanumeric: true,     // 英数字のみが許可されます。例えば 「_abc」は失敗します。
      isNumeric: true,          // 数字のみを許可します。
      isInt: true,              // 有効な整数をチェックします。
      isFloat: true,            // 有効な浮動小数点数をチェックします
      isDecimal: true,          // 数値をチェックします
      isLowercase: true,        // 小文字をチェック
      isUppercase: true,        // 大文字をチェック
      notNull: true,            // nullは許可されません
      isNull: true,             // nullのみを許可
      notEmpty: true,           // 空の文字列を許可しない
      equals: 'specific value', // 特定の値のみを許可する
      contains: 'foo',          // 特定の部分文字列を強制する
      notIn: [['foo', 'bar']],  // 値がこれらのいずれでもないことを確認してください
      isIn: [['foo', 'bar']],   // 値が次のいずれかであることを確認してください
      notContains: 'bar',       // 特定の部分文字列を許可しない
      len: [2,10],              // 長さが2〜10の値のみを許可します
      isUUID: 4,                // uuidのみを許可(UUIDについては下で少し解説）
      isDate: true,             // 日付文字列のみを許可
      isAfter: "2011-11-05",    // 特定の日付以降の日付文字列のみを許可する
      isBefore: "2011-11-05",   // 特定の日付より前の日付文字列のみを許可する
      max: 23,                  // 23以下の値のみを許可
      min: 23,                  // 23以上の値のみを許可
      isCreditCard: true,       // 有効なクレジットカード番号を確認する
```

## uuidって？

> [UUIDとは「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word13163.html)
UUIDとは
いつでも誰でも作れるけど、作ったIDは世界中で重複しないことになっているID
です。

# その他データタイプ

> #[Manual | Sequelize](https://sequelize.org/v5/manual/data-types.html)

>```javascript
> Sequelize.STRING                      // VARCHAR(255)
> Sequelize.STRING(1234)                // VARCHAR(1234)
> Sequelize.STRING.BINARY               // VARCHAR BINARY
> Sequelize.TEXT                        // TEXT
> Sequelize.TEXT('tiny')                // TINYTEXT
> Sequelize.CITEXT                      // CITEXT      PostgreSQL and SQLite only.

> Sequelize.INTEGER                     // INTEGER
> Sequelize.BIGINT                      // BIGINT
> Sequelize.BIGINT(11)                  // BIGINT(11)

> Sequelize.FLOAT                       // FLOAT
> Sequelize.FLOAT(11)                   // FLOAT(11)
> Sequelize.FLOAT(11, 10)               // FLOAT(11,10)

> Sequelize.REAL                        // REAL        PostgreSQL only.
> Sequelize.REAL(11)                    // REAL(11)    PostgreSQL only.
> Sequelize.REAL(11, 12)                // REAL(11,12) PostgreSQL only.

> Sequelize.DOUBLE                      // DOUBLE
> Sequelize.DOUBLE(11)                  // DOUBLE(11)
> Sequelize.DOUBLE(11, 10)              // DOUBLE(11,10)

> Sequelize.DECIMAL                     // DECIMAL
> Sequelize.DECIMAL(10, 2)              // DECIMAL(10,2)

> Sequelize.DATE                        // mysql / sqliteの場合はDATETIME、postgresの場合はTIMESTAMP WITH TIME ZONE
> Sequelize.DATE(6)                     // DATETIME(6) for mysql 5.6.4+. Fractional seconds support with up to 6 > > > digits of precision
> Sequelize.DATEONLY                    // DATE without time.
> Sequelize.BOOLEAN                     // TINYINT(1)

> Sequelize.ENUM('value 1', 'value 2')  // 許可された値「値1」と「値2」を持つENUM
> Sequelize.ARRAY(Sequelize.TEXT)       // 配列を定義します。 PostgreSQLのみ。
> Sequelize.ARRAY(Sequelize.ENUM)       // ENUMの配列を定義します。 PostgreSQLのみ。

> Sequelize.JSON                        // JSON列。 PostgreSQL、SQLite、およびMySQLのみ。
> Sequelize.JSONB                       // JSONB列。 PostgreSQLのみ。

> Sequelize.BLOB                        // BLOB（PostgreSQLの場合はbytea）
> Sequelize.BLOB('tiny')                // TINYBLOB (bytea for PostgreSQL. Other options are medium and long)    TINYBLOB（PostgreSQLの場合はbytea。他のオプションは中長です）

> Sequelize.UUID                        // PostgreSQLおよびSQLiteのUUIDデータ型、MySQLのCHAR（36）BINARY（>> defaultValue：Sequelize.UUIDV1またはSequelize.UUIDV4を使用して、sequelizeが自動的にIDを生成するようにします）

> Sequelize.CIDR                        // PostgreSQLのCIDRデータ型
> Sequelize.INET                        // INET datatype for PostgreSQL
> Sequelize.MACADDR                     // MACADDR datatype for PostgreSQL

> Sequelize.RANGE(Sequelize.INTEGER)    // int4rangeの範囲を定義します。 PostgreSQLのみ。
> Sequelize.RANGE(Sequelize.BIGINT)     // Defined int8range range. PostgreSQL only.
> Sequelize.RANGE(Sequelize.DATE)       // Defines tstzrange range. PostgreSQL only.
> Sequelize.RANGE(Sequelize.DATEONLY)   // Defines daterange range. PostgreSQL only.
> Sequelize.RANGE(Sequelize.DECIMAL)    // Defines numrange range. PostgreSQL only.

> Sequelize.ARRAY(Sequelize.RANGE(Sequelize.DATE)) // tstzrange範囲の配列を定義します。 PostgreSQLのみ。
> Sequelize.GEOMETRY                    // Spatial column.  PostgreSQL (with PostGIS) or MySQL only.
> Sequelize.GEOMETRY('POINT')           // Spatial column with geometry type. PostgreSQL (with PostGIS) or MySQL only.
> Sequelize.GEOMETRY('POINT', 4326)     // Spatial column with geometry type and SRID.  PostgreSQL (with PostGIS) or MySQL only.
>```