18

我的问题可能看起来有点奇怪,但我相信你们中的大多数人可能已经经历过这个阶段。

我目前正在从事一个数据库迁移项目(从 FoxPro 到 SQL Server)。正在迁移的数据库很大,我是这个项目的新手。有什么简单的方法可以理解这样的数据库吗?就像表格是如何相关的以及它是如何建模的。此数据库上没有可用的适当文档。

我认为了解它的构建方式可以更轻松地编写新的查询/存储过程。只是想知道任何捷径。

谢谢。

4

8 回答 8

21

实际上,我希望您在这里找不到太多答案,因为我的职业生涯是基于进入这些大型无证数据模型并试图弄清楚它们。但对于它的价值:

  • 我不喜欢自动数据建模器/电子建模器,尽管这可能是个人意见。我的偏好是找一块白板(或纸),然后用手画出你的数据模型。如果您是动觉学习者(通过参与来学习),我发现这是熟悉新数据库的最佳方式......就像自动化系统读取数据库一样好,您不会当你用手画它时,你会知道你会做什么。

  • 数据建模技术的数量有限,但是它们可以以多种方式组合。我猜像你这里有一个更大的数据库,你将有多个程序员创建它,这意味着你可能会看到在同一个数据库中使用多种技术。在过去,我发现一个系统将其电路信息存储为一个单独的表,该表自我重复地连接到自身以存储数据电路的信息,而客户信息部分是一个非常直接的星形设计......2非常独立编程风格,可能是两个独立的开发人员。后来我冒险进入了应用程序的电话电路部分,我立即意识到它与数据电路部分的风格相同(可能是同一个程序员)。通常,

  • 物理数据库结构只是要理解的一部分......在左边(在数据库之前)是如何生成数据并将其加载到您的数据库(数据仓库?)。了解您的数据是什么以及它是如何创建的,是了解加载后在数据库中查找的内容的第一步。

  • 与上述相反,在数据进入数据库之后……了解数据的使用方式(由您的用户使用)将帮助您了解他们从中得到了什么以及他们需要什么。如果您可以掌握用于生成现有报告的脚本,则可以加分,因为 from 语句将帮助您了解现有表的使用方式。

  • 永远不要忘记采访你的用户……尤其是如果你能找到一个在系统初始部署时就已经存在的用户。如果它是内部设计的,那么很可能正是这些人为系统提供了一些初始需求,并且与他们交谈会让您了解设计系统的人在收集需求时首先听到的内容。您公司的逻辑部门(客户服务、运营、计费、等等)通常与您的数据模型将遵循的部门相同。

  • 最后......玩!如果开发或 QA 环境可用,请开始编写查询并查看返回的结果...更改您的语句并重试。

我认为您要避免的最大愚蠢行为是只关注桌子的排列方式。了解其中的数据,它是如何生成的以及如何使用的。了解你的公司,它是如何安排的以及它是如何运作的。它的存储方式(数据建模)对于这种理解是次要的。

于 2012-06-19T17:26:07.977 回答
9

如果我跳入一个包含数百个表和数百万条记录的大型 SQL Server 数据库,我会使用两个查询来帮助理解这一切,找到“主”表,然后缩小到特定的表和列。

--Query to show list of tables ordered by number of records in each table
    SELECT
        t.NAME AS TableName,
        SUM(p.rows) AS [RowCount]
    FROM 
        sys.tables t
    INNER JOIN      
        sys.indexes i ON t.OBJECT_ID = i.object_id
    INNER JOIN 
        sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
    INNER JOIN 
        sys.columns c on t.object_id = c.object_id
    WHERE   
        i.index_id <= 1
    GROUP BY 
        t.NAME, i.object_id, i.index_id, i.name 
    ORDER BY 
        SUM(p.rows) DESC



--Query to show any columns or table names like what I'm looking for
SELECT
    c.name, t.name
FROM sys.columns c
    INNER JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE '%#ColumnName%' OR t.name LIKE '%#TableName%'
于 2015-08-07T19:57:05.303 回答
1

我最近经历了同样的过程......我认为对我帮助最大的事情是创建我自己的数据库图。我使用了免费工具 wwwsqldesigner。这看起来很简单,我唯一遇到的问题是由于某种原因它无法在 Chrome 中运行,但 firefox 运行良好。我只是把我经常使用的表格放进去,我发现当我需要做一些新的事情时,我经常会参考它。

如果您可以使用自动生成的数据库图表,那将是一个更好的方法,但我个人无法让它们工作(我使用的是 sql server)。

祝你好运!

于 2012-06-19T16:28:12.300 回答
1

嗨,以下脚本可能会对您有所帮助。如果您在任何已开发的数据库上使用它,您至少会了解表之间的关系。

SELECT
fk.name 'FK Name',
tp.name 'Parent table',
cp.name, cp.column_id,
tr.name 'Refrenced table',
cr.name, cr.column_id
FROM 
    sys.foreign_keys fk
INNER JOIN 
    sys.tables tp ON fk.parent_object_id = tp.object_id
INNER JOIN 
    sys.tables tr ON fk.referenced_object_id = tr.object_id
INNER JOIN 
    sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id
INNER JOIN 
    sys.columns cp ON fkc.parent_column_id = cp.column_id AND fkc.parent_object_id = cp.object_id
INNER JOIN 
    sys.columns cr ON fkc.referenced_column_id = cr.column_id AND fkc.referenced_object_id = cr.object_id
ORDER BY
 tp.name, cp.column_id
于 2017-10-17T20:39:17.990 回答
0

您可以使用 SQL Server Management Studio 创建实体关系模型,以便轻松查看 db 表之间的关系。基本上在管理工作室的 db 文件夹中,有一个名为“Database Diagrams”的文件夹。只需右键单击它,然后选择“新建数据库图”。

于 2012-06-19T16:24:49.117 回答
0

迁移后旧的 Foxpro 服务器会和新的 sql server 共存吗?如果没有,您应该尝试逐步破译系统。无需在任何停滞和未使用的代码上浪费时间。注释和图表,让您大致了解数据流并开始挖掘!

于 2012-06-19T16:29:24.953 回答
0

Foxpro 中有两种截然不同的数据对象。
您很可能正在查看不包含在“数据库”中的免费数据表(DBF、CDX、IDX、FPT 文件)。
或者,Foxpro 可能有一个数据库(一个 DBC 文件),它可以包含数据表,并且可以在相关条件下“保存”。

但是,Foxpro 数据表通常在应用程序需要时根本不相关,此时它们基于索引表达式动态相关。

索引是使用某些表达式(例如:Fld1 + Fld2 或 Account_ID 等)在数据表上构建的,以满足应用程序的需求。
这些索引可以在需要时为已创建索引的任何给定数据表“激活”。

相关表具有父/子关系,其中子表已激活索引,父表通过其自身字段中与子索引表达式匹配的值与该子表相关。

将数据移动到 SQL Server 后如何利用数据取决于您在应用程序中使用的内容。

如果您仍在为应用程序使用 Foxpro,您可以查询 SQL Server 并将记录取回内存游标(它的工作方式非常类似于数据表),如果您取回多个 SQL Server 查询游标,则可以创建一个索引(使用表达式)并根据需要关联表。

如果您要将应用程序更改为其他语言(例如可能是 VB.net 或 C++),那么您将必须通过 SQL 查询语法本身创建自己的“关系”。

请记住,移动数据表并不是什么大问题。
但是更改应用程序语言是一件大事,甚至您处理任何单个任务的方式也必须以不同的方式处理。
把它想象成将一本书从英文翻译成中文——一切都必须改变。

如果您不确定和/或没有 Foxpro 和应用程序源代码的副本,您最好考虑找一位顾问来为您完成工作,或者至少为您提供帮助/建议。

另外,请记住,如果项目是BUSINESS CRITICAL,那么您不应该尝试节省转换成本。

祝你好运

于 2017-10-17T21:30:46.770 回答
0

您可以使用 MySQL 工作台对整个数据库或多个数据库进行逆向工程以将它们可视化以供初学者使用,稍后,您必须遵循将其放在纸上以获得更好结果的幼稚方法。

于 2021-02-16T12:54:47.323 回答