私は最近Erlangに飛び込んでいます.Mnesiaを使用してデータベースの作業を行うことにしました.Mnesiaはあらゆる種類のErlangデータ構造を問題なく格納でき、簡単にスケーリングでき、リスト内包表記で使用できるなど.
標準の SQL データベースの場合、ほとんどの行は主キー (通常は自動インクリメント整数) で識別できます。デフォルトでは、Mnesia は行の最初のフィールドをキーと見なします。また、私の知る限り、自動インクリメント整数キーを持つ方法もありません。
テーブルを表すこれらの架空のレコードがあるとします。
-record(user, {name, salt, pass_hash, email}).
-record(entry, {title, body, slug}).
-record(user_entry, {user_name, entry_title}).
エントリのタイトルのように、リソースを識別するために、ユーザー名を使用するだけで十分な場合もありますが、完全性を維持するにはどうすればよいでしょうか?
ユーザーが名前を変更したり、編集後にエントリのタイトルが変更されたりするとします。データが正しく関連付けられていることを確認するにはどうすればよいですか? ユーザー名が変更されたときにそれを使用してすべてのテーブルを更新することは、どのように配置されていてもひどい考えのように思えます。
Mnesia である種の主キーシステムを実装する最良の方法は何でしょうか?
また、最初のフィールドが通常キーである場合、「user_entry」のような中間テーブルはどのようになりますか? そうでなければ、Mnesia で多対多の関係を表現するより良い方法は何でしょうか?