标签: metadata

为 SQL 或 Oracle 搜索数据字典

我正在寻找 SQL Server 和 Oracle 数据库的元数据规范(数据字典)。

通过元数据映射,我的意思是对构成数据库模型的对象及其关系的明确描述(即服务器具有 0:n 数据库,表具有 1:n 列,列具有 0:n 约束)。

这些 DBMS 平台的任何版本都是有用的。

oracle sql-server metadata

4
推荐指数
1
解决办法
471
查看次数

当我从 sys.dm_tran_locks 调用 OBJECT_NAME(object_id, database_id) 时,为什么会被阻止?

我正在处理一个查询,以判断给定会话中哪些对象具有锁定,但我遇到了一些阻塞问题。

这是我的基本查询:

SELECT request_session_id AS session_id, 
    request_owner_id AS transaction_id,
    OBJECT_SCHEMA_NAME(resource_associated_entity_id, resource_database_id),
    OBJECT_NAME(resource_associated_entity_id, resource_database_id),
    COUNT(1) AS lock_count
FROM sys.dm_tran_locks WITH (NOLOCK)
WHERE resource_type = 'OBJECT'
GROUP BY request_session_id, request_owner_id, 
    resource_database_id, resource_associated_entity_id
Run Code Online (Sandbox Code Playgroud)

当我运行此查询时,我偶尔会被实际持有锁的会话之一阻止。如果我删除OBJECT_NAME和OBJECT_SCHEMA_NAME然后我没有任何问题。我试过将信息转储到一个表中,然后在有类似问题的表中使用这些值的函数。

这让我相信问题出在OBJECT_NAME和OBJECT_SCHEMA_NAME函数中,但我不确定为什么或如何解决它。我也不确定为什么我有时会被阻止有时不会。有没有人有什么建议?

sql-server metadata sql-server-2008-r2 dmv blocking

4
推荐指数
1
解决办法
905
查看次数

为什么从脚本中删除所有外键不起作用?

我在 SQL Server 2008 R2 机器上拥有系统管理员权限。我找到了一个脚本,它可以删除所有外键,并在测试导入后需要时为我们重新添加它们。因此,我执行以下代码时没有语法错误,因为它显示了“Alter Table [ParentTable] Drop Constraint FK_Name”...总共 23 个键,但是当我刷新服务器或数据库和表时,当我为每个表展开 Keys 节点时,我仍然看到它们吗?那么为什么不丢弃它们呢?另外,如果我想再次运行以进行测试,我是否需要将其转换为永久表或将脚本放入存储过程中?请指教。

我使用了“Pinal Dave”发布的“Swastik Mishra”中的以下脚本 http://blog.sqlauthority.com/2014/04/11/sql-server-drop-all-the-foreign-key-constraint-in- database-create-all-the-foreign-key-constraint-in-database/

    SET NOCOUNT ON
DECLARE @table TABLE(
RowId INT PRIMARY KEY IDENTITY(1, 1),
ForeignKeyConstraintName NVARCHAR(200),
ForeignKeyConstraintTableSchema NVARCHAR(200),
ForeignKeyConstraintTableName NVARCHAR(200),
ForeignKeyConstraintColumnName NVARCHAR(200),
PrimaryKeyConstraintName NVARCHAR(200),
PrimaryKeyConstraintTableSchema NVARCHAR(200),
PrimaryKeyConstraintTableName NVARCHAR(200),
PrimaryKeyConstraintColumnName NVARCHAR(200)
)
INSERT INTO @table(ForeignKeyConstraintName, ForeignKeyConstraintTableSchema,     ForeignKeyConstraintTableName, ForeignKeyConstraintColumnName)
SELECT
U.CONSTRAINT_NAME,
U.TABLE_SCHEMA,
U.TABLE_NAME,
U.COLUMN_NAME
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE U
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
ON U.CONSTRAINT_NAME = C.CONSTRAINT_NAME
WHERE
C.CONSTRAINT_TYPE = 'FOREIGN KEY'
UPDATE @table SET
PrimaryKeyConstraintName …
Run Code Online (Sandbox Code Playgroud)

foreign-key sql-server metadata sql-server-2008-r2 alter-table

4
推荐指数
1
解决办法
4759
查看次数

EAV 是否​​适合针对对象的共存的富含元数据的“事实估计”集合进行设计?

我正在尝试构建一个系统,该系统将收集对许多(30 万+)个对象中的每一个的各种数量(10+)的估计,并根据这些估计的历史记录做出决策。例如,我们有许多人工和自动化流程可能试图确定一个对象的,例如 PowerLevel,并且当它们报告的结果可能(或可能不会)相互替代时,我们想跟踪历史这些报告以及来自流程的元数据(日期、调整参数、代码版本等)。具体来说,我们可能想要执行诸如“按实体 id 分组,对于每个不同的属性,查找最新估计”或“查找其属性具有由代码库 573ae4 运行的任何更新的所有实体”之类的查询。

作为从未在生产中实际使用实体属性值模式的人,这似乎是 EAV 之类的完美用例,为源提供额外的元数据列。具体来说,我会设想一个这样的表格:

entity_id | attribute_id | string_value | numeric_value | datetime_value | discovery_time | discovery_source | discovery_tuning_parameters | discovery_code_hash

但是我听到了很多对这些类型架构的批评,例如这个答案。我很难找到在非遗留系统上使用 EAV 的人,这让我非常犹豫,我可能会重新发明一个非常过时的轮子......

另一方面,我能想到的唯一其他选择是完整的 NoSQL (bleh) 或一些邪恶的混合体,例如:

id | power | power_current_discovery_date | power_current_discovery_source | power_history (an array of hstores?) | foobar | foobar_current_discovery_date | ...

因为我们需要每个属性的元数据。

有什么想法吗?这是 EAV 适合的少数几次之一吗?谢谢你的帮助!

schema database-design metadata eav

4
推荐指数
1
解决办法
459
查看次数

过滤索引依赖项在哪里列出?

给定一个表格...

create table dbo.FilterIDXTest ( 
    id int not null identity primary key clustered,
    _bigint bigint,
    _varchar10 varchar(10),
    _varchar20 varchar(20),
    _guid uniqueidentifier
);

go

create unique index uq_FilterIDXTest
    on dbo.FilterIDXTest ( _varchar10, _varchar20 ) 
    include ( _guid )
    where _bigint is not null 
        and id > 5;

go
Run Code Online (Sandbox Code Playgroud)

...在什么(如果有)目录视图(或其他格式良好的参考对象)中可以WHERE定位和严格识别子句中的列名称?

sys.indexes可以查看提醒我们的filter_definition是([_bigint] IS NOT NULL AND [id]>(5))。

sys.index_columns可以查看ON和INCLUDE列,但仅列出原始CREATE INDEX命令中的 5 列中的 3 列。filter_predicate此处未找到这些列。

我必须假设filter_predicate在某个阶段对依赖项进行了严格检查,因为sp_rename …

metadata database-internals sql-server-2012 filtered-index

4
推荐指数
1
解决办法
83
查看次数

查找数据库中所有没有外键的表

在 SQL Server 中,我们如何找到所有没有以下任一项的表:

  • 外键约束
  • 其他表的外键引用

foreign-key sql-server metadata

4
推荐指数
2
解决办法
5825
查看次数

如何确定对 postgres 表进行分区的范围?

如果我创建一个表和这样的分区......

CREATE TABLE tab1 (a int, b int) PARTITION BY RANGE(a);
CREATE TABLE tab1_p1 PARTITION OF tab1 FOR VALUES FROM (0) TO (100);
CREATE TABLE tab1_p2 PARTITION OF tab1 FOR VALUES FROM (100) TO (200);
Run Code Online (Sandbox Code Playgroud)

我如何随后检查范围?我试过浏览 information_schema.tables 和 information_schema.table_constraints 但到目前为止没有运气。

postgresql metadata partitioning data-dictionary

4
推荐指数
1
解决办法
4077
查看次数

使用在您自己的表中引用 object_id 的列

在您自己的表中使用 OBJECT_ID() 作为引用是否安全,并假设无论如何该值将始终引用同一个数据库对象?

在MSDN状态

所有元数据函数都是不确定的。这意味着这些函数在每次调用时并不总是返回相同的结果,即使输入值相同。

所以这表明它不安全,但我找不到任何(其他)确凿的事实不应该这样做,而且,公平地说,没有人们实际这样做的例子,这本身可能是不这样做的证据做吧。

但是 OBJECT_ID() 值(或似乎)在系统表和视图中用作从一个对象到另一个对象的键,因此必须具有某种形式的完整性和可靠性。

作为记录:我不一定需要它,但它只是在设计我的系统时作为一个选项突然出现在我的脑海中,并且很好奇。

sql-server metadata

4
推荐指数
1
解决办法
294
查看次数

选择孤立行(以通用方式)

我有一个表my_tables,它在几个表中被引用为外键。

我想选择my_table其他表中未引用的所有行。

AFAIK,应该可以以通用方式(带有一些内省魔法)来做到这一点。

postgresql foreign-key metadata postgresql-10

3
推荐指数
1
解决办法
1298
查看次数

PostgreSQL 中注释的最大长度是多少?

PostgreSQL 有一个特殊的功能,称为COMMENT将元数据附加到标识符或任何类型(模式、表、列、函数、类型、域等)。看起来像这样,

COMMENT ON TABLE mytable IS 'This is my table.';
Run Code Online (Sandbox Code Playgroud)

评论有最大尺寸吗?

postgresql metadata comments

3
推荐指数
1
解决办法
948
查看次数