データベース側では、インデックスのパフォーマンス上の問題を引き起こす可能性がある、非常に長くない限り、自然な主キーが望ましいと判断します。私は一つの値だけを格納する予定とタグのように、単純なクラスを持っている場合はsqlalchemyモデルに代理キー(id = 1)または自然な主キー(tag = 'sqlalchemy')を使用する必要がありますか?
class MyClass(Base):
__tablename__ = 'myclass'
id = Column(Integer, primary_key=True)
:私はGoogleのコード検索を経由してSQLAlchemyのを使用するプロジェクトを通じて読んでいるようしかし、私はほとんどいつものようなものを見つけますとにかく一意性が必要な場合、私はsqlalchemyを使用しているときに代理の主キーを使って何を得るのですか?私が読んでいるSQLブックの1つは、ORMが「反パターン」の正当な使用であることを示唆していますが、ORMはActiveRecordやDjangoのように思います。これは私のモデルにいくつかの場所をアップしますが、ここでは一つだ:私の広い、リレーショナルモデルでは
class Tag(Base):
__tablename__ = 'tag'
id = Column(Integer, primary_key=True) #should I drop this and add primary_key to Tag.tag?
tag = Column(Unicode(25), unique=True)
....
、タグは、他のオブジェクトと複数の多対多の関係を持っています。したがって、長いキーを格納する必要のある中間テーブルがいくつかあります。プライマリキーのタグまたはIDを選択する必要がありますか?
私は個人的には自然主キーを使用すると思います。 OTOH、私はSQLの専門家ではなく、すべての長所と短所を適切に検討することはできません。あまりにも私のバイアスであるが、自然キーを使用すると、このフレームワークでは、このような稀な選択のように思えるので、私はフレームワークが持つ自然の相互作用の大部分を維持するために表示され、特に以来、それはあるかもしれない理由として、いくつかのコンテキストを希望 – nothrow
データベース。 – Profane