我正在开发一个通用应用程序,该应用程序使用一组预先选择的数据库表(及其关系)来生成用于管理这些表中的数据的用户界面。基本上,我只是从信息模式中查找内容,获取所有主键和外键,并基于此生成输入字段和指向其他对话框的链接。因为它应该是一个通用的解决方案,所以它应该适用于彼此之间确实具有有意义关系的任何表集。
我遇到的一件事是外键,特别是 - COMPOSITE 外键在一个约束下。例如,如果我有以下表格:
公司
CompanyID, CompanyName, CompanyID
--companyID is the primary key which identifies the company.
分配
DivisionID, CompanyID, DivisionName, DivisionID+CompanyID
--DivisionID+CompanyID is a composite primary key for a division, because it's a one-to-many relationship and division is DEPENDENT on Company.
团队
TeamID, DivisionID, CompanyID, TeamName, TeamID+DivisionID+CompanyID
--same as above - a Team is dependent on Division, which has a composite primary key.
现在,这个数据库模型 - 根据所有定义 - 一个有效的模型(并且 SQL Server 允许它) - 但我遇到了一个特定的问题。
例如,在信息模式中,DivisionID 和 CompanyID 都“分配”给相同的 CONSTRAINT。所以,当我加入正确的表格时,我遇到了问题。无法知道一个表中的哪一列是另一表中的哪一列。在上面的示例中,列名是相同的(CompanyID 是与公司 ID 相关的每一列的名称 - 无论是在 COMPANY 表还是 TEAM 表中,等等......)但是,没有规则说列的名称必须相同,所以我不知道如何真正让程序知道哪一列是哪一列。
TABLE1 COLUMN1 CONSTRAINT TABLE2 COLUMN2
TEAM CompID TEAM_HAS_DIVISION DIVISION CompanyID
TEAM DivID TEAM_HAS_DIVISION DIVISION DivisionID
有没有办法让计算机知道 TEAM 表中的 CompID 引用的是 CompanyID,而不是 DIVISION 表中的 DivisionID?
我无法从 INFORMATION_SCHEMA 视图中的数据中找到任何方法来执行此操作。
是的,人类可以很容易地找出 CompID=CompanyID 等……但正如我之前提到的 - 我正在尝试制定一个通用的解决方案,不需要人们查看并做出决定和错误:= )