使用列名创建数据库模型(没有 FK,没有关系)
Create database model using columns names (no FK, no relation)
我有一个没有 FK、PK 的数据库,也没有任何文档来显示 table 之间的关系。因此,我很难对物理数据进行逆向工程,以了解一个 table 与另一个的关系。有谁知道仅根据列名创建模型的工具?
示例:
Table A 有一个名为 ID_NTP_BAZINGA 的列,它与 table B 的列名称为 ID_NTP_BAZINGA 相关。
嗯,这是一项艰巨的任务(我自己也做过),但我可以想到一些提示来自动化您的工作,例如像 sp_msforeachdb
或 [=13= 这样的命令] 可能会很方便。
要按照您提到的方式确定 FK 关系,您可以使用这样的查询:
select * from (
select object_name(object_id) [table],
name,
count(*) over (partition by name) [cnt]
from [DB_name].sys.columns
) a where cnt > 1
在您的情况下,return(以及其他)
Table A | ID_NTP_BAZINGA
Table B | ID_NTP_BAZINGA
并给你一些见解。
对于 PK 候选人,可以使用 sp_msforeachtable
和动态 SQL 检查 count(distinct *)
是否等于 count(*)
- 这会告诉你是否有唯一值或不,最后你会 count(*)
在 where
子句中使用 is not null
过滤器,所以你会知道你是否在特定列中有 null
s。
这些是您必须自己编写的一些一般提示和确切查询。这个答案将帮助您入门。
这是数据考古学。具有讽刺意味的是,首先开发数据库的原因之一是保证数据比在文件和记录中更好地记录。
在这种情况下,数据模型的最佳处理方式之一是应用程序代码。查看应用程序使用的 sql,尤其是查询。检索是将数据转化为信息的过程,这就是您获得线索的地方。请特别注意 ON 和 WHERE 子句。您或许能够弄清楚列何时作为 PK 和 FK 发挥作用,即使它们没有这样声明。
祝你好运。
我有一个没有 FK、PK 的数据库,也没有任何文档来显示 table 之间的关系。因此,我很难对物理数据进行逆向工程,以了解一个 table 与另一个的关系。有谁知道仅根据列名创建模型的工具?
示例: Table A 有一个名为 ID_NTP_BAZINGA 的列,它与 table B 的列名称为 ID_NTP_BAZINGA 相关。
嗯,这是一项艰巨的任务(我自己也做过),但我可以想到一些提示来自动化您的工作,例如像 sp_msforeachdb
或 [=13= 这样的命令] 可能会很方便。
要按照您提到的方式确定 FK 关系,您可以使用这样的查询:
select * from (
select object_name(object_id) [table],
name,
count(*) over (partition by name) [cnt]
from [DB_name].sys.columns
) a where cnt > 1
在您的情况下,return(以及其他)
Table A | ID_NTP_BAZINGA
Table B | ID_NTP_BAZINGA
并给你一些见解。
对于 PK 候选人,可以使用 sp_msforeachtable
和动态 SQL 检查 count(distinct *)
是否等于 count(*)
- 这会告诉你是否有唯一值或不,最后你会 count(*)
在 where
子句中使用 is not null
过滤器,所以你会知道你是否在特定列中有 null
s。
这些是您必须自己编写的一些一般提示和确切查询。这个答案将帮助您入门。
这是数据考古学。具有讽刺意味的是,首先开发数据库的原因之一是保证数据比在文件和记录中更好地记录。
在这种情况下,数据模型的最佳处理方式之一是应用程序代码。查看应用程序使用的 sql,尤其是查询。检索是将数据转化为信息的过程,这就是您获得线索的地方。请特别注意 ON 和 WHERE 子句。您或许能够弄清楚列何时作为 PK 和 FK 发挥作用,即使它们没有这样声明。
祝你好运。