問題タブ [natural-key]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1076 参照

mysql - テーブルの代理キーをMySqlの自然キーで改造しますか?

自然キーを使用し、既存の行が多数あるテーブルを想定します。MySql を使用して代理キー列を改良し、一意の値を入力する最も簡単な方法は何でしょうか?

すなわち変換

新しい id 列に有効な id:s を入力します。

ありがとう/エリック

0 投票する
5 に答える
2726 参照

entity-framework - Entity Framework と文字列キー間の関連付け

私はEntity Frameworkが初めてで、そのためのORMがあります。私が関与しているプロジェクトには、すべてのキーが文字列であり、大文字と小文字が区別されないレガシー データベースがあります。

MSSQL に変換中で、EF を ORM として使用したいのですが、問題が発生しました。

以下は、私たちの問題を示す例です。

TableA にはプライマリ文字列キーがあり、TableB にはこのプライマリ キーへの参照があります。

LINQ では、次のように記述します。

TableA に "A" を読み取る主キーが含まれており、TableB に TableA を参照する 2 つの行が含まれているが、参照フィールドの大文字と小文字が異なる "a" と "A" の場合。

私たちのプロジェクトでは、両方の行が結果に含まれるようにしたいのですが、大文字と小文字が一致する行のみが結果に含まれます。

SQL プロファイラーを使用して、両方の行が選択されていることに気付きました。

キーが大文字と小文字を区別しないことを Entity Framework に伝える方法はありますか?

編集:
これを NHibernate でテストしたところ、NHibernate は大文字と小文字を区別しないキーで動作するという結論に達しました。したがって、NHibernate の方が適している可能性があります。
ただし、Entity Framework の動作を変更する方法があるかどうかを知りたいと思っています。


ご回答有難うございます!

問題は、その制約を今データベースに追加すると、その構築方法が原因でレガシー アプリケーションが動作しなくなる可能性があることです。可能であれば、EF の動作を変更することをお勧めします。無理だとは思いますが、頑張ってみます。


よろしく、
フレドリック

編集:自分の質問に回答を追加した理由は、登録ユーザーになる前にこの質問を追加したためです。アカウントを登録すると、コメントを追加したり、投稿を編集したりできませんでした。これでアカウントが統合されました。

0 投票する
1 に答える
993 参照

django - Django ManyToManyFieldアソシエーションテーブルには代理キーが必要ですか?

既存のデータベース構造をDjangoモデルにマッピングしています。私は多対多の構造を持っており、関連テーブルは自然キーです。

DjangoのORMにこれをマッピングさせる方法はありませんか?代理キーを使用するには、foo2barを変更する必要がありますか?例えば

0 投票する
7 に答える
22129 参照

java - Hibernateの自然な識別子とは何ですか?

Hibernateのドキュメントを読んでいる間、私は自然な識別子の概念への参照を見続けています。

これは、エンティティが保持するデータの性質により、エンティティが持つIDを意味するだけですか?

例:ユーザーの名前+パスワード+年齢+何かが複合識別子として使用されていますか?

0 投票する
9 に答える
287 参照

sql - ユーザーの一意の識別子

通常、100人のユーザーのテーブルがある場合は、主キーとしてuserID列を自動インクリメントするだけです。しかし、突然100万人または500万人のユーザーがいる場合、より分散され始めたいので、それは非常に困難になります。その場合、各ノードが同じ主キーを作成するため、自動インクリメントの主キーは役に立ちません。

これに対する解決策は、自然な主キーを使用することですか?私は、この多数のユーザーにとって自然な主キーを考えるのに本当に苦労しています。問題は、彼らはすべて若者であるため、国民保険番号や私が考えることができる他の一意の識別子を持っていないことです。複数列の主キーを作成することはできますが、それでも可能性はありますが、ごくわずかな重複が発生します。

誰かが解決策を知っていますか?

ありがとう

0 投票する
1 に答える
454 参照

c# - NHibernateが一時的なインスタンスを識別できるようにしながら、割り当てられた自然キー識別子を使用できますか?

オブジェクトAには1対多の関連付けがあります:多くのオブジェクトB

データベースを見ると、名前を確認するために代理整数識別子を常に結合または副選択するのではなくTableB、一意で読み取り可能な文字列を確認したいと思います。A.Name

Nameの識別子としてマップできますが、NHibernateはのインスタンスが一時的であるか永続的であるかを識別できないためA、これにより多くの余分なクエリが発生します。SELECTA

ネイティブに割り当てられた代理キーと自然キーを組み合わせて、複合キーを使用できると思います。これは最適ではないようですが、いくつかの意見を聞きたいと思います。

私が本当に探しているのは、NHibernateが一時的なインスタンスを識別できるようにしながら、単一列の自然キーを使用するための戦略です。

  • 出来ますか?
  • マッピングとは何ですか-流暢またはhbm?

一方、これがすべてひどい考えであり、副選択を含むデータベースビューに依存する必要がある場合は、説明してください。

ありがとう。

0 投票する
10 に答える
3396 参照

sql - リレーショナルデータベースの設計に関する質問-代理キーまたは自然キー?

どちらがベストプラクティスであり、その理由は何ですか?

a)タイプテーブル、サロゲート/人工キー

外部キーはfromuser.typeからtype.id代替テキスト

b)タイプテーブル、自然キー

外部キーはfromuser.typeからtype.typeName代替テキスト

0 投票する
4 に答える
889 参照

django - 自然キーの生成を自動化する

データベース A のデータの一部をシリアライズし、データベース B でデシリアライズする方法 (異なるインストール間での一種の保存/復元) を研究しており、ID の重複による問題を回避するために Djangoの自然キーを調べました。 .

唯一の問題は、カスタム マネージャーと新しいメソッドをすべてのモデルに追加する必要があることです。unique=Trueまたはunique_togheterフィールドを見て、Djangoに自然キーを自動的に生成させる方法はありますか?

0 投票する
1 に答える
3031 参照

hibernate - Hibernate:サブテーブルの代替/自然キー列への参照をマッピングするときのバグ?

元の質問は、次の質問に由来します。

この JPA 2.0 マッピングによって Eclipse/JBoss Tools でエラーが発生するのはなぜですか?

ご覧のとおり、このコンスタレーションは Eclipse Dali JPA バリデーターもびっくりさせます。JPA仕様では、ここに示すようにこれが許可されているようです(ある程度信頼できます):

JPA 仕様では、非主キー列への参照が許可されていますか?

最初の質問に投稿された正確なコードでも、Hibernate MappingException が発生します。

私は特に「再帰的性質」に苛立っています。結局のところ、GeoAreas サブテーブル Countries の UNIQUE, NOT NULL CHAR(2) 列への単純な単一列参照です。ここでは継承が何らかの影響を与える可能性がありますが、それでもそれほど複雑ではないことに注意してください。

それで、これは休止状態のバグですか?

0 投票する
1 に答える
513 参照

nhibernate - 自然キーを使用した流暢なNHibernate参照エンティティ

FluentNHibernateの自動マッピング機能を使用しています。規則を使用してデータベースマッピングをかなり近づけることができましたが、IAutoMappingOverrideが必要なことがいくつかあります。

レガシーシステムでは、NATURALキー「Code」を持つエンティティクラス「Campus」があります。このキーのOracleデータベースタイプはVARCHAR2(3 BYTE)です。私の慣習では自動生成された代理キーを想定しているため、これにはオーバーライドを使用しています。以下に示すように、Campusエンティティ(自然キーを含む)を参照する他のエンティティクラス(Buildingなど)があります。

私が生成したHBMマッピングは、次のオーバーライドを使用して正しいように見えます。

ただし、スキーマのエクスポート(Oracleデータベース)は正しくありません。

ご覧のとおり、building.camp_codeはNVARCHAR2(255)であり、これはOracleのStringのデフォルトのようですが、VARCHAR2(3 BYTE)である必要があります。

mapping.NaturalId関数があるのを見ましたが、これが正しく機能しているかどうかはわかりません。Idの代わりにこれを使用すると、マッピング例外が発生するためです。

このシナリオに対処する方法について助けていただければ幸いです。

よろしく、ライアン。