reference.RepoObject_reference_persistence - V

type: V ( view ), modify_date: 2022-01-05 17:04:09

RepoObject_guid: F38F291C-9D61-EB11-84DC-A81E8446D5B0

Description

repo.RepoObject_persistence - U contains metadata between persistence source and persistence target, this metadata needs to be included as reference

  • normally the persistence target can be a table
    reference.RepoObject_reference_persistence - V

  • the persistence target can be a view on top a table, then some extra handling is required:

    • add a reference: view (referenced) ← table (referencing)
      reference.RepoObject_reference_persistence_target_as_source - V

      • issue: often the view is based on several view data sources

        • the one and only real persistence target table

        • some additional tables which are used as filter of the target table

        some logic is possible for most cases

        • column has_match_left_and_suffix_tgt = 1 in case of aaa.bbb_ccc_tgt ← aaa.bbb

          • same schema

          • the view uses the suffix '_tgt'

          • the object name of the table is included in the view name

    • remove the reference between referencing view and referenced table

      Where
          --avoid cyclic references
          --exclude references `aaa.bbb <- aaa.bbb_ccc_tgt`, we already added `aaa.bbb_ccc_tgt <- aaa.bbb`
          Not Exists
      (
          Select
              1
          From
              reference.RepoObject_reference_persistence_target_as_source As T2
          Where
              T2.has_match_left_and_suffix_tgt   = 1
              And T2.referenced_RepoObject_guid  = T1.referencing_RepoObject_guid
              And T2.referencing_RepoObject_guid = T1.referenced_RepoObject_guid
      )

Examples

Entity Diagram

entity-reference.repoobject_reference_persistence

Columns

Table 1. Columns of reference.RepoObject_reference_persistence - V
PK Column Name Data Type NULL? ID

1

uniqueidentifier

NULL

2

uniqueidentifier

NOT NULL

varchar(27)

NOT NULL

nvarchar(128)

NOT NULL

nvarchar(261)

NOT NULL

int

NULL

nvarchar(128)

NOT NULL

char(2)

NULL

nvarchar(128)

NOT NULL

nvarchar(261)

NOT NULL

int

NULL

nvarchar(128)

NOT NULL

varchar(2)

NULL

Foreign Key Diagram

entity_1_1_fk-reference.repoobject_reference_persistence

References

Object Reference Diagram - 1 1

entity_1_1_objectref-reference.repoobject_reference_persistence

Object Reference Diagram - Referenced - 30 0

entity_30_0_objectref-reference.repoobject_reference_persistence

Object Reference Diagram - Referencing - 0 30

entity_0_30_objectref-reference.repoobject_reference_persistence

Column Reference Diagram

entity_1_1_colref-reference.repoobject_reference_persistence

Indexes

PK_RepoObject_reference_persistence

idx_RepoObject_reference_persistence__2

idx_RepoObject_reference_persistence__3

idx_RepoObject_reference_persistence__4

Column Details

_

referenced_RepoObject_guid

1

referenced_RepoObject_guid

uniqueidentifier

NULL

referencing_RepoObject_guid

2

referencing_RepoObject_guid

uniqueidentifier

NOT NULL

InformationSource

InformationSource

varchar(27)

NOT NULL

referenced_entity_name

referenced_entity_name

nvarchar(128)

NOT NULL

Referenced Columns

referenced_fullname

referenced_fullname

nvarchar(261)

NOT NULL

Description

(concat('[',[RepoObject_schema_name],'].[',[RepoObject_name],']'))


referenced_id

referenced_id

int

NULL

Referenced Columns

referenced_schema_name

referenced_schema_name

nvarchar(128)

NOT NULL

referenced_type

referenced_type

char(2)

NULL

Referenced Columns

referencing_entity_name

referencing_entity_name

nvarchar(128)

NOT NULL

Referenced Columns

referencing_fullname

referencing_fullname

nvarchar(261)

NOT NULL

Description

(concat('[',[RepoObject_schema_name],'].[',[RepoObject_name],']'))


referencing_id

referencing_id

int

NULL

Referenced Columns

referencing_schema_name

referencing_schema_name

nvarchar(128)

NOT NULL

referencing_type

referencing_type

varchar(2)

NULL

sql_modules_definition

reference.RepoObject_reference_persistence - V script
/*
<<property_start>>Description
include::partial$docsnippet/reference-from-persistence.adoc[]
<<property_end>>
*/
CREATE View [reference].[RepoObject_reference_persistence]
As
--
Select
    --
    referenced_RepoObject_guid  = rop.source_RepoObject_guid
  , referencing_RepoObject_guid = rop.target_RepoObject_guid
  , referenced_entity_name      = ro_s.SysObject_name
  , referenced_fullname         = ro_s.RepoObject_fullname
  , referenced_id               = ro_s.SysObject_id
  --, referenced_node_id          = ro_s.node_id
  , referenced_schema_name      = ro_s.SysObject_schema_name
  , referenced_type             = ro_s.SysObject_type
  , referencing_entity_name     = ro_t.SysObject_name
  , referencing_fullname        = ro_t.RepoObject_fullname
  , referencing_id              = ro_t.SysObject_id
  --, referencing_node_id         = ro_t.node_id
  , referencing_schema_name     = ro_t.SysObject_schema_name
  , referencing_type            = Coalesce ( ro_t.SysObject_type, ro_t.RepoObject_type, 'U' )
  , InformationSource           = 'repo.RepoObject_persistence'
From
    repo.RepoObject_persistence As rop
    Inner Join
        repo.RepoObject         As ro_t
            On
            ro_t.RepoObject_guid = rop.target_RepoObject_guid

    Inner Join
        repo.RepoObject         As ro_s
            On
            ro_s.RepoObject_guid = rop.source_RepoObject_guid