Länkhantering links--relation-between-tables

En länk beskriver kopplingen mellan en tabell och en annan.

Olika typer av föreningar, även kallade kardinaliteter, listas nedan.

  • Kardinalitet 1-1: en förekomst av källtabellen kan ha högst en motsvarande förekomst av måltabellen.
  • Kardinalitet 1-N: en förekomst av källtabellen kan ha flera motsvarande förekomster av måltabellen, men en förekomst av måltabellen kan ha högst en motsvarande förekomst av källtabellen.
  • Kardinalitet N-N: en förekomst av källtabellen kan ha flera motsvarande förekomster av måltabellen och vice versa.

I användargränssnittet representeras kardinalerna med en specifik ikon.

För kopplingsrelationer med en kampanjtabell/databas:

  • : Kardinalitet 1-1. Till exempel mellan en mottagare och en aktuell order. En mottagare kan bara vara relaterad till en förekomst av den aktuella ordertabellen åt gången.
  • : Kardinalitet 1-1, extern koppling. Till exempel mellan en mottagare och deras land. En mottagare kan bara vara relaterad till en förekomst av registerlandet. Innehållet i landstabellen sparas inte.
  • : Kardinalitet 1-N. Till exempel mellan en mottagare och prenumerationstabellen. En mottagare kan vara relaterad till flera förekomster i prenumerationstabellen.

För anslutningsrelationer med FDA (Federated Database Access):

  • : Kardinalitet 1-1
  • : Kardinalitet 1-N

Mer information om FDA-tabeller finns i Åtkomst till en extern databas.

En länk måste deklareras i schemat som innehåller sekundärnyckeln för tabellen som är länkad via huvudelementet:

<element name="name_of_link" type="link" target="key_of_destination_schema">
  <join xpath-dst="xpath_of_field1_destination_table" xpath-src="xpath_of_field1_source_table"/>
  <join xpath-dst="xpath_of_field2_destination_table" xpath-src="xpath_of_field2_source_table"/>
  ...
</element>

Länkarna följer följande regler:

  • Definitionen av en länk anges på en länk-typ <element> med följande attribut:

    • namn: länkens namn från källtabellen

    • mål: målschemats namn

    • etikett: länketikett

    • revLink (valfritt): namnet på den omvända länken från målschemat (dras automatiskt som standard)

    • integritet (valfritt): källtabellens referensintegritet till måltabellens förekomst.
      Möjliga värden är:

      • define: Det går att ta bort källförekomsten om den inte längre refereras av en målförekomst
      • normal: om du tar bort källförekomsten initieras nycklarna för länken till målförekomsten (standardläge), den här typen av integritet initierar alla sekundärnycklar
      • egen: Om du tar bort källförekomsten tas målförekomsten bort
      • owncopy: samma som own (vid borttagning) eller dubblerar förekomsterna (vid duplicering)
      • neutral: inget specifikt beteende
    • revIntegrity (valfritt): integritet i målschemat (valfritt, "normal" som standard)

    • revCardinality (valfritt): med värdet "single" fylls kardinaliteten med typen 1-1 (1-N som standard)

    • externalJoin (valfritt): tvingar den yttre kopplingen

    • revExternalJoin (valfritt): tvingar det yttre hörnet på den omvända länken

  • En länk refererar till ett eller flera fält från källtabellen till måltabellen. Fälten som utgör sammanfogningen ( <join>-elementet) behöver inte fyllas i eftersom de automatiskt dras av som standard med målschemats interna nyckel.

  • Ett index läggs automatiskt till i länkens sekundärnyckel i det utökade schemat.

  • En länk består av två halvlänkar, där den första deklareras från källschemat och den andra skapas automatiskt i målschemats utökade schema.

  • En join kan vara en yttre join om attributet externalJoin läggs till, med värdet "true" (stöds i PostgreSQL).

NOTE
Som standard är länkar de element som deklarerats i slutet av schemat.

Exempel: omvänd länk example-1

I exemplet nedan deklarerar vi en 1-N-relation till schematabellen "cus:company":

<srcSchema name="recipient" namespace="cus">
  <element name="recipient">
    ...
    <element label="Company" name="company" revIntegrity="define" revLabel="Contact" target="cus:company" type="link"/>
  </element>
</srcSchema>

Schemat som genererats:

<schema mappingType="sql" name="recipient" namespace="cus" xtkschema="xtk:schema">
  <element name="recipient" sqltable="CusRecipient">
    <dbindex name="companyId">
      <keyfield xpath="@company-id"/>
    </dbindex>
    ...
    <element label="Company" name="company" revLink="recipient" target="cus:company" type="link">
      <join xpath-dst="@id" xpath-src="@company-id"/>
    </element>
    <attribute advanced="true" label="Foreign key of 'Company' link (field 'id')" name="company-id" sqlname="iCompanyId" type="long"/>
  </element>
</schema>

Länkdefinitionen kompletteras av fälten som utgör kopplingen, dvs. primärnyckeln med XPath ("@id") i målschemat och sekundärnyckeln med XPath ("@company-id") i schemat.

Sekundärnyckeln läggs automatiskt till i ett element som använder samma egenskaper som det associerade fältet i måltabellen, med följande namnkonvention: namnet på målschemat följt av namnet på det associerade fältet ("företag-id" i vårt exempel).

Utökat schema för målet ("cus:company"):

<schema mappingType="sql" name="company" namespace="cus" xtkschema="xtk:schema">
  <element name="company" sqltable="CusCompany" autopk="true">
    <dbindex name="id" unique="true">
      <keyfield xpath="@id"/>
    </dbindex>
    <key internal="true" name="id">
      <keyfield xpath="@id"/>
    </key>
    ...
    <attribute desc="Internal primary key" label="Primary key" name="id" sqlname="iCompanyId" type="long"/>
    ...
    <element belongsTo="cus:recipient" integrity="define" label="Contact" name="recipient" revLink="company" target="nms:recipient" type="link" unbound="true">
      <join xpath-dst="@company-id" xpath-src="@id"/>
    </element>
  </element>
</schema>

En omvänd länk till tabellen"cus:mottagare" lades till med följande parametrar:

  • name: dras automatiskt från namnet på källschemat (kan framtvingas med attributet "revLink" i länkdefinitionen i källschemat)
  • revLink: namn på omvänd länk
  • mål: nyckel för länkat schema ("cus:mottagare"-schema)
  • obunden: länken deklareras som ett samlingselement för en 1-N-kardinalitet (som standard)
  • integritet:"define" som standard (kan framtvingas med attributet"revIntegrity" i länkdefinitionen i källschemat).

Exempel: enkel länk example-2

I det här exemplet deklarerar vi en länk till schematabellen "nms:address". Kopplingen är en yttre koppling och fylls i explicit med mottagarens e-postadress och fältet @address i den länkade tabellen ("nms:address").

<srcSchema name="recipient" namespace="cus">
  <element name="recipient">
    ...
    <element integrity="neutral" label="Info about email" name="emailInfo" revIntegrity="neutral" revLink="recipient" target="nms:address" type="link" externalJoin="true">
      <join xpath-dst="@address" xpath-src="@email"/>
    </element>
  </element>
</srcSchema>

Exempel: unik kardinalitet example-3

I det här exemplet skapar vi en 1-1-relation till schematabellen"cus:extension":

<element integrity="own" label="Extension" name="extension" revCardinality="single" revLink="recipient" target="cus:extension" type="link"/>

Exempel: länk till en mapp example-4

I det här exemplet deklarerar vi en länk till en mapp ("xtk:folder"-schema):

<element default="DefaultFolder('nmsFolder')" label="Folder" name="folder" revDesc="Recipients in the folder" revIntegrity="own" revLabel="Recipients" target="xtk:folder" type="link"/>

Standardvärdet returnerar identifieraren för den första giltiga parametertypfilen som anges i funktionen "DefaultFolder('nmsFolder')".

Exempel: skapa en nyckel för en länk example-5

I det här exemplet skapar vi en nyckel för en länk ("företag" till"cus:company"-schema) med attributet xlink och ett fält i tabellen ("email"):

<srcSchema name="recipient" namespace="cus">
  <element name="recipient">
    <key name="companyEmail">
      <keyfield xpath="@email"/>
      <keyfield xlink="company"/>
    </key>

    <attribute name="email" type="string" length="80" label="Email" desc="Recipient email"/>
    <element label="Company" name="company" revIntegrity="define" revLabel="Contact" target="cus:company" type="link"/>
  </element>
</srcSchema>

Schemat som genererats:

<schema mappingType="sql" name="recipient" namespace="cus" xtkschema="xtk:schema">
  <element name="recipient" sqltable="CusRecipient">
    <dbindex name="companyId">
      <keyfield xpath="@company-id"/>
    </dbindex>

    <dbindex name="companyEmail" unique="true">
      <keyfield xpath="@email"/>
      <keyfield xpath="@company-id"/>
    </dbindex>

    <key name="companyEmail">
      <keyfield xpath="@email"/>
      <keyfield xpath="@company-id"/>
    </key>

    <attribute desc="Email address of recipient" label="Email" length="80" name="email" sqlname="sEmail" type="string"/>
    <element label="Company" name="company" revLink="recipient" target="sfa:company" type="link">
      <join xpath-dst="@id" xpath-src="@company-id"/>
    </element>
    <attribute advanced="true" label="Foreign key of link 'Company' (field 'id')" name="company-id" sqlname="iCompanyId" type="long"/>
  </element>
</schema>

Definitionen av namnnyckeln"companyEmail" utökades med sekundärnyckeln för länken"company". Den här nyckeln genererar ett unikt index för båda fälten.

recommendation-more-help
35662671-8e3d-4f04-a092-029a056c566b