在所有表中使用单个序列作为主键(而不是主键对于给定表是唯一的,它对于所有表都是唯一的)是否可以接受?如果是这样,客观上是否比跨表使用单个主键序列更好。
我是一名初级软件开发人员,而不是 DBA,所以我仍在学习良好数据库设计的许多基础知识。
编辑:如果有人想知道,我最近阅读了我们公司的一位 DBA 对数据库设计的评论,他提到设计没有在整个数据库中使用单个主键是一个问题,这听起来与到目前为止我已经学会了。
Edit2:要回答评论中的问题,这是针对 Oracle 11g 的,但我想知道非数据库特定级别。如果这个问题确实取决于数据库,我很想知道原因,但在这种情况下,我会寻找特定于 Oracle 的答案。
所以我想做一个左连接,让左表中的每一行都在右表中包含一行空值,即使存在匹配也是如此。
这种类型的连接有名称吗?
有没有比我下面的方法更好的方法(即避免联合)?
SELECT
T1.C1,
...
T1.CN
T2.C1,
...
T2.CM
FROM
Table1 T1
INNER JOIN Table2 T2
ON T1.Key1 = T2.Key1
UNION
SELECT
T1.C1,
...
T1.CN,
NULL, --NULL 1
...
NULL, --NULL M
FROM
Table1 T1
Run Code Online (Sandbox Code Playgroud)
(我也可以从左连接开始,然后联合一个选择,就像上面的第二个选择一样,过滤到仅具有匹配 ID 的表,但这仍然是复杂的方法)。
我想知道是否有类似的东西
SELECT
T1.C1,
...
T1.CN
T2.C1,
...
T2.CM
FROM
Table1 T1
INNER JOIN Table2 T2 INCLUDE_NULL_ROW_WITH_MATCH
ON T1.Key1 = T2.Key1
Run Code Online (Sandbox Code Playgroud)
如果相关的话,这是专门针对 SQL Server 2008 的。
我需要授予用户什么权限才能查看所有 DDL 代码(例如存储过程代码)但不能编辑其中任何代码?
唯一的可能性似乎是 DDLadmin,但这也允许用户进行编辑。是否有其他一些选择,或者可能是一种授予然后撤销部分 DDLAdmin 的方法?