[SQL] いろんなやつのまとめ
いつかサービスごとにわけるかも
SQLite
- 単独のアプリケーションとして動作させることが可能
- 非常にこんぱくと!
- アプリと一緒に配布することも可能
- ユーザー/パスワードという概念はない
- データソースは
/data/data/com.hogehoge/files/
に保存される
MAUI での SQLite
Android での SQLite.NET の使用 - Xamarin
ORM をつかってかんたんにかける!
NuGet
- Microsoft.Data.Sqlite
- sqlite-net-pcl
- SQLitePCLRaw.provider.dynamic_cdecl
書き方サンプル
1つのテーブルのみであれば結構かんたんに設定できた!らぶORM
ただし JSON ができないので注意。泣ける
Room
SQLiteのORMみたいな立ち位置。仲介してくれる人
Googleが、AndroidでSQLiteを使うときはRoom推奨している
Truncateはない
MySQL でいうとらんけーとがSQLiteにはない
テーブルのデータをすべて削除するにはDeleteする必要がある
(そもそもとらんけーと自体がMySQLの方言みたいなもの…という見方もある)
[SQLite] 複数テーブルの Update について
例えば MySQL ではこんなかんじのことを SQLite で実現したい
update table_1 t1, table_2 t2 set
t1.hogehoge = '1'
, t2.fugafuga = '2'
where t1.hoge_id = t2.hoge_id
and t1.hoge_id = 1;
結論:そんなものはない(多分)
見つけることができなかった;;
ので、おとなしく
- トランザクション開始
- 1個目のUpdate文を発火
- 2個目のUpdate文を発火
- こみっと
で対応する
正規化
データベース上で扱うデータの重複を削除し、データの更新時に発生する異常を取り除くこと
正規化手順①
- 繰り返し項目を取り除く
- 2つ以上のレコードが保存されているドメインを取り除く
正規化手順②
- テーブルの各候補キーに従属する部分関数従属性が整理された状態にする
- 候補キー:「レコードを一意に特定するための属性(=カラム)」または「レコードを一意に特定するための属性の組み合わせ」
正規化手順③
- 候補キー以外の列に関数従属している列が整理された状態にする
マイグレーション
データベースを削除してから作り直すと、DB に保存されている情報が全て削除されてしまう
⇒DB に保存されているデータを保持したまま、テーブルの作成やカラムの変更などを行う DB マイグレーションをすればよい
データベースコンテキスト
コンテキストとは 1 つ以上のデータ処理アプリケーションで実行する操作またはシミュレーションに必要なリソースの集合
コンテキストを使用すると異なるデータベースやスキーマ上で同一ジョブを実行することができる
ORM
端的にいえば、データベースとオブジェクトの間の橋渡しをしてくれる仕組み
C#のORM(オブジェクト関係マッピング)における理想形を考えてみる - Qiita
ORM の機能を十分に備えた C# ライブラリは EF(EntityFramework) しかないが、パフォーマンスが遅い
⇒ C# は ORM とか使わずに直書きの方が効率はいい??
クエリビルダ
SQL のクエリ文を生成するために用意された一連のメソッド
まりあちゃん
無料でつかえるオープンソース。MySQLから派生したDBのため、MySQLと共通点が多い
よくLinuxで使われている印象だけど、Windowsでも使用できる
セキュリティなど、MySQLよりも優れている点が多い