我们有一个表'XYZ‘,我们在其中为不同的表插入数据-
ID TableName RowID
1 Person 1
2 Company 1
3 Employee 5如果我们想维护列RowID的引用完整性,我认为只有两个选项:
因此,如果你知道保持诚信的有效方法,请提出建议。
谢谢你帮忙。
发布于 2014-07-01 08:44:36
为此,您有以下方法:
1-每个表有一个参考表,使用视图表示拥有XYZ:
PersonRows Table
ID RowId
CompanyRows Table
ID RowId
EmployeeRows Table
ID RowId
Create View XYZ AS
Select 'Person' AS TableName, RowID From PersonRows
UNION ALL
Select 'Company' AS TableName, RowID From CompmayRows
UNION ALL
Select 'Employee' AS TableName, RowID From EmployeeRows2-使用触发器后(插入、更新、删除)每个人,公司和雇员表,以检查完整性。
例如:
Create Trigger tr_Person_Del ON Person
After Delete
AS Begin
Delete From XYZ Where TableName = 'Person' and RowID in (Select Person.Id From Deleted)
End3-使用下表(在此方法中,我建议对PersonRowID、CompanyRowID和EmployeeRowId使用稀疏列)
XYZ(ID, TableName, PersonRowId, CompanyRowId, EmployeeRowId)发布于 2014-07-01 08:46:10
这在很大程度上是一个判断力。正如你所说的,你有三种选择:
使用单个RowID列,但是不能强制执行RI。
您可以创建一组可空列( PersonRowID、CompanyRowID、EmployeeRowID等)。其中每一个都在相应的表上有一个FK,如果该实体不是Person/Company/Employee,则为null。
另一个选项是为每种类型创建一个基表和另一个表。在我看来,这太过分了,因为三个子表的结果是一个Base表加上一个实体的一个!
我的建议是:
ID TableName PersonRowID CompanyRowID EmployeeRowID
1 Person 1 null null
2 Company null 1 null
3 Employee null null 5然后,您将获得从PersonRowID到Person表、CompanyRowID到Company表和EmployeeRowID到Employee表的FKs。
但我得承认-我一开始就质疑这张桌子的原因.也许你应该先考虑一下这个表是否正确,然后再做进一步的改进。
发布于 2014-07-01 08:41:06
您不需要为表指定表名,Server已经这样做了。
SELECT * FROM sys.tableshttp://msdn.microsoft.com/es-es/library/ms187406.aspx
https://stackoverflow.com/questions/24505831
复制相似问题