精华内容
下载资源
问答
  • 1. 偏序关系定义 ( 1 ) 偏序关系定义 ( 自反 | 反对称 | 传递 ) ( 2 ) 偏序关系 与 等价关系 ( 等价关系 用于分类 | 偏序关系 用于组织 ) 2. 偏序集定义 ( 1 ) 偏序集定义 二. 偏序关系 示例 1. 小于等于关系 ...









    一. 偏序关系




    1. 偏序关系定义



    ( 1 ) 偏序关系定义 ( 自反 | 反对称 | 传递 )


    偏序关系 定义 :

    • 1.前置条件 1 : A̸=A \not= \varnothing , 并且 RA×AR \subseteq A \times A ;

    • 2.前置条件 2 : 如果 RR自反 , 反对称 , 传递的 ;

      • ① 自反 : 每个元素 自己 和 自己 都有关系 , xRxxRx ;
      • ② 反对称 : 如果 xRyxRy 并且 yRxyRxx=yx=y , x̸=yx \not=y , xRyxRyyRxyRx 不能同时存在 ; 可以没有 , 但是一定不能同时出现 ;
      • ③ 传递 : 如果 有 xRyxRy , yRzyRz , 那么必须有 xRzxRz , 如果前提不成立 , 那么也勉强称为传递 ;
    • 3.结论 : RRAA 上的偏序关系 ;

    • 4.表示 : 使用 \preceq 表示偏序关系 ;

    • 5.读法 : \preceq 读作 "小于等于" ;

    • 6.使用公式表示 :
      <x,y>RxRyxy<x, y> \in R \Longleftrightarrow xRy \Longleftrightarrow x \preceq y

    • 7.公式解读 : 如果 xx , yy 两个元素 构成 有序对 <x,y><x,y> , 并且在偏序关系RR , xxyy 具有 RR 关系 , 也可以写成 xx 小于等于 ( 偏序符号 ) yy ;

    • 8.常见的偏序关系 : 树 上 的 小于等于关系 , 集合上的包含关系 , 00 自然数之间的整除关系 , 都是常见的偏序关系 ;




    ( 2 ) 偏序关系 与 等价关系 ( 等价关系 用于分类 | 偏序关系 用于组织 )


    偏序关系 与 等价关系 :

    • 1.表示层次结构 : 偏序关系是非常常用的二元关系 , 通常用来 表示 层次结构 ;
    • 2.等价关系 : 等价关系 是 用来分类的 , 将一个 集合 分为 几个等价类 ;
    • 3.偏序关系 : 偏序关系 通常是 用来组织的 , 在每个类的内部 , 赋予其一个结构 , 特别是层次结构 , 有上下层级 ,




    2. 偏序集定义



    ( 1 ) 偏序集定义


    偏序集 定义 :

    • 1.前置条件 1 : \preceqAA 上的 偏序关系 ;
    • 2.结论 : <A,><A , \preceq> 是偏序集 ;
    • 3.解读 : 集合 AA 与 偏序关系 \preceq 构成的有序对 , 称为 偏序集 ;





    二. 偏序关系 示例




    1. 小于等于关系



    ( 1 ) 小于等于关系 说明


    偏序集示例 1 ( 小于等于关系 \leq 是 偏序关系 ) :

    • 1.公式表示 : ̸=AR,<A,>\varnothing \not= A \subseteq R , <A , \leq >
    • 2.语言描述 : 如果 AA 是 实数集 RR 的 子集 , 并且 AA 不能 是 空集 \varnothing , 集合 AA 中的 小于等于关系 , 是偏序关系 ;
    • 3.使用集合形式表示关系 : ={<x,y>x,yAxy}\leq = \{ <x,y> | x,y \in A \land x \leq y \}



    ( 2 ) 小于等于关系 分析


    实数集 AA 上的 小于等于关系 ( \leq ) 分析 :

    • 1.自反性质分析 : xx 小于等于 xx , xxx \leq x , 是成立的 , 小于等于关系 是 自反的 ;
    • 2.反对称性质分析 : xx 小于等于 yy , yy 小于等于 xx , 推出 x=yx = y , 符合 反对称性质 的 定义 , 因此 小于等于 关系 是 反对称的 ,
    • 3.传递性质分析 : xx 小于等于 yy , yy 小于等于 zz , xx 小于等于 zz , 是成立的 , 因此 小于等于关系 是 传递的 ;
    • 4.总结 : 综上所述 , 小于等于 关系 是 偏序关系 ;




    2. 大于等于关系



    ( 1 ) 大于等于关系 说明


    偏序集示例 2 ( 大于等于关系 \geq 是 偏序关系 ) :

    • 1.公式表示 : ̸=AR,<A,>\varnothing \not= A \subseteq R , <A , \geq >
    • 2.语言描述 : 如果 AA 是 实数集 RR 的 子集 , 并且 AA 不能 是 空集 \varnothing , 集合 AA 中的 大于等于关系 ( \geq ) , 是偏序关系 ;
    • 3.使用集合形式表示关系 : ={<x,y>x,yAxy}\geq = \{ <x,y> | x,y \in A \land x \geq y \}



    ( 2 ) 大于等于关系 分析


    实数集 AA 上的 大于等于关系 ( \geq ) 分析 :

    • 1.自反性质分析 : xx 大于等于 xx , xxx \geq x , 是成立的 , 大于等于关系 是 自反的 ;
    • 2.反对称性质分析 : xx 大于等于 yy , yy 大于等于 xx , 推出 x=yx = y , 符合 反对称性质 的 定义 , 因此 大于等于 关系 是 反对称的 ,
    • 3.传递性质分析 : xx 大于等于 yy , yy 大于等于 zz , xx 大于等于 zz , 是成立的 , 因此 大于等于关系 是 传递的 ;
    • 4.总结 : 综上所述 , 大于等于 关系 是 偏序关系 ;




    3. 整除关系



    ( 1 ) 整除关系 说明


    偏序集示例 3 ( 整除关系 是 偏序关系 ) :

    • 1.公式表示 : ̸=AZ+={xxZx>0}<A,>\varnothing \not= A \subseteq Z_+ = \{ x | x \in Z \land x > 0 \}<A , | >
    • 2.语言描述 : 如果 AA 是 正整数集 Z+Z_+ 的 子集 , 并且 AA 不能 是 空集 \varnothing , 集合 AA 中的 整除关系 ( | ) , 是偏序关系 ;
    • 3.使用集合形式表示关系 : ={<x,y>x,yAxy}|= \{ <x,y> | x,y \in A \land x | y \}
    • 4.整除关系 : xyx|y , xxyy 的因子 , 或 yyxx 的倍数 ;



    ( 2 ) 整除关系 分析


    正整数集 AA 上的 整除关系 ( | ) 分析 :

    • 1.自反性质分析 : xx 整除 xx , xxx | x , 是成立的 , 整除关系 ( | ) 是 自反的 ;
    • 2.反对称性质分析 : xx 整除 yy , yy 整除 xx , 两个正整数互相都能整除 , 它们只能相等 , 推出 x=yx = y , 符合 反对称性质 的 定义 , 因此 整除 关系 是 反对称的 ,
    • 3.传递性质分析 : xx 整除 yy , yy 整除 zz , xx 整除 zz , 是成立的 , 因此 整除关系 是 传递的 ;
    • 4.总结 : 综上所述 , 整除 关系 是 偏序关系 ;




    4. 包含关系



    ( 1 ) 包含关系 说明


    偏序集示例 4 ( 包含关系 \subseteq 是 偏序关系 ) :

    • 1.公式表示 : AP(A),={<x,y>x,yAxy}\mathscr{A} \subseteq P(A) , \subseteq = \{<x , y> | x , y \in \mathscr{A} \land x \subseteq y \}
    • 2.语言描述 : 集合 AA 上的幂集合 P(A)P(A) , P(A)P(A) 的子集合 构成 集族 A\mathscr{A} , 该集族 A\mathscr{A} 上的包含关系 , 是偏序关系 ;



    ( 2 ) 包含关系 分析


    分析 集合的 子集族 之间的包含关系 :


    ① 假设一个比较简单的集合

    A={a,b} A=\{a, b\}


    ② 分析 下面 AA 的 3 个子集族 ;

    A1={,{a},{b}} \mathscr{A}_1 = \{ \varnothing , \{a\} , \{b\} \}

    集族 A1\mathscr{A}_1 包含 空集 \varnothing , 单元集 {a}\{a\} , 单元集 {b}\{b\} ;

    A2={{a},{a,b}} \mathscr{A}_2 = \{ \{a\} , \{a, b\} \}

    集族 A2\mathscr{A}_2 包含 单元集 {a}\{a\} , 2 元集 {a,b}\{a, b\} ;

    A3=P(A)={,{a},{b},{a,b}} \mathscr{A}_3 = P(A) = \{ \varnothing , \{a\} , \{b\} , \{a, b\} \}

    集族 A3\mathscr{A}_3 包含 空集 \varnothing , 单元集 {a}\{a\} , 单元集 {b}\{b\} , 2 元集 {a,b}\{a, b\} ; 这是 集合 AA 的 幂集 ;


    ③ 列举出集族 A1\mathscr{A}_1 上的包含关系 :

    1=IA1{<,{a}>,<,{b}>} \subseteq_1 = I_{\mathscr{A}1} \cup \{ <\varnothing , \{a\}> , <\varnothing , \{b\}> \}

    1\subseteq_1 是集合 A1\mathscr{A}1 上的偏序关系 ;

    即 分析 空集 \varnothing , 单元集 {a}\{a\} , 单元集 {b}\{b\} 三个 集合之间的包含关系 :

    • 1.恒等关系 IA1I_{\mathscr{A}1} : <{a},{a}><{b},{b}><\{a\} , \{a\}> 和 <\{b\} , \{b\}> , 集合上的恒等关系 , 每个集合 肯定 自己包含自己 ;
    • 2.<,{a}><\varnothing , \{a\}> : 空集 肯定 包含于 集合 {a}\{a\} ;
    • 3.<,{b}><\varnothing , \{b\}> : 空集 肯定 包含于 集合 {b}\{b\} ;
    • 4.总结 : 这些包含关系 的性质分析 :
      • ① 自反 : 每个元素自己 包含 自己 , AAA \subseteq A , 包含关系具有 自反性质 ;
      • ② 反对称 : 如果 集合 ABA \subseteq B , BAB \subseteq A , 那么 A=BA = B , 显然 包含关系 具有反对称性质 ;
      • ③ 传递 : 如果 ABA \subseteq B , 并且 ACA \subseteq C , 那么有 ACA \subseteq C , 包含关系 具有传递性质 ;

    ④ 列举出集族 A2\mathscr{A}_2 上的包含关系 :

    2=IA2{<{a},{a,b}> \subseteq_2 = I_{\mathscr{A}2} \cup \{ <\{a\} , \{a, b\}>

    2\subseteq_2 是集合 A2\mathscr{A}2 上的偏序关系 ;


    ⑤ 列举出集族 A3\mathscr{A}_3 上的包含关系 :

    3=IA3{<,{a}>,<,{b}>,<,{a,b}>,<{a},{a,b}>,<{b},{a,b}>} \subseteq_3 = I_{\mathscr{A}3} \cup \{ <\varnothing , \{a\}> , <\varnothing , \{b\}>, <\varnothing , \{a, b\}> , <\{a\} , \{a, b\}> , <\{b\} , \{a, b\}> \}

    3\subseteq_3 是集合 A3\mathscr{A}_3 上的偏序关系 ;




    5. 加细关系



    ( 1 ) 加细关系 说明


    偏序集示例 5 ( 加细关系 \preceq_{加细} 是 偏序关系 ) :

    • 1.加细关系描述 : A̸=A \not= \varnothing , π\pi 是 由 AA 的 一些划分 组成的集合 ;

    ={<x,y>x,yπxy}\preceq_{加细} = \{<x , y> | x , y \in \pi \land x 是 y 的 加细\}

    • 2.划分 : 划分 是 一个 集族 ( 集合的集合 ) , 其元素是集合 又叫 划分快 , 其中 每个元素(集族中的元素)集合 中的 元素 是 非空集合 AA 的元素 ;
      • ① 该集族不包含空集 ;
      • ② 该集族中任意两个集合都不想交 ;
      • ③ 该集族中 所有 元素 取并集 , 得到 集合 AA ;



    ( 2 ) 加细关系 分析


    分析 集合的 划分之间 的 加细 关系 :

    ① 集合 A={a,b,c}A = \{a, b, c\} , 下面的 划分 和 加细 都基于 该 集合 进行分析 ;


    ② 下面 列出集合 AA 的 5 个划分 :

    划分 1 : 对应 1 个等价关系 , 分成 1 类 ;
    A1={{a,b,c}}\mathscr{A}_1 =\{ \{ a, b, c \} \}

    划分 2 : 对应 2 个等价关系 , 分成 2 类 ;
    A2={{a},{b,c}}\mathscr{A}_2 = \{ \{ a \} , \{ b, c \} \}

    划分 3 : 对应 2 个等价关系 , 分成 2 类 ;
    A3={{b},{a,c}}\mathscr{A}_3 = \{ \{ b \} , \{ a, c \} \}

    划分 4 : 对应 2 个等价关系 , 分成 2 类 ;
    A4={{c},{a,b}}\mathscr{A}_4 = \{ \{ c \} , \{ a, b \}\}

    划分 5 : 对应 3 个等价关系 , 分成 3 类 ; 每个元素自己自成一类
    A5={{a},{b},{c}}\mathscr{A}_5 = \{ \{ a \} , \{ b \}, \{ c \} \}

    ③ 下面 列出要分析的几个由划分组成的集合 :

    集合 1 :
    π1={A1,A2}\pi_1 = \{ \mathscr{A}_1, \mathscr{A}_2 \}

    集合 2 :
    π2={A2,A3}\pi_2 = \{ \mathscr{A}_2, \mathscr{A}_3 \}

    集合 3 :
    π3={A1,A2,A3,A4,A5}\pi_3 = \{ \mathscr{A}_1, \mathscr{A}_2, \mathscr{A}_3, \mathscr{A}_4, \mathscr{A}_5 \}

    ④ 集合 π1\pi_1 上的加细关系分析 :

    • 1.自己是自己的加细 : 每个划分 , 自己是自己的加细 , 因此 加细关系中 有 Iπ1I_{\pi 1} , <A1,A1><\mathscr{A}_1 , \mathscr{A}_1> , <A2,A2><\mathscr{A}_2 , \mathscr{A}_2> ;
    • 2.其它加细关系 : A2\mathscr{A}_2 划分中的 每个划分块 , 都是 A1\mathscr{A}_1 划分 中块 的某个划分块的子集合 , 因此有 A2\mathscr{A}_2A1\mathscr{A}_1 的加细 , 记做 <A2,A1><\mathscr{A}_2, \mathscr{A}_1> ;
    • 3.加细的定义 : A1\mathscr{A}_1A2\mathscr{A}_2 都是集合 AA 的划分, A2\mathscr{A}_2 中的 每个划分块 , 都含于 A1\mathscr{A}_1 中的某个划分块中 , 则称 A2\mathscr{A}_2A1\mathscr{A}_1 的加细 ;

    - 4.加细关系列举 :
    1=Iπ1{<A2,A1>}\preceq_1 = I_{\pi 1} \cup \{ <\mathscr{A}_2, \mathscr{A}_1> \}


    ⑤ 集合 π2\pi_2 上的加细关系分析 :

    • 1.自己是自己的加细 : 每个划分 , 自己是自己的加细 , 因此 加细关系中 有 Iπ2I_{\pi 2} , <A3,A3><\mathscr{A}_3 , \mathscr{A}_3> , <A2,A2><\mathscr{A}_2 , \mathscr{A}_2> ;
    • 2.其它加细关系 : A2\mathscr{A}_2A3\mathscr{A}_3 这两个划分互相不是加细 , 因此 该集合中没有其它加细关系 ;

    - 4.加细关系列举 :
    2=Iπ2\preceq_2 = I_{\pi 2}


    ⑥ 集合 π3\pi_3 上的加细关系分析 :

    • 1.自己是自己的加细 : 每个划分 , 自己是自己的加细 , 因此 加细关系中 有 Iπ3I_{\pi 3} , <A1,A1><\mathscr{A}_1 , \mathscr{A}_1> , <A2,A2><\mathscr{A}_2 , \mathscr{A}_2>, <A3,A3><\mathscr{A}_3 , \mathscr{A}_3>, <A4,A4><\mathscr{A}_4 , \mathscr{A}_4>, <A5,A5><\mathscr{A}_5 , \mathscr{A}_5> ;
    • 2.其它加细关系 :
      • ① 与 A5\mathscr{A}_5 划分相关的加细 : A5\mathscr{A}_5 是划分最细的 等价关系 , A5\mathscr{A}_5 是其它所有 划分 的加细 , 因此有 <A5,A4><\mathscr{A}_5 , \mathscr{A}_4> , <A5,A3><\mathscr{A}_5 , \mathscr{A}_3> , <A5,A2><\mathscr{A}_5 , \mathscr{A}_2> , <A5,A1><\mathscr{A}_5 , \mathscr{A}_1> ;
      • ② 与 A1\mathscr{A}_1 划分相关的加细 : A1\mathscr{A}_1 是划分最粗的 等价关系 , 所有的划分 都是 A1\mathscr{A}_1 的加细 , 因此有 <A5,A1><\mathscr{A}_5 , \mathscr{A}_1> , <A4,A1><\mathscr{A}_4 , \mathscr{A}_1> , <A3,A1><\mathscr{A}_3 , \mathscr{A}_1> , <A2,A1><\mathscr{A}_2 , \mathscr{A}_1> ;
    • 4.加细关系列举 :

    3=Iπ3{<A5,A4>,<A5,A3>,<A5,A2>,<A5,A1>,<A4,A1>,<A3,A1>,<A2,A1>}\preceq_3 = I_{\pi 3} \cup \{ <\mathscr{A}_5 , \mathscr{A}_4> , <\mathscr{A}_5 , \mathscr{A}_3> , <\mathscr{A}_5 , \mathscr{A}_2> , <\mathscr{A}_5 , \mathscr{A}_1> , <\mathscr{A}_4 , \mathscr{A}_1>, <\mathscr{A}_3 , \mathscr{A}_1>, <\mathscr{A}_2 , \mathscr{A}_1> \}


    展开全文
  • 在前文中我们将知识图谱中实体和关系的定义分为自顶向下和自底向上两种策略,在本文中我们继续深入研究知识图谱中的实体和关系定义相关内容。 1.实体种类 实体的定义通常根据领域词典、词表来进行规范,之后根据目标...

    0.引言

    在前文中我们将知识图谱中实体和关系的定义分为自顶向下和自底向上两种策略,在本文中我们继续深入研究知识图谱中的实体和关系定义相关内容。

    1.实体种类

    实体的定义通常根据领域词典、词表来进行规范,之后根据目标需求进行自定义。

    例如,对于中文地理领域实体,以《中国大百科全书–中国地理》和《百度百科》地理词条信息为数据源,参照英文标准数据集 SemEval-2010 Task-8 的数据格式,人工构建了适用于地理实体抽取语料库。

    在金融实体中,对《高盛金融词汇英汉详解词典》和《英汉路透金融词典》中 8675个术语的整理和总结作如下定义:在这里插入图片描述
    一些常见的数据集包含学术中通用的实体以及关系,在实际研究中可以借鉴,再根据需求进行自定义。CoNLL 2003:共包含人名、组织、地名、时间和数量五类实体。

    2.实体关系的种类

    根据 MUC7 会议提出的定义,实体关系可分为“分类关系”(Taxonomy) 和“非分类关系”(Non-Taxonomy)两大类。在这里插入图片描述
    例如,对于给定的文本:在这里插入图片描述
    从图 2.1 展示的文本中,我们可以提取出表征上下位关系的语句:“衡阳 盆地属于中国江南地区具有地域特点的红层盆地。”,其中“衡阳盆地”和“红 层盆地”两地理概念间的上下位关系描述,如图 2- 2 所示。在这里插入图片描述
    同理,我们可以从描述“龙门山”的地理文本中,提取出表征同义关系的 语句,地理概念词“龙门山”的描述信息,如图 2- 3 所示。
    在这里插入图片描述在这里插入图片描述
    通常而言,实体关系都属于以上几类的范畴,在实际的应用中大多根据实际需求进行自定义。

    例如,医疗大数据技术实体与实体关系有如下定义:
    在这里插入图片描述
    在这里插入图片描述其中关系定义为:Forward(促进)、Restraint(抑制)[以上两种等同于因果关系]、Contain(包含)[上下位关系]、Similar(相似)[同义]

    3.结语

    实体关系的定义中通用领域较为成熟,但是怎样定制目标实体、关系是需要不断突破的,我们在实践中需要多总结。实体和关系的定义一般要求不重、不漏,在定义中借助领域词典、词表和领域专家的建议是比较合适的。

    引用

    [1]梁晨. 金融领域术语识别的研究[D].大连理工大学,2017.
    [2]王娜. 基于迁移学习的基础教育地理领域概念关系抽取[D].武汉理工大学,2017.
    [3]鄂海红,张文静,肖思琪,程瑞,胡莺夕,周筱松,牛佩晴.深度学习实体关系抽取研究综述[J].软件学报,2019,30(06):1793-1818.

    展开全文
  • 用select取出一列,这是查询结果是关系么,感觉不是,关系至少有两个不同属性集的迪卡尔积的子集
  • elixir的关系定义

    千次阅读 2013-11-05 11:52:18
    elixir的版本为0.7.1,依赖的...而且是轻量级的封装,它提供了更简单的方式来创建Python类并直接映射到关系数据库表(即通常所说的Active Record设计模式),类似于Django中的ORM。   下面为relationships.py源码中

    elixir的版本为0.7.1,依赖的sqlalchemy版本为0.7.8,转载请注明出处。

        Elixir是基于python界有名的ORM库SQLAlchemy做的封装。而且是轻量级的封装,它提供了更简单的方式来创建Python类并直接映射到关系数据库表(即通常所说的Active Record设计模式),类似于Django中的ORM。

    下面为relationships.py源码中对四种关系的说明。

      这个模块为在Elixir的实体之间定义映射关系提供支持。Elixir目前提供两种语法来定义关系:

      默认的是使用基于属性的语法,它提供有如下几种关系:

        ManyToOne, OneToMany, OneToOne and ManyToMany

      另外一种就是基于领域特定语言(Domain Specific Language)的语法,相应提供有如下几种关系:

        belongs_to, has_many, has_one and has_and_belongs_to_many

    ======================

    基于属性的语法

    ======================  

      这些负责建立关系映射的方法接受的第一个参数,是需要被关系到的实体类(entity class)的类名。

      在这个强制参数之后,其他参数都用来描述一些特定高级行为,这可以通过查看每个关系类型的特定关键参数列表来了解。在这里需要指出的是,所有在下面文档里提到的那些不是专门由Elixir负责处理的参数都将被传递给SQLAlchemyrelation函数处理,请查看SQLAlchemySQLAlchemyrelation函数的文档,以了解更多这些参数的详细内容<http://www.sqlalchemy.org/docs/05/reference/orm/mapping.html#sqlalchemy.orm.relation>

      记住下面这些参数是Elixir自动生成的,在你没必要重定义Elixir提供的这些参数的值的时候,切记不要使用这些参数:

      `uselist`,`remote_side`, `secondary`, `primaryjoin` and `secondaryjoin`

      另外,你在定义一个双向关系的时候,你必须在另外那个实体明确定义一个反向关系(inverse),这正好与SQLAlchemybackrefs的定义方式不同。在没有歧义的情况下,Elixir将自动匹配实体之间定义的关系。但如果同一类型多个的关系在两个实体分别都作定义,那么Elixir将无法确定那个关系是关系反向的一方。所以,你需要为另外那个实体中定义的关系的inverse参数提供被反向的关系名,以明确一个反向关系。

      下面是每种关系的详解:

    `ManyToOne`

    -----------

      在子实体的一边,描述一个有多个子实体的父子关系(parent-child relationship)

      比如,描述某个Pet类实体的所有者是一个Person类实体,那么可以表达为:

        class Pet(Entity):
            owner = ManyToOne('Person')

      在这里,我们背后假设了Person实体的主键是一个叫`id`的整型列,那么定义的ManyToOne关系将会在Pet实体的中自动添加一个名为`owner_id`的整型列。

      此外,除了从SQLAlchemyrelation函数关键字继承的参数,ManyToOne关系还支持下面这些可选参数,他们将指导新列的创建过程:

    可选参数名

    描述

    ``colname``

    为外键列指定一个自定名称。

    这个参数接受一个字符串或者一个字符串列表,字符串表的字符数必须与被关联到的实体的主键的列数相等。

    如果没有使用这个参数,那么新建的外键列的名称的将采用在options.FKCOL_NAMEFORMAT中定义的默认方式,形式为:"%(relname)s_%(key)s",这里的'relname'是实体所定义的ManyToOne关系字段的名称,'key'是被关联到的目标实体的主键列的名称。因此,在上面的例子中,外键列的名称当然就是"owner_id"

    ``required``

    指定这个字段是否可以为空(即不给定该列的值),除非为所在实体的主键,一般默认值为`False`

    ``primary_key``

    指定该关系所创建的列是否作为所在实体的主键列。

    ``column_kwargs``

    保存一个需要传递给列的其它参数名及其值的字典。

    ``target_column``

    指定被关联到的目标实体中的作为该关系所在实体的外键的列。

    默认使用被关联到的实体的主键列。

     

    下面的可选参数用于自定义所创建的外键约束(ForeignKeyConstraint)

    可选参数名

    描述

    ``use_alter``

    如果为True,sqlalchemy将会在第二个SQL语句中添加这个约束(这与创建表的语句不同),这允许在表间定义一个环状外键依赖关系。

    ``ondelete``

    外键约束ondelete条款。

    可以是以下之一: `cascade`, `restrict`, `set null`或者`set default`

    ``onupdate``

    外键约束onupdate条款。

    可以是以下之一: `cascade`, `restrict`, `set null`或者`set default`

    ``column_kwargs``

    一个保存有其余需要传递给约束的参数名及其值的字典。

     

      在某些时候,你可能想要明确地声明外键列,而不是自动生成,可能的原因如:你想要精确的声明外键列的相关参数,以及使用column_kwargs参数使你的代码变得有些丑,或者因为你的外键列名与你的属性名相冲突(这种情况会抛出一个异常)。这时,你可以使用`field`参数来指定一个已经声明的字段来作为外键。比如:

         class Pet(Entity):
            owner_id = Field(Integer, colname='owner')
            owner = ManyToOne('Person', field=owner_id) 
    

    可选参数名       

    描述

    ``field``

    指定一个预先声明的字段来作为外键列,这个参数与colnamecolumn_kwargs不要同时使用。

     

      此外,Elixir支持使用belongs_to语句来代替ManyToOne,这是一个基于DSL的语法形式而已。

    `OneToMany`

    -----------

      在父实体的一边,描述一个有多个子实体的父子关系(parent-child relationship)

      比如,如果要描述一个Person类实体有多个children类实体,而每一个children类实体又都是一个Person类实体,可以表达如下:

        class Person(Entity):
            parent = ManyToOne('Person')
            children = OneToMany('Person')

      注意,`OneToMany`关系不能在没有定义与之对应的`ManyToOne`关系的情况下存在,因为`OneToMany`关系需要使用由`ManyToOne`关系创建的外键(注:他们不一定像上面这样总是同时定义在一个实体种,大多数时候还是在两个不同的实体中定义)。

      此外,除了从SQLAlchemyrelation函数关键字继承的参数,`OneToMany`关系支持下面这些可选参数:

    可选参数名

    描述

    ``order_by``

    指定对通过被关联到的实体,对用来定义ManyToOne关系的字段的访问结果的集合,将依据哪个字段进行排序。注意,这个排序只在从数据库加载实体对象集合的时侯被应用,后来追加入实体集合的对象,将不会在运行于内存中的集合里得到重新排序。

    这个参数接受一个字符串或者一个字符串列表,字符串列表中的每个字符串都与结果集合中实体的字段相对应。这些字段名前都可以加上一个可选的负号前缀代表降序排列。

    ``filter``

    为关系指定一个过滤准则(作为一个条款),这个准则可以用由Elixir为关系创建的`and_`方式连接两个普通过滤准则(类似于主键的连接)。例如:boston_addresses = OneToMany('Address', filter=Address.city == 'Boston')

    |

      此外,Elixir支持使用has_many语句来代替OneToMany,这是一个基于DSL的语法形式。

    `OneToOne`

    ----------

      在父实体的一边,定义一个仅有一个子实体时父子关系(parent-child relationship)

      比如一个`Car`对象只有一个变速操纵杆(gear stick),用`GearStick`对象代表。那么这个关系可以表述如下:

        class Car(Entity):
            gear_stick = OneToOne('GearStick', inverse='car')
    
        class GearStick(Entity):
            car = ManyToOne('Car')

      注意`OneToOne`关系不能在没有与之对应的`ManyToOne`关系的情况下存在,因为`OneToOne`关系需要使用由`ManyToOne`关系创建的外键。

      此外,Elixir支持使用has_one语句来代替OneToOne,这是一个基于DSL的语法形式。

    `ManyToMany`

    ------------

      描述如下关系:一个类型的实体可以是关联到多个另一个类型的对象,而另一个类型的对象也可以关联到多个这个类型的对象。

      比如,一个`Article`对象可以个多个标签(tags),而一个标签可以被使用到多个文章(articles)对象中。这可以表达如下:

        class Article(Entity):
            tags = ManyToMany('Tag')
    
        class Tag(Entity):
            articles = ManyToMany('Article')

      在这个`ManyToMany`关系背后,将会自动创建一个中间表格来为这些数据提供支持。

      注意,你在其实不必总是定义一个反向关系。比如在我们这个例子里,尽管我们想让标签在多个文章中使用,但我们也许不会对某个特定标签究竟在哪些文章中使用感兴趣。因此,我们可以省略关系`Tag`实体的一边的定义。

      如果你的`ManyToMany`是一个自引用的实体,当然包含它的实体已被自动加载(并且你不想手动指定primaryjoinsecondaryjoin参数),那么你还必须指定`remote_colname``local_colname`的其中之一。

      此外,除了从SQLAlchemyrelation函数关键字继承的参数,`OneToMany`关系支持下面这些可选参数:

    可选参数名

    描述

    ``tablename``

    为中间表指定一个表名。无论是新创建,还是从数据库自动加载/反射的,均可以使用这个参数。

    如果不使用这个参数,则Elixir将根据关系中两个实体的表格自动生成一个表名。如果存在这个参数,则根据这个参数生成表名。

    尽管这是一个可选参数,但是在你不能准确的知道自动生成的表名的情况下,建议你最好能使用这个参数。

    ``schema``

    为中间表格指定一个模式(schema)

    无论是新创建,还是从数据库自动加载/反射的,均可以使用这个参数。

    ``remote_colname``

    一个引用自远程(或者说被关联到的)实体表的,用来指定中间表列名称的字符串或字符串列表。

    ``local_colname``

    一个引用自远程(或者说被关联到的)实体表的,用来指定中间表列名称的字符串或字符串列表。

    ``table``

    使用一个已创建的表。

    如果使用这个参数,Elixir将使用一个给定的表,而不再为关系自动生成一个表。

    ``order_by``

    指定对通过被关联到的实体,访问定义ManyToMany关系的字段的结果的集合,将依据哪个字段进行排序。注意,这个排序只在从数据库加载实体对象集合的时侯被应用,后来追加入实体集合的对象,将不会在运行于内存中的集合里得到重新排序。                                         

    这个参数接受一个字符串或者一个字符串列表,字符串表中的每个字符串都与结果集合中实体的字段相对应。这些字段名前都可以加上一个可选的负号前缀代表降序排列。

    ``ondelete``

    外键约束ondelete条款。

    可以是以下之一: `cascade`, `restrict`, `set null`或者`set default`

    ``onupdate``

    外键约束onupdate条款。

    可以是以下之一: `cascade`, `restrict`, `set null`或者`set default`

    ``column_kwargs``

    一个保存有其余需要传递给约束的参数名及其值的字典。

    ``column_format``

    将被弃除的参数。一个用来代替为映射表格里的列指定名称的格式字符串。默认值定义在`elixir.options.M2MCOL_NAMEFORMAT`中。

    你可以为格式字符串传递`tablename`, `key`,  `entity`等参数。

     

    ================

    DSL-based 语法

    ================

      DSL语句提供一个在实体间定义各种关系的替代方式。这些定义语句的第一个参数是关系的名称。第二个参数是被关联的对象的类型('kind'),一般使用`of_kind`作为关键字。

     `belongs_to`

    ------------

      belongs_to语句是ManyToOne关系的DSL语法等价形式。它支持的参数与ManyToOne相同。eg:

        class Pet(Entity):
            belongs_to('feeder', of_kind='Person')
            belongs_to('owner', of_kind='Person', colname="owner_id")

    `has_many`

    ----------

      has_many语句是OneToMany关系的DSL语法等价形式。它支持的参数与OneToMany相同。eg: 

        class Person(Entity):
            belongs_to('parent', of_kind='Person')
            has_many('children', of_kind='Person')  

      这里还有一个仅需要多使用两个参数`through``via`的复杂形式,即可替代`has_and_belongs_to_many`语句,定义一个many-to-many关系。下面有一个例子:

        class Person(Entity):
            has_field('name', Unicode)
            has_many('assignments', of_kind='Assignment')
            has_many('projects', through='assignments', via='project')
    
        class Assignment(Entity):
            has_field('start_date', DateTime)
            belongs_to('person', of_kind='Person')
            belongs_to('project', of_kind='Project')
    
        class Project(Entity):
            has_field('title', Unicode)
            has_many('assignments', of_kind='Assignment')

      在上面的例子中,一个Person实体通过(through)中间关系对象Assignmentproject属性(via='project')拥有了多个Project,即实现了对projects关系的定义。

    `has_one`

    ---------

       has_one语句是OneToOne关系的DSL语法等价形式。它支持的参数与OneToOne相同。

        class Car(Entity):
            has_one('gear_stick', of_kind='GearStick', inverse='car')
    
        class GearStick(Entity):
            belongs_to('car', of_kind='Car')

    `has_and_belongs_to_many`

    -------------------------

      has_and_belongs_to_many语句是ManyToMany关系的DSL语法等价形式。它支持的参数与ManyToMany相同。eg

     

        class Article(Entity):
            has_and_belongs_to_many('tags', of_kind='Tag')
    
        class Tag(Entity):
            has_and_belongs_to_many('articles', of_kind='Article')
    展开全文
  • EF CodeFirst 一对一关系定义

    千次阅读 2014-10-16 22:40:57
    一个帐号与帐号扩展信息的一对一关系Model定义如下 //帐号类 public class Account { public int ID { get; set; } public string Name { get; set; } public AccountEx AccountEx { get; set; } } //帐号...
    

    一个帐号与帐号扩展信息的一对一关系Model定义如下

    //帐号类
    public class Account
    {
    	public int ID { get; set; }
    
    	public string Name { get; set; }
    
    	public AccountEx AccountEx { get; set; } //对象
    }
    
    //帐号扩展类
    public class AccountEx
    {
    	public int AccountID { get; set; }
    
    	public virtual Account Account { get; set; }
    
    	public string Sex { get; set; }
    
    	public int Age { get; set; }
    
    	public string Remark { get; set; }
    }


    运行代码,编译器会产生异常
    模型生成过程中检测到一个或多个验证错误:
    ConsoleApplication11.Model.AccountEx: : EntityType“AccountEx”未定义键。请为该 EntityType 定义键。
    AccountExs: EntityType: EntitySet“AccountExs”基于未定义任何键的类型“AccountEx”。


    为AccountEx类的AccountID添加[Key]特性

    [Key]
    public int AccountID { get; set; }


    运行代码,又产生一个新的异常
    无法确定类型“ConsoleApplication11.Model.Account”与“ConsoleApplication11.Model.AccountEx”之间的关联的主体端。必须使用关系 Fluent API 或数据注释显式配置此关联的主体端。

    应为Account同时设置Key和ForeignKey特性

    [Key, ForeignKey("Account")]
    public int AccountID { get; set; }


    或使用Fluent API

    modelBuilder.Entity<AccountEx>().HasKey(m => m.AccountID);
    modelBuilder.Entity<AccountEx>().HasRequired(m => m.Account).WithOptional(n => n.AccountEx);


    即,根据 Sql 一对一关系 一文中的描述
    AccountEx表中AccountID字段首先是一个主键,具有唯一性约束,这个主键不是自增长的,而是由Account数据插入时维护,即AccountID与Accoutn表的ID保持一致
    同时它是一个外键,用于关联到Account表



    
    展开全文
  • 关系模式的形式化定义

    千次阅读 2019-12-16 23:21:24
    关系模式由五部分组成,即它是一个五元组: R:关系名 U:组成该关系的属性名集合 D:属性组U中属性所来自的域 DOM:属性向域的映象集合 F:属性间数据的依赖关系集合 ...
  • 关系模式(1)什么是关系模式(2)定义关系模式3.关系模式和关系的对比4.关系数据库 0.思维导图 1. 关系 什么是关系? 单一的数据结构----关系 现实世界的实体以及实体间的各种联系均用关系来表示 逻辑结构----二...
  • 因果关系、INUS定义和SUPPES定义

    千次阅读 2006-11-10 15:13:00
    原文地址:http://wt.vankeweekly.com/blog/%B4%F3%CA%AB/articles/11884.html因果关系、INUS定义和SUPPES定义我们知道,因果关系对于我们想任何问题和做任何事情,都是非常重要的。甚至有很多人认为,天赋的因果...
  • 关系数据结构及其形式化定义
  • 独立正交不相关定义关系

    千次阅读 2018-06-01 16:00:40
    一、“独立”、“不相关”和“正交”的定义假设X为一个随机过程,则在t1和t2时刻的随机变量的相关定义如下(两个随机过程一样):(1)定义Rx(t1,t2)=E{X(t1)X(t2)}为相关函数,若R=0,称正交(注意,相关...
  • uml类图定义关系

    千次阅读 2009-02-25 23:25:00
    uml定义关系主要有六种:依赖、类属、关联、实现、聚合和组合。下面对其定义和表示方法逐一说明。 依赖(Dependency):元素A的变化会影响元素B,但反之不成立,那么B和A的关系是依赖关系,B依赖A;类属关系和实现...
  • 关系模型的概念,定义

    万次阅读 2018-05-02 20:37:51
    关系数据模型: (1)关系模型与非关系模型不同,它是建立在严格的数学概念的基础上的。(2)关系模型的概念单一,无论实体还是实体之间的联系都用关系表示,操作的对象个操作的结果都是关系,所以其数据结构简单、...
  • 关系关系模式、关系模型blablabla… 数据 :数据就是数据库中存储的基本数据,比如学生的学号、学生的班级 数据库 :存放数据的仓库 数据库管理系统 :数据库软件,如MySQL、Oracle 数据库系统 :数据库+...
  • 关系数据结构及形式化定义

    千次阅读 2019-03-02 10:50:57
    关系 基础概念 域 一组具有相同数据类型的值的集合; 笛卡尔积 例子 关系的组成 关系 $D_1\times D_2\times D_3\times...\times D_n$的子集叫做域在$D_1,D_2, D_3,...,D_n$上的关系,表示为: R(D_1,D_2,D_3,.....
  • 原问题与对偶问题的定义关系

    千次阅读 2020-02-27 21:56:35
    原问题与对偶问题的定义关系 (1)原问题与对偶问题定义 一个优化问题的原问题和对偶问题定义如下: 原问题: 最小化:   f(w)限制条件:{gi(w)≤0   i=1⋯Khi(w)=0   i...
  • 上篇博文提到:关系数据库系统支持三级模式结构,其模式、外模式和内模式中的基本对象有数据库模式、表、索引、视图等。相应的,SQL的数据定义功能包括数据库模式定义、表定义、索引定义和视图定义。 本篇博文主要...
  • 四元数、欧拉角和方向余弦的定义关系

    万次阅读 多人点赞 2016-08-03 19:26:35
    因此要弄懂这三种方法的定义关系,我们必须先从坐标系转化开始了解。下面以四旋翼为例,定义两个坐标系。导航坐标系(参考坐标系)n,选取东北天右手直角坐标系作为导航坐标系n、载体坐标系(机体坐标系)b,选取右手...
  • 全局变量与局部变量的定义关系

    千次阅读 2017-05-12 14:45:52
    定义全局变量时,我们的全局变量是放在全局数据区中,而定义局部变量时,是放在栈中的。 局部变量是可以和全局变量重名的,但是局部变量就相当一个地头蛇,在一个函数或者循环中可以屏蔽全局变量,使全局变量失效...
  • 关系模型中的一些关键字的定义

    千次阅读 2017-06-08 21:43:03
    关系(Relation):一个关系对应通常说的一张表。元组(Tuple):表中的一行即为一个元组。属性(Attribute):表中的一列即为一个属性,给每一个属性起一个名称即属性名。码(Key):也称为码键。表中的某个属性组,它可以唯一...
  • 七、关系数据结构及其形式化定义

    千次阅读 2013-09-11 21:41:51
    关系模型建立在集合代数的基础之上,因此其数据结构的定义由集合论的方法给出;  b. 关系模型只包含单一数据结构——关系;  c. 逻辑结构上就是一张二维表,非常简单;  d. 现实中的实体以及实体之间的联系均用...
  • 全通系统定义、零极点关系、应用

    千次阅读 2019-11-11 21:46:26
    全通系统定义: 表示方法: 应用一: 将任意因果稳定系统转化为,全通系统和最小相位系统 的级联。 应用二: 级联一个全通系统可以使非稳定滤波器变成一个稳定滤波器,把非稳定系统的单位圆外的极点映射到单位圆...
  • UML中定义关系主要有6种

    千次阅读 2012-08-01 09:36:19
    UML中定义关系主要有6种: 依赖、关联、聚合、组合/合成、泛化、实现; 1、依赖关系:  含义:是类与类之间的连接,表示一个类依赖于另外一个类的定义;依赖关系仅仅描述了类与类之间的一种使用与被使用的关系;  ...
  • 元数据的定义及其与MOF、模型关系

    万次阅读 2014-06-03 17:12:31
    一、元数据元数据(Meta Data)是关于数据的数据,是用来描述数据的数据。元数据描述数据的结构和意义。元数据的概念是抽象的,当人们描述现实世界的事物时,...从定义可知,描述数据的数据是元数据,那么元数据本身也
  • 个人博客网站系统java实现中, 4个主题对应不同的资讯,不同的资讯的博文内容不同,实现方法不同。请问要怎么定义主题、资讯以及博文之间的关系? 要定义资讯类继承主题类,博文类继承资讯类吗?
  • java中的接口的定义以及实现关系

    千次阅读 2018-03-04 01:50:19
    一、什么是接口? - 硬件接口:设备之间的连接方式 - 软件接口:程序代码,特殊的类,表示一种规范,是具有N个方法的特征集合。... - 接口中定义的成员变量,实质是全局静态变量,默认使用public st...
  • OOA、OOD和OOP的定义及之间的关系

    千次阅读 2016-09-08 16:36:29
    http://my.oschina.net/u/576883/blog/103800 OOA、OOD和OOP的定义及之间的关系
  • 如何定义数据库表之间的关系

    千次阅读 2009-07-09 10:27:00
    特别说明数据库的正规化是关系型数据库理论的基础。随着数据库的正规化工作的完成,数据库中的各个数据表中的数据关系也就建立起来了。在设计关系型数据库时,最主要的一部分工作是将数据元素如何分配到各个关系数据...
  • 文件位置: ... 隐藏属性: ...注意一定要先定义像追加的字段名,这相当于临时给model加字段,所以后面就可以像操作正常字段那样操作。...相关,定义模型关系: https://www.jianshu.com/p/d7e5ee17e5ed

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 88,296
精华内容 35,318
关键字:

关系定义