2016-12-02 86 views
1

我已经编写了一个使用数据源(CSV,固定宽度,制表符分隔)并将它们转换为SQL数据表的程序。我在SQL数据库中控制这个程序的设置。我使用的每个数据源都称为程序。每个程序只有一个DatasouceDefinition。 DatasourceDefinition是一个表格,它使用ProgramID作为返回到Program表格的外键。这样,因为我知道ProgramID,所以我可以在DatasourceDefinition表中找到定义我试图转换为SQL的程序的数据源的行。现在我试图扩大一点。我希望能够定义一组DatasourceDefinition实体,然后可以使用这些实体来定义多个程序。我的场景是我有三个程序使用完全相同的数据源模式(总共112列),所以不是制作三组数据源定义条目(3组x112行= 336行),我宁愿只制作一组1组x 112行= 112行),然后将该组行连接到三个程序。我做了一个乌鸦的脚图来帮助我看看这是如何工作的,但是我设计的东西好像是不好的数据库设计。我想知道如果任何人有输入对我怎么样了我的设置修改建议:数据库设计完整性检查

DatasourceDefinitions table design

在我看来,从[程序]接头[DatasourceDefinitionsId]至[DatasourceDefinitions] [DatasourceDefinitionsId]。打破良好的数据库设计实践但是,此连接器显示的关系是有效且必要的。

任何意见表示赞赏。

+1

为什么您需要ProgramSettings *表中的DatasouceDefinitionId?您可以通过ProgramId和Progams表获得它。 – dbugger

+0

我同意@dbugger所有你真正需要改变的是在程序设置shcema中与程序ID的外键关系。之后,你会被规范化到你需要的地方。 –

回答

1

您想要一组属性可用于多个程序。因此,这组属性是数据源定义中的一行,以及属于该定义的所有属性(程序设置....)。每个属性都属于一个定义。所以我设置你的外键为: ProgramSettingsCustomerFixedDatasources.datasourceDefinitionId program.datasourcedefinitionid。
我想把programid移出ProgramSettings。这样你从程序转到数据定义名称,然后获得所有属性。

+0

你钉了它。我知道它有什么问题,只是无法退后一步发现问题。从ProgramSettings *中删除programId和相关的连接器给了我ProgramSettings *和Programs之间的多对多关系,现在我看到它了,正是我所需要的。 – breusshe

+1

很高兴我能帮上忙,你的热情让我感到温暖和模糊。 – billpennock