しばらくの間、Azure テーブル ストレージを十分に理解しようと努力してきました。一般的には、それがどのように機能するかは理解していますが、リレーショナル データベースの考え方を揺るがすのに本当に苦労しています。私は通常、例から最もよく学ぶので、誰かが私を助けてくれるかどうか疑問に思っています. リレーショナル データベースを使用して問題を解決するための簡単なセットアップの概要を説明します。Azure テーブル ストレージを使用するように変換する方法を教えてもらえますか?
簡単なメモを取るアプリがあり、ユーザーがいて、各ユーザーは必要な数のメモを持つことができ、各メモには必要な数のユーザー (所有者または閲覧者) を持つことができるとしましょう。リレーショナル データベースを使用してこれを展開する場合、次のように展開する可能性があります。
データベースについては、次のようなものから始めます。
CREATE TABLE [dbo].[Users](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Username] [nvarchar](20) NOT NULL)
CREATE TABLE [dbo].[UsersNotes](
[ID] [int] IDENTITY(1,1) NOT NULL,
[UserID] [int] NOT NULL,
[NoteID] [int] NOT NULL)
CREATE TABLE [dbo].[Notes](
[ID] [int] IDENTITY(1,1) NOT NULL,
[NoteData] [nvarchar](max) NULL)
次に、制約との関係Users.ID and UsersNotes.UserID
だけでなく、参照整合性を強化するための関係も設定します。Notes.ID and UsersNotes.NoteID
アプリケーションの場合、ORM に、これらのそれぞれに一致する名前プロパティを持ついくつかのエンティティを生成させます。
public class Users
{
public int ID { get; set; }
public String Username { get; set; }
}
// and so on and so forth
この設計はリレーショナル データベースに完全に依存していることに気付きました。私が探しているのは、Azure テーブル ストレージやその他の非リレーショナル データ ストレージ技術を使用するために、この一連の考え方を揺るがす方法についてのアドバイスです。
また、議論のために、私は Azure SDK をインストールし、それを試してみたと仮定しましょう。しかし、SDK の使用に関する私の実務知識は限られています。上記のようになります。良い出発点は、SDK を理解するのに役立ちます。参照ポイントがあるからです。
完全を期すために、
- メモ データは最初に作成されたときに頻繁に変更され、時間の経過とともに徐々に減少します
- ユーザーには多くのメモがあり、メモには複数のユーザー (同時ではなく閲覧者のみ) が含まれる場合があります。
- かなり少数のユーザー (数百人未満) を想定していますが、かなりの数のメモ (ユーザーごとに数百人未満) を想定しています。
Username
ほとんどに対してクエリを実行し、ユーザーがアクセスできるメモを表示することを期待しています- また、メモを表示するときに、そのメモへのアクセス権を持つ他のユーザーを表示するために、逆引きを期待しています