我有以下设计。每个用户都有它自己的联系人,它自己的主机并将它们分配给一个只属于他的域。
我想确保您分配给域的主机属于该域分配给的用户。
这是我必须在我的应用程序逻辑中确保的东西吗?
如果我设置domains.user_id foreign key为参考host.user_id,user_id.id它会消除我的问题吗?

顺便说一句,谁能建议我为我的架构设计更好的设计?
对于 MySQL(实际上是 MariaDB)中的某些触发器,我有一些错误的“定义器”。我认为纠正它们的最简单方法是以下版本:
use information_schema;
update triggers set definer=current_user() where trigger_schema='foobar';
Run Code Online (Sandbox Code Playgroud)
它产生:
ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'information_schema'
Run Code Online (Sandbox Code Playgroud)
在同一个会话中,我可以使用“删除触发器”和“创建触发器”删除并重新创建触发器,因此我不了解权限问题。我的用户是否需要一些它没有的特权?
我正在寻找一种从现有数据库创建新模式的方法,只选择数据库对象的子集。即我想要一些“数据库表示”,它只包括明确指定的表的子集。创建包含/无法访问数据库中所有对象的模式的最简单方法是什么。有可能吗?
我正在尝试在 MS SQL Server 2012 R2 中执行此操作。
仅具有架构的空白数据库很大是否正常?或者有没有办法减少初始数据库的大小?
我正在尝试为我正在创建的 MongoDB 数据库的文档和集合创建模式。我已经阅读了一些文档,描述了_id每个文档在创建时生成的字段。
我还阅读了这篇关于在 Mongo 中实现一对多关系的文章,并决定我的案例属于“一对多”类别。因此,我将从我的“当前”集合中按字段引用多个其他集合中的多个其他文档_id。从我在文章中可以看出,这似乎可以正常工作。虽然我依稀记得读过一篇文章说_id字段不能保证在不同的集合中是唯一的,但它们在集合内(原谅我,我找不到它的链接)。
例如,假设我为一家销售苹果和橙子的公司收集了三个系列;Orders、Apples、 和Oranges。Orders持有有关苹果和橙子订单的文件。Apples并Oranges保存有关这些水果的各种类型的数据。
在Orders文档中,我可能有字段
{
...
"OrangesOrdered" :
[
{ "Amount" : 2, "OrangeID" : "OrangeObjectID12"}
]
...
"ApplesOrdered" :
[
{ "Amount" : 4, "AppleID" : "AppleObjectID65"}
]
...
}
Run Code Online (Sandbox Code Playgroud)
其中OrangeObjectID12是_id特定类型 OrangeAppleObjectID65的_id字段, 是特定类型 Apple的字段。
有没有可能这两个_id …
我在我的服务器上创建了一个登录名和一个数据库用户,如下所示:
USE master
GO
CREATE LOGIN MyLogin WITH PASSWORD=N'Password123!'
GO
USE AdventureWorks2014
GO
CREATE USER MyLogin FOR LOGIN MyLogin
GO
ALTER USER MyLogin WITH DEFAULT_SCHEMA=HumanResources
GO
GRANT SELECT ON SCHEMA :: Production TO MyLogin
GO
GRANT SELECT ON SCHEMA :: HumanResources TO MyLogin
GO
GRANT SELECT ON SCHEMA :: dbo TO MyLogin
Run Code Online (Sandbox Code Playgroud)
当我作为 MyLogin 登录时,我现在可以在 HumanResources 模式中选择对象而不使用四部分名称(因为 HumanResources 是该用户的默认模式)
SELECT * FROM HumanResources.Department
Run Code Online (Sandbox Code Playgroud)
现在可以在没有架构名称的情况下运行:
SELECT * FROM Department
Run Code Online (Sandbox Code Playgroud)
这可以。如果我然后尝试从生产模式中的表中选择而不使用模式前缀:
SELECT * FROM ProductDescription
Run Code Online (Sandbox Code Playgroud)
我按预期收到错误。这可以通过使用以下方法解决:
SELECT * FROM Production.ProductDescription
Run Code Online (Sandbox Code Playgroud)
因此,基于此,我需要在从默认架构之外的任何表中进行选择时指定架构名称。
那么为什么当我从 …
使用 Microsoft SQL Server,有没有办法备份生产数据库的子集?我只想要数据库结构,以及几个选定表的极少量交易数据。
我想用这个备份文件来刷新开发数据库。
对于 Oracle,我看到这是使用此 Powershell 脚本实现的:
userid="/ as sysdba"
compression=all
directory=TEST_DIR
flashback_time=systimestamp
dumpfile=XX.dmp
logfile=xx.log
schemas=XXXXX
query=SCHEMA.TABLE:"where <condition>
exclude=TABLE:"IN (x)"
Run Code Online (Sandbox Code Playgroud) 我对关系 DBMS 非常熟悉,但对 Oracle 不熟悉。我在 Docker 内部运行 Oracle 18c XE(在 MacOS 上)。我使用第三方客户端(MacOS 上的 SQLPro Studio)连接到它。现在我想开始。
如果这是 MySQL,我可以发出CREATE DATABASE whatever; USE whatever;并继续处理这些表。与 Microsoft SQL Server 相同,与 PostgreSQL 类似。我还可以创建一个额外的模式来保持更好的组织。
我认为 Oracle XE 只为您提供一个数据库,我想创建一个合适的模式。此时我在海上。我认为我需要创建一个与模式关联的新用户。
我也知道不同的 RDBMS 对什么是数据库或模式有不同的想法,所以我不确定这是否是正确的定义或解决方案。
我在客户端中创建新用户或新架构都没有成功。
我试过了:
CREATE USER fred IDENTIFIED BY 'h3art0fg0ld`;
Run Code Online (Sandbox Code Playgroud)
但我收到消息:
无效的通用用户名或角色名
我还读到我应该使用类似的东西c##fred,它确实有效,但是 (a) 我真的不知道这意味着什么和 (b) 声明GRANT connect, resource, create sessions TO c##printsdb;给了我“缺少或无效特权”的消息,所以我没有进一步先。
在 Docker 容器中,我不知道我是否可以访问 SQL*Plus,这是一些在线教程所假定的。
如何创建和使用架构,或包含表集合所需的任何内容?
我编写了一个简单的查询,它应该以人类可读的格式显示任何给定模式的所有表大小:
select table_name, pg_relation_size(quote_ident(table_name))
from information_schema.tables
where table_schema = 'my_schema'
order by 2
Run Code Online (Sandbox Code Playgroud)
当我在 PgAdmin 中运行此查询时,出现以下错误:
ERROR: relation "my_table" does not exist
SQL state: 42P01
Run Code Online (Sandbox Code Playgroud)
这个错误怎么可能?我根本没有改变 information_schema ,如果关系首先不存在,为什么它会在 information_schema 中?知道这是怎么发生的吗?
schema ×10
sql-server ×3
mysql ×2
backup ×1
constraint ×1
docker ×1
dump ×1
erd ×1
mongodb ×1
oracle ×1
oracle-18c ×1
oracle-xe ×1
permissions ×1
postgresql ×1
trigger ×1