gpt4 book ai didi

database-design - 单独的客户帐户的单个或单独的数据库?

转载 作者:行者123 更新时间:2023-12-03 23:46:53 26 4
gpt4 key购买 nike

我正在开发一个从智能卡收集数据的应用程序。我希望能够将该应用程序作为多个客户帐户的 Web 服务运行。问题是,我应该为每个帐户创建一个单独的数据库,还是应该设计一个包含所有帐户数据的数据库?首先,我认为单个数据库是显而易见的答案,但结果是 AccountID必须在几乎所有地方使用,在表、索引、约束、查询、检查等中。

在此应用程序中,没有要在帐户之间共享的单个字节数据。

首先,让我们看看一个帐户的单独数据库的外观:

CREATE TABLE CardHolder ( 
CardHolderID int, -- primary key
CardHolderUniqueName nvarchar(30) );

CREATE TABLE SmartCard (
SmartCardID int, -- primary key
CardHolderID int,
CardUniqueName nvarchar(30) );

再加上一些唯一性约束,
ALTER TABLE CardHolder ADD CONSTRAINT UQ_CardHolderName UNIQUE (CardHolderUniqueName);
ALTER TABLE SmartCard ADD CONSTRAINT UQ_CardName UNIQUE (CardUniqueName);

现在,如果我将所有内容都放在一个数据库中,这意味着多个帐户可以处理相同的持卡人和智能卡,但这些帐户不应看到彼此的数据。因此,智能卡在帐户中是唯一的,但在整个数据库中不是。因此,每个约束都必须包含一个 AccountID,
CREATE TABLE CardHolder ( 
CardHolderID int, -- primary key
CardHolderUniqueName nvarchar(30),
AccountID int );

CREATE TABLE SmartCard (
SmartCardID int, -- primary key
CardHolderID int,
CardUniqueName nvarchar(30)
AccountID int );

ALTER TABLE CardHolder
ADD CONSTRAINT UQ_CardHolderName UNIQUE (AccountID, CardHolderUniqueName);
ALTER TABLE SmartCard
ADD CONSTRAINT UQ_CardName UNIQUE (AccountID, CardUniqueName);

在实际的数据库中,会有更多的表、列和几个索引(用于按到期日等列出)加载,并且必须在任何地方都包含 AccountID 列。

对我来说似乎有点困惑,首先将所有帐户放在一个数据库中,然后通过在每个表和几乎每个约束和索引中都有一个 AccountID 列来将它们分开。我还需要找到或发明某种行级安全性,以防止用户访问其他帐户的数据。那么,我是否有为每个帐户创建单独数据库的正当理由,或者“真正的数据库设计者”是否总是将所有内容都保存在一个数据库中?

最佳答案

在设计 Multi-Tenancy 应用程序时,有几件事需要牢记,包括正如您的问题所述,架构设计,但还应考虑许可成本、可扩展性等事项。 This article describes the three most common approaches for designing a multi-tenant application ,包括优点和缺点。检查一下。

链接到文章的 pdf 版本:http://ramblingsofraju.com/wp-content/uploads/2016/08/Multi-Tenant-Data-Architecture.pdf

关于database-design - 单独的客户帐户的单个或单独的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4449621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com