create tables

sqlでtableをつくっていく。いずれはconcatで結合する。

mysql> show tables;
+—————–+
| Tables_in_addb |
+—————–+
| account_lists |
| companies_lists |
| documents_lists |
| profiles |
| registers |
+—————–+
5 rows in set (0.05 sec)

– laravelで複数テーブルでやるところまで
– ER図を作れないといけない。
– mysqlだけでなく、oracleも
– concatも

mysqlの日付・時刻型

DATE: YYYY-MM-DD
TIME: HH:MM:SS
DATETIME: YYYY-MM-DD HH:MM:SS
TIMESTAMP: YYYY-MM-DD HH:MM:SS
YEAR: YYYY

なるほど、格納する値によって型も変わってくるのね♪

updated_at(更新日時)などはYYY-MM-DD HH:MM:SSで入力、
ラジオボタンなど選択肢が2択の場合は、tinyint(1)とする。
名前は日本人ならvarchar(20)で十分? まーmiddle nameがありませんからね。
会社名などもvarchar(50)で十分でしょうね。

あら、こう考えると、varchar(255)も殆ど必要なさそうな。。

emailは?
RFC 5321(Simple Mail Transfer Protocol)によると、
-ローカル部(@の前)64オクテット
-ドメイン部(@の後)255オクテット
-全体 256オクテット

よって、varchar(255)あれば十分だそうだ。

ああ、こりゃER図マスターしないとあかんな。。
ところで、 id int primary key auto_incrementって、すべてのテーブルに入れるのか?
例えば、profiles と accountsというtableがあった場合、両方 id int primary key auto_incrementとするのか、profile_id int primary key auto_increment, account_id int primary key auto_increment とした方が望ましいのか…

悩ましい。とりあえず、まずはid int primary key auto_incrementで行こう。

MySQLの文字列型

char 255
varchar 255
tinyblob 255
blob 65535
mediumblob 16777215
longblob 4294967295
tinytext 255
mediumtext 65535
mediumtext 16777215
logintext 4294967295
enum(“”,””…)
set(“”,””,…)

-CHAR型の特徴的な点は,値を格納された時に,もし文字列がテーブル作成時に指定された文字数よりも短かった場合,文字列の右側の末尾にスペースで補完
-VARCHAR型の特徴的な点として,CHAR型と違ってテーブル作成時に指定された文字列よりも短かった場合に,データに合わせた文字列として可変長で保存

こうみると、computer science的にはvarcharの方がメモリの無駄がないように見える。

varcharとtext
行の中身がdataか(varchar)、dataへのポインタか(text)
varchar:文字数で指定(日本語でも、最大65535文字まで入る)
text:byteで指定

あんまりcharやtextのメリットがわからん。。

MySQLの数値型

数値型、文字型、日付・時刻型がある。
ああ、この知識は絶対必要だ。

数値型
TINYINT: -128~127
SMALLINT: -32768~32767
MEDIUMINT: -8388608~8388607
INT: -2147483648~+2147483647
BIGINT: -9223372036854775808~+9223372036854775807
FLOAT(M.D):-3.402823466E+38 ~ -1.175494351E-38,0
DOUBLE(M.D): -1.7976931348623157E+308 ~ -2.2250738585072014E-308
DECIMAL:MとDで変化

よく使用するのはINT, Float, Doubleはよく使用しますね。
tinyint, smallint, mediumintは特殊でしょうか。
使ってみたいです。

データベースオブジェクトの命名規則

対象は
– テーブル名
– カラム
– インデックス

1.全般 大文字を利用しない
× DOCUMENT
× Document
〇 document

2.複数単語の連携はスネークケース
× tableName
× TableName
× tablename
〇 table_name

3. 略名は利用しない
× start_dt
× maker_cd
〇 start_date
〇 maker_code

4. テーブル名は複数形
× document
〇 documents
× category
〇 categories

5. 複数x複数
× usercategories
× user_categories
〇 users_categories

6. カラム
id, created_at, updated_atは必須

7. 他のテーブルとジョインするカラムはテーブル名(単数)_id
〇 category_id

8. 時間を表すカラムは受動態_on、受動態_at
〇 created_at
〇 crosed_on

なるほど、これは非常に勉強になる。
ありがたや、ありがたや!

laravel mysqlの設定

まずdatabaseを作る。
+——————–+
| Database |
+——————–+
| information_schema |
| laravel57 |
| mysql |
| performance_schema |
| test |
+——————–+
5 rows in set (0.00 sec)

.envファイル

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel57
DB_USERNAME=root
DB_PASSWORD=

config/app.php のtimezone, localeも併せて編集する。

続いてModelを作成する。
[vagrant@localhost laravel]$ php artisan make:model Article –migration
Model created successfully.
Created Migration: 2018_09_19_234806_create_articles_table

migration fileが作られたようだ。。
migration fileの中身

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateArticlesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('articles');
    }
}

migration fileとは?

マイグレーションはデータベースのバージョンコントロールの一種。データベーススキーマの修正と現状のスキーマの状態を最新状態に保つことを両立させてくれる。典型的なマイグレーションはアプリケーションのスキーマを簡単に管理するためのスキーマ・ビルダーと一緒に使用される。

EIPとは?

– 企業内情報ポータルという意味でのEIP(Enterprise Information Portal)
– IPアドレスの一種であるEIP

Elastic IPという、Amazon Web Services(AWS)の文脈で用いられるEIP

Elastic IPアドレスは、AWSに登録したアカウントに紐つけされるIPアドレスです。IPアドレスは基本的にパブリックIPアドレスとプライベートIPアドレスの2つに分けることができ、パブリックIPアドレスはインターネットを通じて機器を利用する際に割り当てられるアドレス
一方のプライベートIPアドレスはインターネットではなくローカルのネットワークでのみ割り当てられるIPアドレスで、インターネットからは遮断されたIP

EC2ダッシュボードで、パブリックとプライベートのIPがありますね。
IPv4 パブリック IP
プライベート IP

Elastic IP、EIPはパブリックIPの方。なるほど。

digコマンド

-「dig」コマンドはDNSサーバに問い合わせることで、ドメイン名からIPアドレスを調べるコマンド
– nslookupコマンドやhostsコマンドとよく似た機能

[vagrant@localhost app]$ dig www.google.co.jp
-bash: dig: コマンドが見つかりません

あれ? もう死にそうだー

EC2 インスタンスタイプ比較

インスタンスタイプはさまざまな CPU、メモリ、ストレージ、ネットワークキャパシティーの組み合わせによって構成されているため、アプリケーションのリソースとして適切な組み合わせを柔軟に選択できる。

要件に応じてリソースをスケールできる。

T3…T3 インスタンスは、ベースラインレベルの CPU パフォーマンスを実現する次世代の汎用バーストインスタンスタイプで、いつでも必要に応じて CPU 使用率をバーストさせる機能を備えている。
T3 インスタンスは、コンピューティング、メモリ、ネットワークの各リソースのバランスが良く、幅広い汎用ワークロードに適している。
ベースラインのしきい値下でワークロードが動作しているときに CPU クレジットを蓄積
– CPU クレジットと、一貫したベースラインパフォーマンスによって制御されるバースト可能な CPU
– ピーク時のパフォーマンスを確保するUnlimited モード (デフォルト) と、毎月のコストを予測できる標準モードオプション
– AWS Nitro System と高周波のインテル Xeon スケーラブルプロセッサにより、T2 インスタンスに対して最大 30% の価格パフォーマンスの向上を実現

T2 インスタンスは、ベースラインレベルの CPU パフォーマンスを提供し、ベースラインを超えてバーストする機能を備えているバーストパフォーマンスインスタンス
ワークロードに必要とされる限り、高い CPU パフォーマンスを維持できます。ほとんどの汎用ワークロードについて、T2 Unlimited インスタンスは追加料金を一切生じることなく十分なパフォーマンスを提供
– 高クロックのインテル Xeon プロセッサ
– CPU クレジットと、一貫したベースラインパフォーマンスによって制御されるバースト可能な CPU
– 最も低コストな汎用インスタンスタイプであり、無料利用枠の対象*

M5 インスタンスは、最新世代の汎用インスタンス
このファミリーでは、コンピューティング、メモリ、ネットワークの各リソースがバランスよく提供されるため、多くのアプリケーションに適している。
– インテル Advanced Vector Extension (AVX-512) の新しい命令セットを搭載した、インテル Xeon® Platinum 8175 プロセッサ (2.5 GHz)
– さらに大きなインスタンスサイズ m5.24xlarge で、96 コアの vCPU と 384 GiB のメモリを提供
– 拡張ネットワーキングを採用した最大 25 Gbps のネットワーク帯域幅

M4 インスタンスでは、コンピューティング、メモリ、ネットワークの各リソースがバランスよく提供されるため、多くのアプリケーションに適している
– インテル Xeon® E5-2686 v4 (Broadwell) プロセッサ (2.3 GHz) またはインテル Xeon® E5-2676 v3 (Haswell) プロセッサ (2.4 GHz)
– デフォルトで EBS 最適化、追加料金なし

各 vCPU はインテル Xeon コアのハイパースレッド
インスタンスタイプによって使用しているプロセッサーが違いますね。