如何理解已经开发的数据库?

roc*_*ock 14 sql foxpro

我的问题似乎有点奇怪,但我相信大多数人可能已经经历了这个阶段.

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

我认为了解它是如何构建的,可以更容易地编写新的查询/存储过程.只是好奇知道任何捷径.

谢谢.

Twe*_*fth 18

我实际上希望你在这里找不到多少答案,因为我的职业生涯基于这些大型无证数据模型,并试图找出它们.但值得一提的是:

  • 我不喜欢自动数据建模器/电子建模器,尽管这可能是个人观点.我的偏好是找到白板(或纸)并手工绘制您的数据模型.如果你是一个kinaesthetic学习者(通过亲自参与学习),我发现这是熟悉新数据库的最好方法......就像自动化系统读取数据库一样好,你不会了解手工绘制时的意思.

  • 数据建模技术数量有限,但可以通过多种方式进行组合.我猜你有一个像你这样的大型数据库,你将有多个程序员创建它,这意味着你可能会看到在同一个数据库中使用的多种技术.在过去,我发现了一个系统,它将电路信息存储为一个单独的表,自动连接到自身,以存储数据电路的信息,而客户信息部分是一个非常直接的明星设计... 2非常独立编程风格,可能是两个独立的开发者 我后来冒险进入应用程序的电话电路部分,我立刻认识到与数据电路部分相同的风格(可能是相同的程序员).通常,开发人员将被分配到与您业务的某个部分相关的逻辑部门......请注意类似部分中的模式.

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

  • 在上面的相反方面,数据在数据库中之后...了解数据的消耗方式(由用户使用)将帮助您了解他们从中获取的数据以及他们需要从中获取的数据.如果您可以使用脚本编写用于生成现有报告的额外点,因为from语句将帮助您了解如何使用现有表.

  • 永远不要忘记采访您的用户......特别是如果您可以找到一个用于初始部署系统的用户.如果它是内部设计的,可能是这些人提供了系统的一些初始要求,并且与他们交谈将让您了解设计系统的人员在进行需求收集时首先听到的内容.贵公司的逻辑划分(客户关怀与运营与账单等等)通常与您的数据模型所遵循的划分相同.

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

我认为你想要避免的最大愚蠢只是关注表格的排列方式.了解其中的数据,如何生成以及如何使用它们.了解您的公司,如何安排以及如何运作.它的存储方式(数据建模)是次要的理解.

  • 请记住要牢记大局,而不是只关注细节. (2认同)

PBe*_*ezy 5

如果我跳进一个包含数百个表和数百万条记录的庞大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%'
Run Code Online (Sandbox Code Playgroud)