<docbook><section><title>VirtProgressPKNull</title><title> Ensuring Progress Primary Keys (PKs) are NOT NULLABLE</title> Ensuring Progress Primary Keys (PKs) are NOT NULLABLE
<para>While Progress does not formally have Primary Keys defined per table, it does have INDEXes.
 For many purposes, including Entity Frameworks, all fields comprising the INDEX must be set not-nullable, or &quot;mandatory&quot; in Progress parlance.
 Use the following procedure to check the relevant fields:</para>
<orderedlist spacing="compact"><listitem>Log in to the machine that hosts your Progress DBMS.
<figure><graphic fileref="VirtProgressPKNull/LoginProgressDBServer.png" /></figure>  </listitem>
<listitem>Navigate to the root of the Progress installation.
<figure><graphic fileref="VirtProgressPKNull/cdProgressRootDirectory.png" /></figure> </listitem>
<listitem>Use the su command to switch to your local Progress user.
<figure><graphic fileref="VirtProgressPKNull/ExecuteProfile.png" /></figure> </listitem>
<listitem>Execute the .profile associated with the Progress user.
<figure><graphic fileref="VirtProgressPKNull/ExecuteProfile.png" /></figure> </listitem>
<listitem>Launch the <emphasis>_progres</emphasis> utility.
<figure><graphic fileref="VirtProgressPKNull/RunProgres.png" /></figure> </listitem>
<listitem>Use the <emphasis>Tools</emphasis> menu to access the <emphasis>Data Dictionary</emphasis> utility.
<figure><graphic fileref="VirtProgressPKNull/ToolsDataDictionary.png" /></figure> </listitem>
<listitem>Expand the <emphasis>Database</emphasis> menu and use <emphasis>Connect</emphasis> to connect to the target database.
<figure><graphic fileref="VirtProgressPKNull/SelectTargetDatabase.png" /></figure> </listitem>
<listitem>Repeat the following steps for each field in each table&#39;s index.
<orderedlist spacing="compact"><listitem>Expand the <emphasis>Schema</emphasis> menu and select the <emphasis>Index Editor</emphasis>.
<figure><graphic fileref="VirtProgressPKNull/ProgressIndexEditor.png" /></figure> </listitem>
<listitem>Select the target table.
<figure><graphic fileref="VirtProgressPKNull/SelectProgressTable.png" /></figure> </listitem>
<listitem>Review the fields that comprise that table&#39;s index.
<figure><graphic fileref="VirtProgressPKNull/ProgressIndexFields.png" /></figure> </listitem>
<listitem>Select <emphasis>GoField</emphasis>.
<figure><graphic fileref="VirtProgressPKNull/ProgressGoField.png" /></figure> </listitem>
<listitem>Select <emphasis>Modify</emphasis>.
<figure><graphic fileref="VirtProgressPKNull/IndexEditorModifyOption.png" /></figure> </listitem>
<listitem>Navigate to the field that you want to check.
<figure><graphic fileref="VirtProgressPKNull/IndexEditorSelectNullableField.png" /></figure>  </listitem>
<listitem>Look for the field&#39;s <emphasis>Mandatory</emphasis> property.
<figure><graphic fileref="VirtProgressPKNull/LocateMandatorySetting.png" /></figure> </listitem>
<listitem>Ensure the value passed to Mandatory is <emphasis>yes</emphasis>, and hit <emphasis>F4</emphasis> to save your changes.
 <figure><graphic fileref="VirtProgressPKNull/SetMandatoryYes.png" /></figure> </listitem>
</orderedlist></listitem>
<listitem>Exit the utility, and proceed to your other tasks.</listitem>
</orderedlist></section></docbook>