小编Eri*_* W.的帖子

Python 3注释:键入提示指定类型的列表(PyCharm)

使用Python 3的函数注释,可以指定同类列表(或其他集合)中包含的项目类型,以便在PyCharm和其他IDE中进行类型提示?

int列表的伪python代码示例:

def my_func(l:list<int>):
    pass
Run Code Online (Sandbox Code Playgroud)



我知道可以使用Docstring ...

def my_func(l):
    """
    :type l: list[int]
    """
    pass
Run Code Online (Sandbox Code Playgroud)

...但如果有可能,我更喜欢注释样式.

python type-hinting pycharm python-3.x

93
推荐指数
4
解决办法
3万
查看次数

具有重叠子表的SQL子类型

问题视觉

考虑上面的问题,其中'CommonChild'实体可以是子类型A或B的子类,但不是C.如何在关系[SQL]数据库中设计物理模型?

理想情况下,解决方案将允许......

  1. 用于CommonChild与其相关子类型之间的识别关系.
  2. 1:N的关系.

可能的解决方案

  1. 向超类型添加其他子类型,并在新子类型下移动子类型A和B. 然后,CommonChild可以对新创建的子类型具有FK约束.适用于上述情况,但如果添加的附加实体可能与子类型A和C有关,但不是B.

  2. 在CommonChild和SuperType之间添加FK约束.在允许新元组进入CommonChild之前,对超类型的鉴别器使用触发器或检查约束(w/UDF).看起来很直接,但现在CommonChild几乎看起来像新的子类型(它不是).

  3. 我的模型存在根本缺陷.重塑和问题应该消失.

我正在寻找其他可能的解决方案或确认我已经提出的上述解决方案之一.

谢谢!


编辑

我将实施Branko Dimitrijevic提供的独家外键解决方案(见接受的答案).

我将在这种情况下稍作修改:

  1. 超类型,子类型和"CommonChild"都具有相同的PK和;
  2. PKs是3列复合材料.

修改是创建一个中间表,其唯一的作用是强制子类型和"CommonChild"之间的独占FK约束(Dimitrijevic提供的精确模型减去"CommonChild"属性).CommonChild的PK将对中间表具有正常的FK约束.

这将阻止"CommonChild"具有2组3列复合FK.另外,由于识别关系从超类型维护到"CommonChild",[读取]查询可以完全有效地忽略中间表.

sql database database-design sql-server-2012

5
推荐指数
1
解决办法
1522
查看次数