我正在创建一个与 Discord 具有类似角色和权限系统的应用程序。
基本上
我不知道如何设计这样的系统。最初,我想我应该有一个roles表,对于每个权限都会有一个布尔列,例如:can_change_nickname。
但这似乎不太正确...
如果您有任何推荐的读物,或者可以提供详细说明为什么这样做的答案,我将非常感激。
USER是 1 个或多个的成员GROUPSGROUP可以有 1 个或多个ROLESROLE可以有 1 个或多个PERMISSIONSUSER只能PERMISSION通过将 aROLE与这些 一起分配来获得PERMISSIONS。GROUP将根据应用程序提供的功能和内容类型共享通用权限ROLES可以共享相同的PERMISSIONS。所以看起来我需要一个角色和权限的表。现在我只需要找到PERMISSIONS表格的样子。
为了便于论证,让我们假设我在单个 SQL Server 数据库中有以下表。
mySchema.Users
mySchema.Products
--
secondSchema.Users
secondSchema.Contracts
secondSchema.ContractItems
--
oldSchema.People
oldSchema.Table1
oldSchema.Table2
oldSchema.Table3
oldSchema.Table4
--
and so on and so forth
Run Code Online (Sandbox Code Playgroud)
每个“模式”都完全独立于其他“模式”。它们位于单个数据库中的唯一原因是托管和成本限制。在一个完美的世界中,这些本来应该在单独的数据库中。
当(如果有的话)我需要将 secondSchema 移动到一个新数据库时,我需要做什么,这完全是因为它的使用量增加了,现在需要将它存放在自己的数据库中。
我已经查看了关于何时使用非 dbo 模式与新数据库的决策标准,正如我上面所说的,它们在同一个数据库中没有关系或事务的理由。他们在那里是出于成本原因。
我有一个 Oracle DB (10.2),我有一个顾问 (Dogbert),我想在它上面做一些工作。特别是他们需要更改我的许多用户使用的模式(我们称之为 Wally)中表的表结构。
我不想向 Dogbert 提供 Wally 架构帐户的密码。所以我为 Dogbert 创建了一个临时帐户。
如何授予 Dogbert 的帐户权限以更改 Wally 架构的结构?我知道我当然可以给 Dogbert 插入/更新/删除/选择,但这不会影响结构。
我对数据建模很陌生,所以如果我错过了一些明显的东西,请原谅。我试图决定一个模式(或者可能是一个 DBMS)来处理一些数据,其中有很多可能的属性(可能是 60-100),但只有少数适用于每条记录。这是我看到的选项。
只需将每个属性包含为列,对于任何给定记录,大多数属性将为 NULL。
优点:保持架构简单,保持查询简单
缺点:不优雅,笨拙,添加/删除属性需要更改架构
用于列出属性及其值的单独表格。这就是我之前看到这个问题的处理方式。例如,WordPress 在他们的*meta表格中使用了这样的东西。
优点:概念上易于理解,灵活
缺点:查询构造变得很痛苦,性能受到影响,最终会得到大量重复数据(即一遍又一遍地列出相同的属性名称)。
使用专为处理无模式数据而构建的 DBMS。我看过 MongoDB、RethinkDB 和 OrientDB。OrientDB 看起来很酷,但我不懂 Java,而且它似乎主要是 Java 的东西(例如,PHP 驱动程序看起来有问题)。
优点:专为处理灵活的模式而构建,速度快
缺点:关系似乎很困难,我没有使用它们的经验,似乎有很多重复的数据(例如,如果我想更改属性名称会发生什么?),查询似乎更复杂
附带说明一下,此应用程序不会获得很多流量,并且并发连接也很少。因此,可扩展性是一个相当小的问题。感谢您的任何建议。
假设我有一个非常简单的表来存储类似变量的数据,如下所示:
+-----------+-----------------+
| key | value |
+-----------+-----------------+
| site_url | helloworld.com |
| site_name | Hello World |
| time_zone | Asia Taipei |
+-----------+-----------------+
Run Code Online (Sandbox Code Playgroud)
我还需要创建一个ID列吗?key列设置为主键key将是唯一的 我创建了一个带有大写字母的架构,如下所示:
CREATE SCHEMA "requeteSQL" AUTHORIZATION ......;
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试GRANT一些特权时,例如:
GRANT SELECT ON ALL TABLES IN SCHEMA requetesql TO ....;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Run Code Online (Sandbox Code Playgroud)ERROR: schema "requetesql" does not exist
我想更改架构中所有对象的所有者。为此,我使用以下函数:
CREATE OR REPLACE FUNCTION chown(in_schema VARCHAR, new_owner VARCHAR)
RETURNS void AS
$$
DECLARE
object_types VARCHAR[];
object_classes VARCHAR[];
object_type record;
r record;
BEGIN
object_types = '{type,table,sequence,index,table,view}';
object_classes = '{c,t,S,i,r,v}';
FOR object_type IN
SELECT unnest(object_types) type_name,
unnest(object_classes) code
loop
FOR r IN
EXECUTE '
select n.nspname, c.relname
from pg_class c, pg_namespace n
where n.oid = c.relnamespace
and nspname = ''' || in_schema || '''
and relkind = ''' || object_type.code || ''''
loop
raise notice 'Changing ownership of % %.% to …Run Code Online (Sandbox Code Playgroud) 是否可以在数据库中创建自定义架构,以便在该数据库中对 dbo 架构具有只读访问权限的用户可以设置为能够为自定义架构创建和修改实体?
我知道有很多关于多对多关系的问题,但似乎没有一个对我有用,因为它更多地是关于概念而不是代码的问题。所以我需要澄清一下如何实现我的想法。
我正在尝试制作乐高数据库。我有可以有很多小人仔的套装。某些 MINIFIGURES 也可以出现在许多 SETS 中。我是这样做的,在 Excel(csv) 文件中。它是 SETS “表”。
Id Set_Name Set_Id Minifigures_List
1 Spider-Man's Doc Ock Ambush 6873 Doc Ock, Spider-Man, Iron Fist
2 Spider-Man: Spider-Cycle Chase 76004 Spider-Man, Venom, Nick Fury
3 Electro 5002125 Electro
.....
Run Code Online (Sandbox Code Playgroud)
我的数据库实现的第一步是创建一个SETS表。
CREATE TABLE Sets (
ID int NOT NULL AUTO_INCREMENT,
Set_Name varchar(255),
Set_Id varchar(255),
);
Run Code Online (Sandbox Code Playgroud)
然后插入数据:
Insert into Sets (Set_Name, Set_Id)
VALUES ('Spidermans Doc Ock Ambush' , '6837'),
('Spider-Man: Spider-Cycle Chase' , '76004')
('Electro', '5002125')
;
...
Run Code Online (Sandbox Code Playgroud)
下一步是创建一个MINIFIGS …
我们在 ms sql server 中有一个生产数据库,我的团队也在同一个 prod 数据库上进行测试。我想知道哪些是测试数据,以便将来我可以删除这些条目。我如何区分这些?任何帮助,将不胜感激。谢谢
我只使用 PostgreSQL,我这辈子再也不会切换数据库软件了,所以我不在乎与一些理论上的“SQL 标准”兼容,这些标准实际上并不存在。
我喜欢“模式”的想法,我很清楚它们是什么,但让我烦恼的一件事是你不能嵌套它们。因此,您只能有一个“类别”,任何“子类别”都必须是表名的一部分。
为什么不支持嵌套模式?既然“模式”无论如何都不在 SQL 标准中,为什么它们不完全采用并允许嵌套模式?
当然,我还没有真正需要它,但它在理论上和各种复杂情况下似乎很有用。
是否有用于从 MySQL 数据库生成 Cassandra 模型的工具?
schema ×12
postgresql ×4
sql-server ×3
permissions ×2
cassandra ×1
many-to-many ×1
mysql ×1
nosql ×1
oracle ×1
plpgsql ×1
role ×1