我正在使用通用应用程序,该应用程序使用一组预先选择的数据库表(及其关系)来生成用于管理这些表中数据的用户界面。基本上,我只是从信息模式中查找内容,获取所有主键和外键并生成输入字段和基于此的其他对话框的链接。因为它应该是一个通用的解决方案,所以它应该适用于彼此之间具有有意义关系的任何表集。
我遇到的一件事是外键,特别是 - 一个约束下的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等...但正如我之前提到的那样 - 我正在尝试制作一个通用的解决方案,不需要人来看这个并做出决定错误:=)
答案 0 :(得分:2)
您必须按列顺序匹配它们。
这就是你知道哪一个参考哪个。