问题是,从性能上看,这些选项中的哪一个(显然,可能还有第三个我们没有考虑)是最好的。我认为第二种选择我看到了几个缺陷,但我不确定。就延迟和速度而言,遍历数组(如果添加了服务,或者由于用户首先使用了service2,然后使用了Service1),遍历数组的次数会更多)比选项1要高得多。此外,一个用户在一个服务下,这意味着要遍历整个数组,寻找并消除它。我不知道你是专家,你有什么建议吗?所有这些都将上传到云(azure)上,所以所有的请求都将上传到云上
备选方案2比备选方案1好。但是,恕我直言,还是不太好。
千万不要在数据列中存储逗号分隔的列表。如果你这样做了你会后悔的。(它们的搜索成本很高。)
你想要这样的东西。三个表,一个用于用户,另一个用于服务,还有一个所谓的联接表,在两者之间建立多对多的关系。
+-----------+ +-------------+ +-----------+
|user | |user_service | |service |
+-----------+ +-------------+ +-----------+
|user_id +--->|user_id |<----+service_id |
|givennamee | |service_id | |name |
|surname | +-------------+ +-----------+
|is_active |
+-----------+
user_service
中的每一行都意味着用户有权使用该服务。若要授权用户,请插入一行。若要吊销授权,请删除该行。
若要了解用户是否可以使用服务,请使用此查询。
SELECT user.user_id
FROM user
JOIN user_service USING (user_id)
JOIN service USING (service_id)
WHERE user.givenname = 'Bill' AND user.surname='Gates'
AND service.name = 'CharityNavigator'
如果查询返回user_id
,则所选用户可以使用所选服务。
若要获取每个用户的服务列表,请使用此查询。
SELECT user.user_id, user.givenname, user.surname,
GROUP_CONCAT(service.name) service_names
JOIN user_service USING (user_id)
JOIN service USING (service_id)
GROUP BY user.user_id
一些解释:几乎总是最好的方法是在表中为您的服务之类的东西构建行,而不是列或列中用逗号分隔的列表。为什么?
>
您可以在几年后添加新的服务--只要您想要的数量就可以--而不需要重新工作数据库代码。
DBMS(包括MySQL)可以很好地处理连接操作。
在大多数关系数据库管理系统中,执行commalist_column SOMEHOW_CONTAINS(some_id)的效率低得令人恶心。执行
column=some_id
的效率要高得多,因为它可以使用html" target="_blank">索引。
通常,列数较少的行比列数较多的行工作得更好。
在生产中,向数据库中添加行要比添加列便宜得多。添加列意味着更改表定义。该操作可能需要停机。
当您将列用于诸如服务之类的东西时,您正在创建一个封闭的系统。当您使用行时,您的系统是开放式的。
我可以建议您阅读数据库规范化吗?不要被所有的CS行话吓倒。只需看看一些如何对各种数据库进行规范化的示例即可。
也许读一下实体关系数据库建模?
我开始学习JSP和Tomcat容器,并且知道目录必须如何存储,但有几件事让我感到困惑: 如果我们只使用web app,为什么我们需要这里的其余文件夹?(突出显示为蓝色)。我可以只是删除他们和加载我的项目“web”作为根?
我有一个quarkus应用程序,当我用下面的命令构建应用程序时,进程第一次开始完美地编译quarkus:dev-DskipTests=true 成功启动的日志: 但是当我停下来重新开始这个过程时,过程并没有开始... 启动失败的日志: 当我尝试重新启动机器,然后启动quarkus服务时,它会再次工作。 pom。xml: 如果有人遇到过类似的行为,请告诉我,这可能是什么根源。
我希望基本上在我的应用程序内翻拍Kik。对于我在firebase聊天应用程序上看到的大多数指南,都有一个主要的消息节点,然后在该节点下面有一个扇出,每个用户都有引用主列表中消息的消息。 根据目前我的Firebase的布局方式,实现类似以下内容会更容易: 因此,当用户向对方发送消息时,我会更新发送者和用户下面的“聊天消息”节点。 有什么理由不这样做吗?我看到每个人都按照我描述的第一种方式进行,但我看
问题内容: 我正在建立一个用于学习/实验和小型项目目的的小型MVC框架。由于完整的MVC框架和ORM对于仅几个数据库调用来说就算过头了,因此我需要了解模型内部的基础知识。 使用空类,在哪里我必须调用对象才能进行数据库调用? 在模型内部调用查询会是什么样子? 另外,在哪里可以找到MVC的初学者Web /书籍资源(包含许多示例代码)?我听说过很多术语,例如业务逻辑和数据库逻辑。我记得在某处读过,您应该
我试图在使用OAuth2.0的移动应用程序的Web API中实现委托授权。根据规范,隐式授权流不支持刷新令牌,这意味着一旦某个访问令牌在特定时间内被授予,用户必须在令牌到期或被撤销时再次授予该应用程序的权限。
我有一个Android应用程序和一个网络应用程序(托管在Firebase Hosting上)。Android 应用会生成数据并将其保存到 Firebase 实时数据库中。Android 应用和 Web 应用都可以查看数据。 从Firebase数据库生成数据PDF的最佳位置是哪里——Android应用程序还是Web应用程序(通过JavaScript,例如jsPDF)?它将保存在Firebase存储中