一段时间以来,我一直试图很好地掌握 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
最多,然后显示用户可以访问的注释 - 我还希望在查看便笺时,向其他有权访问该便笺的用户显示反向查找