Предположим, у нас есть 4 таблицы, как описано ниже:
Table 1: Element
element_id [integer] (PK)
element_name [varchar]
Table 2: Element_Property
property_id [integer] (PK)
element_id [integer] (FK to Element.element_id)
data_type [integer]
Table 3: Page_Elements
page_element_id [integer] (PK)
element_type_id [integer] (FK to Element.element_id)
element_name [varchar]
Table 4: Page_Elements_Property_Values
property_value_id [integer] (PK)
page_element_id [integer] (FK to Page_Elements.page_element_id)
property_id [integer] (FK to Element_Property.property_id)
value [varchar]
Первые две таблицы являются таблицами определений для элементов и их значений, а третья и четвертая таблицы являются таблицами экземпляров.
Учитывая взаимосвязь между таблицами, описанными выше: Как гарантировать, по замыслу, что каждое значение свойства в таблице 4 ( Page_Elements_Property_Values ) ссылается на свойство в таблице 2 ( Element_Property)) принадлежит типу элемента в таблице 3 ( Page_Elements )?
Я приведу пример, чтобы объяснить это более подробно:
TextBox - это элемент, 'Длина'является свойством TextBox.«Высота» является свойством какого-либо другого элемента.«MyTextBox» является элементом страницы типа «TextBox», теперь ... Как гарантировать, что в таблице 4 ( Page_Elements_Property_Values ) у нас не будет значения «Height», ссылающегося на «MyTextBox»?
Реальная структура базы данных немного сложнее и имеет некоторые отношения «многие ко многим», но этой идеи достаточно для описания проблемы.
Любая помощь или руководство приветствуются!