На стороне базы данных я понимаю, что естественный первичный ключ предпочтительнее, если он не слишком длинный, что может привести к проблемам с индексацией производительности.Но когда я читаю проекты, которые используют sqlalchemy через поиск по коду Google, я почти всегда нахожу что-то вроде:
class MyClass(Base):
__tablename__ = 'myclass'
id = Column(Integer, primary_key=True)
Если у меня есть простой класс, такой как тег, где я планирую хранить только одинв любом случае, если я использую sqlalchemy, что я получу благодаря суррогатному первичному ключу?Одна из книг по SQL, которую я читаю, предполагает, что 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)
....
В моей более широкой реляционной модели Tag имеет множество отношений «многие ко многим» с другими объектами.Таким образом, будет несколько промежуточных таблиц, которые должны хранить более длинный ключ.Должен ли я выбрать тег или идентификатор для моего первичного ключа?