2009-08-15 16 views
2

OracleまたはSQL Server上でORMを使用して主キーを処理する場合のベストプラクティスは何ですか?OracleおよびSQL Serverの主キー

Oracle - シーケンスとトリガーを使用するか、ORMでこれを処理する必要がありますか?それとも別の方法がありますか?

SQL Server - 識別子データ型を使用する必要がありますか?

+0

「MsSQL」という製品はありません。それは "SQL Server"です。あなたが正しい用語を使用すると、人々があなたの質問を見つけるのがより簡単になります。 –

答えて

1

何らかのORMを使用している場合は、プライマリキーの生成を処理させることをお勧めします。 SQL ServerとOracleで。

0

場合によっては、テーブルの固有の固有の識別子があります。たとえば、Userテーブルの各行はUserName列で一意に識別できます。その場合、主キーとしてUserNameを使用することが最善の方法です。

また、多対多の関係を形成するために使用されるテーブルについて考えてみましょう。 UserGroupMembershipテーブルには、特定のユーザーが特定のグループのメンバーであるという事実を一意に識別するため、主キーとなるUserId列とGroupId列が含まれます。

1

どちらのデータベースでも、プライマリキー(SQL ServerのuniqueidentifierまたはOracleのRAW(20)にマップする)でクライアント生成のGuidを使用します。 Guidの外部キーを使用する場合、JOINのパフォーマンスが低下するにもかかわらず、接続されていないクライアントやデータベースを複製する傾向があるため、クライアントで一意のIDを生成できる必要があります。 Guid IDにはORMを使用する際にも利点があります。これは、人生を大幅に簡素化するためです。

+0

利用可能な自然キーがある場合はどうなりますか? –

+0

@ジョン:利用可能なキーがあれば、間違いなくナチュラルキーを使用します。私はちょうど利用可能な自然キーが存在しないことに慣れています。 :) – MusiGenesis

+0

SQL Serverの場合、GUIDをプライマリキーとして使用するのは本当に悪い選択です。デフォルトでは、Priamryキーもテーブルのクラスタ化キーになります。また、htatのGUIDを使用すると、パフォーマンス。 –

1

データベースは、フロントエンドアプリケーションとは独立したライフを持​​つ傾向があることを覚えておくことをお勧めします。バッチ処理、Webサービス、他のデータベースとのデータ交換、同じデータベースを共有する異なるアプリケーションであっても、レコードを挿入することができます。

したがって、データベーステーブルがそれ自身の識別を担当しているか、少なくともその能力を持っている場合に役立ちます。たとえば、Oracleでは、BEFORE INSERTトリガーは、プライマリ・キーに値が提供されているかどうか、およびプライマリ・キーには値が生成されていないかどうかをチェックできます。

OracleとSQL Serverの両方でGUIDが生成されるため、ID生成をクライアントに委任するのに十分な理由ではありません。

+0

私はOPがクライアント上でアイデンティティの生成を行ったことについて何も言わなかった。あなたはどこを見たことができますか? –

+0

これはMusicGenesisが言ったことでした。 – APC

+0

APCはMusiGenesisの "c"のような、実際には存在しないものを追加したいと考えています。 =) – MusiGenesis

関連する問題