Uploaded image for project: 'Ed-Fi Data Standard'
  1. Ed-Fi Data Standard
  2. DATASTD-955

Consider eliminating the Descriptor abstraction from Ed-Fi

    XMLWordPrintable

Details

    • Improvement
    • Resolution: Won't Do
    • Major
    • None
    • Data Standard v2.0
    • None
    • None

    Description

      Unlike the EducationOrganization abstraction which is used heavily through the model, the Descriptor abstraction is not adding any value and only increases complexity.

      While state agencies, ESCs, LEAs, and schools have use cases that make use of the abstraction (such as where programs are defined or administered), there is no such use case surrounding descriptors where different descriptors are treated in a generalized manner. Each concrete Descriptor is used distinctly, just as each Type table is used distinctly.

      For additional technical evidence, there are no foreign keys from the Descriptor table that are not 1->1 relationships to the "concrete" descriptor tables.

      The implication of this is that the Descriptors should really not be modeled as an abstraction, but rather as a pattern that should be applied to all the concrete Descriptor tables (in the same vein as the Type tables).

      The following INFORMATION_SCHEMA queries demonstrate this.

      The first query identifies all FK constraints from Descriptor that are not to concrete Descriptor tables. It returns no records.

      SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
      	inner join INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE ctu
      		on rc.CONSTRAINT_SCHEMA = ctu.CONSTRAINT_SCHEMA
      			and rc.CONSTRAINT_NAME = ctu.CONSTRAINT_NAME
      WHERE UNIQUE_CONSTRAINT_NAME = 'PK_Descriptor'
      	and ctu.TABLE_NAME not like '%Descriptor' -- Ignore the concrete types
      

      This query identifies all uses of the EducationOrganization abstraction (excluding the 1->1 relationships with the concrete EdOrg entities), and returns 31 records:

      SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
      	inner join INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE ctu
      		on rc.CONSTRAINT_SCHEMA = ctu.CONSTRAINT_SCHEMA
      			and rc.CONSTRAINT_NAME = ctu.CONSTRAINT_NAME
      WHERE UNIQUE_CONSTRAINT_NAME = 'PK_EducationOrganization'
      	and ctu.TABLE_NAME NOT IN ('StateEducationAgency', 'EducationServiceCenter', 'LocalEducationAgency', 'School', 'EducationOrganizationNetwork') -- Ignore the concrete types
      

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              gmcelhanon Geoff McElhanon
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Salesforce