Sql 数据库设计健全性检查

Sql 数据库设计健全性检查,sql,sql-server,database,Sql,Sql Server,Database,我编写了一个程序,它使用数据源(CSV、固定宽度、tab delimted)并将其转换为SQL数据表。我在SQL数据库中控制此程序的设置。我使用的每个数据源都称为一个程序。每个程序只有一个DatasouceDefinition。DatasourceDefinition是一个使用ProgramID作为外键返回到Program表的表。这样,由于我知道ProgramID,所以我可以在DatasourceDefinition表中找到为我试图转换为SQL的程序定义数据源的行。现在我试着把它扩展一点。我希望

我编写了一个程序,它使用数据源(CSV、固定宽度、tab delimted)并将其转换为SQL数据表。我在SQL数据库中控制此程序的设置。我使用的每个数据源都称为一个程序。每个程序只有一个DatasouceDefinition。DatasourceDefinition是一个使用ProgramID作为外键返回到Program表的表。这样,由于我知道ProgramID,所以我可以在DatasourceDefinition表中找到为我试图转换为SQL的程序定义数据源的行。现在我试着把它扩展一点。我希望能够定义一组DatasourceDefinition实体,然后这些实体可以用于定义多个程序。我的场景是,我有三个程序使用完全相同的数据源模式(共112列),因此,与其创建三组数据源定义项(3组x 112行=336行),我宁愿只创建一组(1组x 112行=112行),然后将该组行链接到三个程序。我做了一个鱼尾纹图来帮助我了解这是如何工作的,但我所设计的似乎是糟糕的数据库设计。我想知道是否有人对我如何设置建议的更改有意见:

在我看来,从[Programs].[DatasourceDefinitionId]到[DatasourceDefinitions].[DatasourceDefinitionId]的连接器打破了良好的数据库设计惯例。但是,此连接器显示的关系是有效和必要的


感谢您的建议。

您希望一组属性适用于多个程序。因此,属性集是datasourcedefinition中的一行以及属于该定义的所有属性(programsettings…)。每个属性都属于一个定义。因此,我将您的外键设置为: 程序设置SCustomerFixedDatasources.datasourceDefinitionId program.datasourcedefinitionid.

我会将programid从ProgramSettings中删除。通过这种方式,您可以从program进入datadefinitionname,然后获取所有属性

为什么在ProgramSettings*表中需要DatasouceDefinitionId?你可以通过ProgramId和Progams表访问它。我同意@dbugger的观点,你真正需要更改的是program settings shcema中与program ID的外键关系。在那之后,你会被标准化到你需要的地方。你做到了。我知道它出了点问题,只是退一步找不到问题。从ProgramSettings*中删除programId和关联的连接器,让我在ProgramSettings*和程序之间建立了一种多对多的关系,现在我明白了,这正是我所需要的。很高兴我能提供帮助,你的热情让我感到温暖和美好。