Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL表中引用多个表的列_Sql - Fatal编程技术网

SQL表中引用多个表的列

SQL表中引用多个表的列,sql,Sql,我有一个表页面[Id,Name]。和表Element[Id,PageId,ViewId,ViewType,Order],其中ViewType是其中一个表的名称:投资组合,基金,头寸。而ViewId是相关表中元素的id:PortfolioView、FundView、PositionView 视图表如下所示:[Id、PortfolioId、ShowName、ShowYTD、ShowMTD和其他]。当我创建一个元素项时,它意味着创建了一个“视图”表的项 所以对我来说,它看起来像一个反模式 简而言之,我

我有一个表
页面[Id,Name]
。和表
Element[Id,PageId,ViewId,ViewType,Order]
,其中
ViewType
是其中一个表的名称:投资组合,基金,头寸。而
ViewId
是相关表中元素的id:PortfolioView、FundView、PositionView

视图表如下所示:
[Id、PortfolioId、ShowName、ShowYTD、ShowMTD和其他]
。当我创建一个元素项时,它意味着创建了一个“视图”表的项

所以对我来说,它看起来像一个反模式


简而言之,我希望创建一个页面模型,其中包含一个有序的元素,表示一个视图(投资组合、基金或头寸)。在sql中使用哪种方法更好?

我看到的方法是使用一个列来更新元素表,每个列对应于投资组合、基金和头寸。列必须是可空的,但它们将是合法的外键,因此SQL将为您强制执行外键正确性

如果您希望在技术上尽可能正确,还可以执行以下操作:

Page[Id, Name]
Element[Id, PageId, ViewId, ViewType, Order]
Element_Portfolio[ElementId, PortfolioId]
Element_Fund[ElementId, FundId]
Element_Position[ElementId, PositionId]
Portfolio[...]
Fund[...]
Position[...]

这样可以避免出现可为空的列,但在执行查询时需要有更多的表,因此需要有更多的联接

谢谢,我考虑过这一点,但我不喜欢在sush中,当几个ViewId为null的列不同(或者元素表中的几个行具有相同的ElementId)时,情况会变得模棱两可。但如果我找不到更好的方法,我会照你说的做。