DB設計したいNight #6 正規化 [online] https://dbnight.connpass.com/event/177859/
MySQLにはストレージエンジンがいくつかあるので、その辺はちょっとごっちゃになってると思います。InnoDBかMyISAMかで、少し話が違ってくるとは思うけど、そこまでは追えてません。 VARCHAR(n)は文字数 昔はバイト数だったような気もするけど、今は文字数を設定します。 VARCHAR(255)で良いと思う CHAR とは対照的に、VARCHAR 値は必要な文字数と、長さを記録する為の1バイト(255よりも長いカラムは2バイト)だけを利用して格納できます。 http://dev.mysql.com/doc/refman/5.1/ja/char.html VARCHARは可変長なので、余分に設定してもストレージを無駄に食う事は無いと思います。ただVARCHAR(256)以上は、長さの記録が1バイト増えるみたいなので、特に理由が無ければVARCHAR(255)に設定しておくのが良い
データベースに関して調べることって、業務的な側面から、わかりづらい単語や言葉ばっかり使って理解しづらいよね。 誰でも分かるように説明するのがプロなんだよなぁ。。。。まぁいいか。 プログラミングそのものに関してはそうでもないんだけどな。なので身近にあるもので例えてみる。 外部キー(foreign key)とは リレーショナルデータベース(RDB)で、テーブルのある列に、別のテーブルの特定の列に含まれる項目しか入力できないようにする制約。また、その際に指定する列。 参考: e-words.jp うん言葉で言ってもわかりづらいw 図で表してみる。 この左側の赤いやつが 外部キー 。別のテーブルの主キーを指してるでしょ?また、別のテーブルの主キーは 参照キー と呼ばれる。 外部キーの問題って? じゃあもし外部キーの参照先が更新されたり、削除されたらどうなるか。 animeテーブルの id = 2
こんにちは。クライアントワーク事業部でサーバサイドエンジニアをやってる@kazasikiです。 今年もやってきましたAdvent Calendar。1日目は少し緊張しますね。 挨拶はほどほどにして、さっそくプログラムの話を始めましょう。 クライアントワーク事業部とRailsについて エンジニアの方々であれば、Railsの紹介は不要かと思います。現在クライアントワーク事業部では多くのWebサイトをRailsで構築しています。比較的短い期間で小〜中規模のWebサイトを作り上げることが多く、品質と生産性を安定させる意味でも規約が多いWebフレームワークを使うのは理にかなった選択です。(少なくとも私はそう思ってます。) しかし、規約が多いRailsの中でも、人によって違う使い方をしてしまう機能がいろいろとあります。今回はその一つとしてrails db:seedやその周辺を取り挙げます。 Rails
N+1問題とは SQLクエリが 「データ量N + 1回 」走ってしまい、取得するデータが多くなるにつれて(Nの回数が増えるにつれて)パフォーマンスを低下させてしまう問題です。 次のように、何度もクエリが走ってしまい、その度に0.1msほどかかってしまってます。 Processing by PostsController#index as HTML Post Load (0.2ms) SELECT "posts".* FROM "posts" User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 1]] User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id",
[Rails]migrationで外部キーを設定する際に、参照先テーブルと異なるカラム名をつけたい場合 migration時に外部キーを設定する場合、referencesを使いますが、参照先テーブルと異なるカラム名をつけたい場合はどうしようと思い調べてみました。 Usersテーブルのuser_idを、Likesテーブルのuser_idとtarget_user_idの外部キーとして設定したい場合のサンプル migration# db/migrate/xxxx_create_likes.rb class CreateLike < ActiveRecord::Migration def up create_table :likes do |t| t.references :user t.integer :target_user_id, :null => false # references を使
1. テーブル定義 MySQL Workbench で外部キーの設定をしたい。 例えば、「人」 を 「グループ」 に 「割当て」 るモデルで考える。 「人」 (persons) 「グループ」 (groups) に対応したテーブルが定義済みだとする。これに対して、「割当て」 (assignments) に対応したテーブルを作成し、外部キーを設定したい。 2. SQL Development で外部キーを設定する場合 MySQL Workbench の Home において SQL Development を選択し、connection でデータベースに接続。 SQL Editor が開いたら、左ペインの Object Browser に表示されている データベースの Tables で右クリック > Create Table 。 MySQL には基盤となるデータベースエンジンが複数あり、この中で
かつては非常に高価なもので、手軽に導入できないという印象のあったデータベースですが、現在では、PostgreSQLやMySQL、Firebirdなどといったオープンソースのデータベースが商用のものに引けを取らない機能、性能を備えるようになり、それほど規模の大きくないWebアプリケーションであっても、あたりまえのようにデータベースが使用されるようになりました。 本特集では、Webアプリケーションを初めて開発するという方に向けて、データベース設計の基本について説明していきます。なお、一言にデータベースといってもいろいろなものがありますが、いわゆるテーブルによってデータを管理するリレーショナルデータベースを対象とします。 今回は、データベース設計の全体的な流れについて説明します。 データベース設計とは、データベースによってデータを管理できるように、現実の世界を抽象化してデータモデルを作成していく
いよいよデータベースの構築です。データベースの設計を後から変更するのは難しいことですから、最初にきちんとした計画をたてましょう。 正規化とは? 正規化の概要 リレーショナルデータベースには、リレーションの『正規化』という、データベースを設計、実装する際の重要なテクニックがあります。適切にリレーションの正規化が行われたデータベースは、データの一貫性が確保され、効率的なデータアクセスが行われます。データの安全性と使用時のパフォーマンスを向上させることができる正規化は、ぜひマスターしておきたいテクニックです。 Microsoft Excelのような表計算ソフトで表を作成した場合、リレーションのことを考慮する必要が無いので、通常は正規化が行われていない、非正規形になります。 たとえば、購入履歴をExcelで記録する際は、下記のような非正規形のテーブルで問題ありません。 これをリレーショナルデータベ
正規化とは、データを一元管理するための理論です。 1データ1箇所の原則を実現するために、1970年にE.F.Codd氏がリレーショナルモデルの理論として提案しました。正規化の理論は、データの冗長性を排除し、更新時の整合性を維持しやすくすることを目指しています。 具体的には、属性間の関連性を分析し、属性の最適なグループ化を図ることを目的としています。 一般には第3正規化まで行えば十分といわれていますが、本来は、あてはまる場合にはきちんと第5正規化まで行う必要があります。 まず、正規化の処理をする際によく出てくる関数従属という用語の意味を復習しておきましょう。 ◎ 関数従属とは ある属性Aの値が決まると他の属性Bの値が一意に決まるとき、「属性Bは、属性Aに関数従属である」(A→B)といいます。 完全従属とは、2の属性A、Bの間でA→Bが成立し、Aが複数の属性の集合で成り立っている場合、Aのいか
RailsのデフォルトのデータベースはSQLiteですが、後からMySQLに変更するためのメモ。 Railsは4.2.0で、MySQLは5.6です。 MySQLのインストール まずMySQLインストールして下さい。インストール方法は各自環境に合わせてググってください。(投げやり) MySQL側の準備 MySQLにデータベース作成する。環境ごとに3つ作る。 $ mysql -u root -p mysql> CREATE DATABASE db_development DEFAULT CHARACTER SET utf8; mysql> CREATE DATABASE db_test DEFAULT CHARACTER SET utf8; mysql> CREATE DATABASE db_production DEFAULT CHARACTER SET utf8;※文字コード指定しないとデ
さてこの記事でQNAP TS-219P IIにWordPress、MySQL、phpMyAdmin、WebServerをさくっとインストールは完了しました。 次はMySQLにDataBaseを作ろうとしたのですが、思わぬ壁にぶつかってしまったのです。きっと他の人も引っかかると思うのでメモを残しておきます。 phpMyAdminにログインできない まずはphpMyAdminを起動します。いつの間にか出来ていたこのアイコンをクリックすると・・・ こんな風に仲良くWordPressとphpMyAdminのアイコンが並んでいるので、phpMyAdminをクリック ここでハマりました。QNAPの管理画面のIDとPASSを入力するのかな?と思ったのですがハズレ。 正解は ユーザー名:root パスワード:admin でした。 MySQLにDBを作ろう 最初の関門を乗り越えてログインすると、さらなる試練
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く