テーブルと辞書 - よく寄せられる質問 (FAQ)Description<!-- div.margin { padding: 10px 40px 40px 30px; } table.tocTable { border: 1px solid; border-color: #e0e0e0; background-color: #fff; } .title { color: #d1232b; font-weight: normal; font-size: 28px; } h1 { color: #d1232b; font-weight: normal; font-size: 21px; margin-bottom: 5px; border-bottom-width: 2px; border-bottom-style: solid; border-bottom-color: #cccccc; } h2 { color: #646464; font-weight: bold; font-size: 18px; } h3 { color: #000000; font-weight: bold; font-size: 16px; } h4 { color: #666666; font-weight: bold; font-size: 15px; } h5 { color: #000000; font-weight: bold; font-size: 13px; } h6 { color: #000000; font-weight: bold; font-size:14px; } ul, ol { margin-left: 0; list-style-position: outside; } --> 概要 この記事の目的は、テーブルと辞書に関してカスタマーサポートがよく受けるいくつかの要求/質問に回答することです。この記事を常に最新の状態に保つために、その他の質問があれば、コメントに記入してください。 この情報は一般的なものであり、追加の質問がある場合は、カスタマーサポートにお問い合わせください。 FAQ どのテーブル拡張モデルが使用されていますか?列ラベルが空白または (空) と表示されるのはなぜですか?ストレージエイリアスとは何ですか?またどのように使用されますか?スコープ対象のアプリケーションで自分のカスタムテーブルを削除できないのはなぜですか?カスタムテーブルに「update_synch」を追加できないのはなぜですか?物理テーブルに格納できる列の数テーブルの作成/列の追加時の設計上の考慮事項計算済みフィールドを 使用していますこのフィールドにソートを適用すると、順序が正しくないのはなぜですか?「テーブルごとの最大列数に達しました」というエラーが表示されました。 これは何を意味するのでしょうか? どのようなテーブル拡張モデルが使用されますか? Now Platform は下記の拡張モデルを提供します。 クラスごとのテーブル - 親クラスと各子クラスに対して個別のデータベーステーブルを作成します。階層ごとのテーブル - 親クラス用に 1 つのデータベーステーブルを作成します。このテーブルには、親クラスと子クラスのすべてのレコードが格納されます。子クラスには個別のデータベーステーブルはありません。パーティションごとのテーブル - 親クラス用に 1 つのデータベーステーブルを作成します。このテーブルには、親クラスと子クラスのすべてのレコードが格納されます。子クラスには個別のデータベーステーブルはありません。データベーステーブルがストレージの制限に達すると、システムはストレージテーブル (パーティション) を動的に追加して、追加のレコードを保存します。 これらの拡張モデルとその違いについて詳しくは、こちらを参照してください https://docs.servicenow.com/csh?topicname=table-extension-and-classes.html&version=latest 列ラベルが空白または (空) と表示されるのはなぜですか? 通常、列ラベルが空白または(空)として表示されている場合は、その列に関連する何かが壊れていることを意味します。多くのことが考えられます。辞書レコードの XML を表示すると、ラベルは入力されていますが、UIで表示されていないだけということがわかります。 これの原因としては、次のようなことが考えられます: フィールドがデータベースに正しく作成されませんでしたストレージエイリアスが正しく作成されていないか、別の列で使用されています。列はまだ作成中です。 この問題が発生していると思われる場合は、 KB0727729 を確認するか、カスタマーサポートにお問い合わせください。サポートさせていただきます。 ストレージ エイリアスとは何ですか?またその使用方法は何ですか? ストレージエイリアスエントリは、インスタンス内のテーブルに作成されたすべてのフィールドに対して作成されます。ストレージエイリアスの役割を説明する前に、管理者/ユーザーが知っておくべき重要なフィールドがいくつかあります。 要素名:この値は、フロントエンドからフィールドがどのように見えるかを反映します。 つまり、ユーザーが sys_dictionary の column_name フィールドを確認した場合、またはユーザー/管理者がフィールド内の値を操作するスクリプトを作成した場合、要素名に基づいてこれを行うことになります。 ストレージエイリアス :この値は、特定の要素のデータがどこに保存されているかを正確に示します。 フィールドがバックエンド データベースから操作されている場合、プラットフォームは storage_alias 値を調べて、ストレージ エイリアス値と、データが操作されているテーブル クラスの実際の値である sys_class_name に基づいてどのデータを操作する必要があるかを理解します。 。 ストレージ エイリアス値は、ベース テーブル上の実際の物理列です。 ストレージテーブル名- この値により、その要素がどの物理テーブルに属しているかがわかります。 task 内のすべての論理要素について、ストレージ テーブル名は常に task になります。 これが TPC テーブルの場合、ストレージ テーブル名の値は、物理要素が存在する物理テーブルの名前になります。 ストレージエイリアスは次の目的で使用されます: 1。論理 TPH)/物理 (TPC) 要素をバックエンド データベースの実際の物理列にマッピングします。 簡単に言えば、これは、要素内の実際のデータが物理ストレージ テーブル内の列からどこに存在するかを示すことを意味します。 2.複数の兄弟要素が 1 つの物理列を共有できるようにします (グロミングとも呼ばれますが、TPH のみ) 3.sys_documentation(ラベル)レコードをそれぞれの要素にマップします。これは、ユーザー/管理者がアプリケーションフロントエンドからフォーム、レポート、およびリストビューに表示されるものです。 その他の注意事項: - 同じ論理クラス内の2つの論理要素が同じ物理列を共有することはできません(つまり、ユーザーが2つの文字列フィールドを作成した場合、それらはデータベース内の同じ物理列にマップされません)。 - 親要素と子要素は同じ物理列を共有することはできません(つまり、インシデントでフィールドが作成された場合、タスクのフィールドがすでに物理列を使用している物理列にマップすることはできません)。 - 同じ物理列を共有できるのは兄弟要素のみです(つまり、ユーザーはchange_requestとインシデントで参照フィールドを作成し、同じ物理列にマップできます)。 - フィールドがタスクテーブル(sys_class_nameがtask)に直接作成された場合、そのフィールドをグロミングすることはできません。 スコープ指定されたアプリケーションで独自のカスタムテーブルを削除できないのはなぜですか? スコープ対象のアプリケーションからカスタムテーブルを削除しようとすると、[テーブルを削除] ボタンを使用できません。これは、既知の問題が原因です PRB762839 には、Orlandoの修正バージョンが予定されています。システムには制限があり、インスタンス内の特定のテーブルを削除することはできません。現在、スコープアプリケーション内のカスタムテーブルの削除はブロックされています。 現時点での回避策は、カスタマーサポートに問い合わせることです。スコープ指定されたアプリケーションからcustomerテーブルを削除するお手伝いをいたします。 詳細情報: KB0623901 カスタムテーブルに「update_synch」を追加できないのはなぜですか? この理由はドキュメントに記載されています。 警告:update_synch属性を辞書レコードに追加しないでください。不適切に使用された場合、この属性はパフォーマンス上の大きな問題を引き起こすか、インスタンスを使用不可能にする可能性があります。この属性の追加はサポートされていません。 ただし、sys_db_object の「Track in Update Sets」には OOB UI アクションがあります。これを使用して、これを sys_metadata に再ペアレンティングすることで、更新セットで追跡するカスタムテーブルを取得できます。ただし、これは慎重に使用し、正当な限られた状況で使用する必要があります。 この UI アクションを使用するには、この UI アクションを使用するために渡す必要がある基準のリストがあります。続行する前に、この KB のすべての情報を確認してください: KB0726953 物理テーブル内に格納できる列数に関して テーブル内の列の数は、ServiceNow プラットフォームではなく、使用されるデータベースによって定義されます MYSQL ServiceNow によって制御されない MySQL の制限:テーブルごとに 4096 列のハード制限がありますが、特定のテーブルでは有効な最大値がこれより少なくなる場合があります。正確な制限は、いくつかの相互作用する要因によって異なります。すべてのテーブル (ストレージエンジンに関係なく) の最大行サイズは 65,535 バイトです。ストレージエンジンでは、この制限に追加の制約が課せられ、有効な最大行サイズが減少する場合があります。すべての列の合計長がこのサイズを超えることはできないため、最大行サイズは列の数 (および場合によってはサイズ) を制限します。 Oracle Oracle は、物理テーブルごとに最大 1000 列をサポートします。これについては、Oracle のドキュメントを参照してください: https://docs.oracle.com/cd/B28359_01/server.111/b28320/limits003.htm#i288032 テーブルの作成/列の追加時の設計上の考慮事項 設計段階でデータの正規化を確認して空白を減らし、データが効率的に整理されるようにすることをお勧めします これはServiceNowのプロセスではないため、データベースの正規化に関する外部記事が多数あります。例: https://en.wikipedia.org/wiki/Database_normalization 不適切な設計と見なされる単純な例を見つけてください。 テーブル:u_research column_name型最大長u_finding_1文字列40u_finding_2文字列40.........u_finding_9文字列40 この例では、u_findingという名前の後に1〜9のプレフィックスが続く9つのフィールドを持つテーブルがあります。 9つのフィールドのうち2つだけが入力されるレコードが挿入された場合、7つのフィールドは入力されないままになります。 これらの7つのフィールドは空白と見なされます。 この問題を解決するには、u_researchテーブルを参照するすべての結果を保存する別のテーブルを作成します。 テーブル:u_finding column_name型最大長u_finding の詳細文字列40u_research参照32 すべての結果はテーブル u_finding に作成され、元のテーブル u_reserach にリンクされます。このようにして、u_research レコードに複数の検出結果を含めることができます。このアプローチでは空白を 計算済みフィールドを使用していますこのフィールドにソートを適用すると、順序が正しくないのはなぜですか? 計算されたフィールドを使用すると、リストビューを介してデータにアクセスすると、データがリアルタイムで返されます。フィールドでソートすると、データベースに保存されている値に基づいてソートが適用されます データベースに保存される値は、レコードが最後に保存されたときのものであり、リアルタイムデータとは異なる場合があります。 本当にこのフィールドでソートする必要がある場合は、計算済みオプションを削除し、関連レコードが更新されたときにフィールドが更新されるようにビジネスルールを作成することを検討する必要があります。 「テーブルごとの最大列数に達しました」というエラーが表示されました。 これは何を意味するのでしょうか? システムでは、テーブルごとに最大 1000 列のみを使用できます。このエラーが表示された場合は、この制限に達したことが原因です。 1000 列が指定された制限であると定義されていますが、これはテーブル内に物理的に 1000 列を含めることができるという意味ではありません。「物理テーブル内に格納できる列数」のセクションを参照してください。