我公司使用的是多租户数据库(一个数据库,所有表都有一个customerID字段)。
我们正在建立数据仓库并为客户提供直接访问权限。我们对架构的最初想法是为每个客户创建一个架构,每个架构中的视图提供按客户 ID 进行过滤的视图。
IE
dbo.Table1
schema1.Table1 (View) Select * from dbo.Table1 where custId = '1'
这是有效的,除了具有 schema1 权限的用户也可以从 dbo.Table1 中选择全部。我想防止这种情况。
那可能吗?
假设我创建了这两个帐户:
CREATE USER u1 IDENTIFIED BY "&&u1Password"
DEFAULT TABLESPACE u1tbs
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON u1tbs
QUOTA 256M ON users
QUOTA 0M ON ket;
CREATE USER u2 IDENTIFIED BY "&&u2Password"
DEFAULT TABLESPACE u2tbs
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON u2tbs
QUOTA 256M ON users
QUOTA 0M ON u1tbs;
Run Code Online (Sandbox Code Playgroud)
我已授予 u2 对 u1 架构的完全访问权限。如您所见,u1 中的所有表都在表空间 u1tbs 中。当 u2 向 u1 的模式添加数据时,数据会去哪里?如果是这样,它不会与quota 0M on ...?
编辑:问题应该在 dba.stack 上...
我有两张桌子,BOOK和JOURNAL。我想将他们的作者存储在一个名为AUTHORS. 将多个引用 id 列(我认为是 FK 的类型)指向其他表,即BOOK和是否可以接受JOURNAL?这是为了节省书籍和期刊的单独作者表。
所以,AUTHORS看起来像:
| ID | 书本_ID | JOURNAL_ID | 姓名 |
|---|---|---|---|
| 0 | 54 | 212 | 史密斯 |
| 1 | 598 | 空值 | JR哈特利 |
我的任务是设计一个系统来重现事件。事件可能每天、每小时、每月或每年重复发生。用户应该能够“每个月的第三个星期三”或“每个月的第一个”或“每小时”安排事件。
假设我从一个“事件”表开始:
events
-------
id INT
name VARCHAR
notes TEXT
...
Run Code Online (Sandbox Code Playgroud)
应该使用哪些字段/实体/架构来持久化重复规则?
fwiw,我使用的是 MySQL 5.5.x。
更新(2012 年 8 月 29 日):
我开始为一家公司设计一个数据仓库。我们试图解决的第一个问题是关于他们的支持票务系统。我的初始架构如下

现在我们要问的问题之一是历史上任何时候都有多少票是有效的。
问题是票证将在某一天创建,但可能会在几天/几周/几个月内打开而不会更新或再次创建,这意味着即使票证每天都被打开,我们在创建票证时只有一个事实记录。
我不确定处理这个问题的最佳方法是什么,我想到的就是这个。
在一天开始时,任何尚未标记为已解决的票证都会在每天开始时将另一个票证输入到事实表中,无论是否有任何更新?这看起来是一个明智的解决方案吗?还是我错过了更简单的东西?
对架构的任何反馈也将不胜感激,因为我们仍然有时间更改它并从一开始就做好。
我是一名程序员,被我自己命名为 Wilson 的排球扔到了 DBA/系统管理员岛。我正在努力在这里生存。
我应该为应用程序创建一个数据库。之前运行它的服务器有一个非常相似的应用程序的数据库。我对 Oracle 了解不多,所以我重用了 ZFS 文件系统,并保留了它们的创建方式(因为老实说,我不知道它们为什么这样创建,但我很确定这是有充分理由的) .
app/oradata_smart_ora1 858M 12.2G 858M /oradata/SMART/ora1
app/oradata_smart_ora2 7.18M 18.0G 7.18M /oradata/SMART/ora2
app/oradata_smart_ora3 7.18M 36.0G 7.18M /oradata/SMART/ora3
app/oradata_smart_ora4 60.6K 400G 60.6K /oradata/SMART/ora4
app/oradata_smart_redo1 400M 2.61G 400M /oradata/SMART/redo1
app/oradata_smart_redo2 200M 2.80G 200M /oradata/SMART/redo2
app/oradata_smart_redo3 200M 2.80G 200M /oradata/SMART/redo3
Run Code Online (Sandbox Code Playgroud)
因为我重用了文件系统,所以我创建了我的数据库并将控制文件放在旧数据库文件所在的相同位置(/oradata/SMART/ora1、/oradata/SMART/ora2、/oradata/SMART/ora3)。像 MySQL 一样思考我app/oradata_smart_ora4 60.6K 400G 60.6K /oradata/SMART/ora4专门创建的用于将数据库存储在那里的工作。
数据库启动和安装没有问题。现在是我被困的地方。我读过这个,这个,这个,这个,这个等等,但我仍然有疑问。
请注意,该服务器将在其整个生命周期内管理数百万/数十亿条记录。
对于所有这些问题,我真的很抱歉,但我真的很想在遵循 Oracle 最佳实践的同时正确地做到这一点。如果您需要更多信息来回答您的问题,请告诉我。
我已经使用 SchemaSpy 进行了分析。
该工具给了我两个表的警告消息。警告信息是:
列名递增的表,可能表示非规范化
上述错误是什么意思?
以供参考 :
最近有一个域迁移,我们的 SQL Server 托管在其中。
我有两台服务器,每台服务器大约有 30 个数据库。每个用户都被更改为新域,但这样做时,当我们希望默认为 DBO 时,他们的默认架构更改为他们的域。
我目前正在通过单击 DB -> Security -> Users 然后在常规属性选项卡中手动更改它们,在默认模式框中手动键入 dbo。
有没有办法编写 SQL 代码来运行和调整所有数据库中所有用户的默认模式?
我有一个销售报告系统,其中包含这样的传入数据
date,editionID,outletId,Measure1,Measure2
2013-01-01,2,532,11,24
Run Code Online (Sandbox Code Playgroud)
等等...
我是设计数据立方体的新手(用于 pentaho BI 套件),当我构建模式时,一切正常,直到我想定义date为日期维度。pentaho 模式设计者需要将其作为对日期维度表的外键引用,以便将其用作维度。
我的问题是,为什么我需要一个单独的表?我将如何构建它?我将如何在事实表中引用它?
谢谢!
我有一个经典的 3 环境设置(开发、暂存和生产),每个环境都有自己的RDS PostgreSQL 9.3。客户端/服务器版本是psql (9.3.5, server 9.3.3).
为了保持模式对齐,我有一个周期性的模式差异作业,当模式不同时它会通知我。
几天前,我开始收到许多这些差异:
CREATE TABLE ...
...
< title pg_catalog.text,
< subtitle pg_catalog.text,
---
> title text,
> subtitle text,
Run Code Online (Sandbox Code Playgroud)
textstaging 中的字段以某种方式转换为pg_catalog.textprod。
text和 和有pg_catalog.text什么区别?如何将这两个模式等同起来?
schema ×10
oracle ×2
star-schema ×2
datatypes ×1
dimension ×1
erd ×1
facttable ×1
olap ×1
pentaho ×1
permissions ×1
postgresql ×1
security ×1
sql-server ×1
tablespaces ×1