Создание связи между КЕ 1 к 1

Как можно создать связь 1 к 1.
Есть класс Server, хочу создать класс Motherboard.
Пробывал сделать связь между классами через два AttributeExternalKey

Класс где описан сервер писал

<field id="motherboard_id" xsi:type="AttributeExternalKey">
	<sql>motherboard_id</sql>
	<default_value/>
	<is_null_allowed>true</is_null_allowed>
	<on_target_delete>DEL_AUTO</on_target_delete>
	<target_class>Motherboard</target_class>
	<filter>SELECT Motherboard WHERE org_id = :this->org_id</filter>
	<dependencies>
		<attribute id="org_id" />
	</dependencies>
</field>

Класс где описана материнская плата писал:

<field id="server_id" xsi:type="AttributeExternalKey">
			<sql>server_id</sql>
			<default_value/>
			<is_null_allowed>true</is_null_allowed>
			<on_target_delete>DEL_AUTO</on_target_delete>
			<target_class>Server</target_class>
			<filter>SELECT Server WHERE org_id = :this->org_id</filter>
			<dependencies>
				<attribute id="org_id" />
			</dependencies>
		</field>

Во время установки ошибка на 20%

Failed to process class 'Server', from '/var/www/html/datamodels/2.x/itop-config-mgmt': Field: 'motherboard_id', (type: AttributeExternalKey), missing (or empty) mandatory tag 'sql' under the tag 'field'

Я подозреваю что тут должно быть так:

<field id="motherboard_id" xsi:type="AttributeExternalKey" _delta="define">
1 лайк

Спасибо, помогло

Привет, Krasava, подскажи пожалуйста, как сделать связь между КЕ.
Например привязать отдельный класс HDD и класс персональный пк.

Привет Димас.
Я свой класс HDD привязывал к Server и к StorageSystem
Смотри мой код

<class id="HDD" _delta="define">
	<parent>ConnectableCI</parent>
	<properties>
		<category>bizmodel,searchable</category>
		<abstract>false</abstract>
		<key_type>autoincrement</key_type>
		<db_table>hdd</db_table>
		<db_key_field>id</db_key_field>
			<db_final_class_field/>
			<naming>
			<format>%1$s</format>
			<attributes>
				<attribute id="name"/>
			</attributes>
			</naming>
			<display_template/>
			<icon>images/hdd.png</icon>
			<reconciliation>
			<attributes>
				<attribute id="name"/>
				<attribute id="org_id"/>
				<attribute id="organization_name"/>
			</attributes>
			</reconciliation>
	</properties>
	<methods/>
	<fields>
		<field id="server_id" xsi:type="AttributeExternalKey">
			<sql>server_id</sql>
			<default_value/>
			<is_null_allowed>true</is_null_allowed>
			<on_target_delete>DEL_AUTO</on_target_delete>
			<target_class>Server</target_class>
			<filter>SELECT Server WHERE org_id = :this->org_id</filter>
			<dependencies>
				<attribute id="org_id" />
			</dependencies>
		</field>
		<field id="storagesystem_id" xsi:type="AttributeExternalKey">
			<sql>storagesystem_id</sql>
			<default_value/>
			<is_null_allowed>true</is_null_allowed>
			<on_target_delete>DEL_AUTO</on_target_delete>
			<target_class>StorageSystem</target_class>
			<filter>SELECT StorageSystem WHERE org_id = :this->org_id</filter>
			<dependencies>
				<attribute id="org_id" />
			</dependencies>
		</field>
	</fields>
		<presentation>
		<details>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="org_id">
              <rank>20</rank>
            </item>
            <item id="status">
              <rank>30</rank>
            </item>
            <item id="business_criticity">
              <rank>40</rank>
            </item>
            <item id="location_id">
              <rank>50</rank>
            </item>
            <item id="brand_id">
              <rank>60</rank>
            </item>
            <item id="model_id">
              <rank>70</rank>
            </item>
            <item id="serialnumber">
              <rank>80</rank>
            </item>
            <item id="asset_number">
              <rank>90</rank>
            </item>
            <item id="move2production">
              <rank>100</rank>
            </item>
            <item id="purchase_date">
              <rank>110</rank>
            </item>
            <item id="end_of_warranty">
              <rank>120</rank>
            </item>
            <item id="description">
              <rank>130</rank>
            </item>
			<item id="server_id">
              <rank>135</rank>
            </item>
			<item id="storagesystem_id">
              <rank>137</rank>
            </item>
            <item id="contacts_list">
              <rank>140</rank>
            </item>
            <item id="documents_list">
              <rank>150</rank>
            </item>
            <item id="tickets_list">
              <rank>160</rank>
            </item>
            <item id="providercontracts_list">
              <rank>170</rank>
            </item>
            <item id="services_list">
              <rank>180</rank>
            </item>
          </items>
        </details>
		</presentation>
	</class>

StorageSystem

  <class id="StorageSystem">
  <fields>
	<field id="hdd_list" xsi:type="AttributeLinkedSet" _delta="define">
		<linked_class>HDD</linked_class>
		<ext_key_to_me>storagesystem_id</ext_key_to_me>
	</field>
  </fields>
  <presentation>
    <details _delta="redefine">
      <items>
        <item id="contacts_list">
          <rank>10</rank>
        </item>
        <item id="documents_list">
          <rank>20</rank>
        </item>
        <item id="applicationsolution_list">
          <rank>35</rank>
        </item>
        <item id="physicalinterface_list">
          <rank>40</rank>
        </item>
        <item id="fiberinterfacelist_list">
          <rank>50</rank>
        </item>
        <item id="networkdevice_list">
          <rank>60</rank>
        </item>
        <item id="logicalvolume_list">
          <rank>70</rank>
        </item>
    <item id="hdd_list">
          <rank>75</rank>
        </item>
        <item id="san_list">
          <rank>80</rank>
        </item>
        <item id="providercontracts_list">
          <rank>90</rank>
        </item>
        <item id="services_list">
          <rank>100</rank>
        </item>
        <item id="col:col1">
          <rank>110</rank>
          <items>
            <item id="fieldset:Server:baseinfo">
              <rank>10</rank>
              <items>
                <item id="name">
                  <rank>10</rank>
                </item>
                <item id="org_id">
                  <rank>20</rank>
                </item>
                <item id="status">
                  <rank>30</rank>
                </item>
                <item id="business_criticity">
                  <rank>40</rank>
                </item>
                <item id="location_id">
                  <rank>50</rank>
                </item>
                <item id="rack_id">
                  <rank>60</rank>
                </item>
                <item id="enclosure_id">
                  <rank>70</rank>
                </item>
              </items>
            </item>
            <item id="fieldset:Server:moreinfo">
              <rank>20</rank>
              <items>
                <item id="brand_id">
                  <rank>10</rank>
                </item>
                <item id="model_id">
                  <rank>20</rank>
                </item>
                <item id="managementip">
                  <rank>25</rank>
                </item>
                <item id="nb_u">
                  <rank>30</rank>
                </item>
                <item id="serialnumber">
                  <rank>40</rank>
                </item>
                <item id="asset_number">
                  <rank>50</rank>
                </item>
              </items>
            </item>
          </items>
        </item>
        <item id="col:col2">
          <rank>120</rank>
          <items>
            <item id="fieldset:Server:Date">
              <rank>10</rank>
              <items>
                <item id="move2production">
                  <rank>10</rank>
                </item>
                <item id="purchase_date">
                  <rank>20</rank>
                </item>
                <item id="end_of_warranty">
                  <rank>30</rank>
                </item>
              </items>
            </item>
            <item id="fieldset:Server:power">
              <rank>20</rank>
              <items>
                <item id="powerA_id">
                  <rank>10</rank>
                </item>
                <item id="powerB_id">
                  <rank>20</rank>
                </item>
                <item id="redundancy">
                  <rank>30</rank>
                </item>
              </items>
            </item>
            <item id="fieldset:Server:otherinfo">
              <rank>30</rank>
              <items>
                <item id="description">
                  <rank>10</rank>
                </item>
              </items>
            </item>
          </items>
        </item>
      </items>
    </details>
    <search>
      <items>
        <item id="name">
          <rank>10</rank>
        </item>
        <item id="org_id">
          <rank>20</rank>
        </item>
        <item id="status">
          <rank>30</rank>
        </item>
        <item id="business_criticity">
          <rank>40</rank>
        </item>
        <item id="location_id">
          <rank>50</rank>
        </item>
        <item id="brand_id">
          <rank>60</rank>
        </item>
        <item id="model_id">
          <rank>70</rank>
        </item>
        <item id="managementip">
          <rank>75</rank>
        </item>
        <item id="serialnumber">
          <rank>80</rank>
        </item>
        <item id="asset_number">
          <rank>90</rank>
        </item>
        <item id="powerA_id">
          <rank>100</rank>
        </item>
        <item id="powerB_id">
          <rank>110</rank>
        </item>
        <item id="move2production">
          <rank>120</rank>
        </item>
        <item id="purchase_date">
          <rank>130</rank>
        </item>
        <item id="end_of_warranty">
          <rank>140</rank>
        </item>
      </items>
    </search>
    <list>
      <items>
        <item id="org_id">
          <rank>10</rank>
        </item>
        <item id="status">
          <rank>20</rank>
        </item>
        <item id="business_criticity">
          <rank>30</rank>
        </item>
        <item id="location_id">
          <rank>40</rank>
        </item>
        <item id="brand_id">
          <rank>50</rank>
        </item>
        <item id="model_id">
          <rank>60</rank>
        </item>
        <item id="serialnumber">
          <rank>70</rank>
        </item>
      </items>
    </list>
  </presentation>
  <methods>
    <method id="GetRelationQueries">
      <comment>/**
 * Placeholder for backward compatibility (iTop &lt;= 2.1.0)
 * in case an extension attempts to redefine this function...	 
 */</comment>
      <static>true</static>
      <access>public</access>
      <type>Overload-DBObject</type>
      <code><![CDATA[	public static function GetRelationQueries($sRelCode){return parent::GetRelationQueries($sRelCode);} ]]></code>
    </method>
  </methods>
  <relations>
    <relation id="impacts">
      <neighbours>
        <neighbour id="logicalvolume">
          <attribute>logicalvolume_list</attribute>
        </neighbour>
      </neighbours>
    </relation>
  </relations>
</class>
1 лайк

Там где HDD обратить внимание на

	<field id="storagesystem_id" xsi:type="AttributeExternalKey">
		<sql>storagesystem_id</sql>
		<default_value/>
		<is_null_allowed>true</is_null_allowed>
		<on_target_delete>DEL_AUTO</on_target_delete>
		<target_class>StorageSystem</target_class>
		<filter>SELECT StorageSystem WHERE org_id = :this->org_id</filter>
		<dependencies>
			<attribute id="org_id" />
		</dependencies>
	</field>

и

 <item id="storagesystem_id">
      <rank>137</rank>
    </item>

А там где StorageSystem смотри

<field id="hdd_list" xsi:type="AttributeLinkedSet" _delta="define">
	<linked_class>HDD</linked_class>
	<ext_key_to_me>storagesystem_id</ext_key_to_me>
</field>

и

<item id="hdd_list">
      <rank>75</rank>
    </item>

Спасибо, в целом разобрался