Моделирование базы данных между многими связями между тремя таблицами с использованием sqlalchemy в python - PullRequest
3 голосов
/ 04 июля 2011

Рассмотрим следующие модели таблиц для sqlalchemy в python.

class Worker(Base):
    id Column(Integer, primary = True)
    name Column(String, nullable = False)

class Project(Base):
    id Column(Integer, primary = True)
    name Column(String, nullable = False)

class Rating(Base):
    id Column(Integer, primary = True)
    description Column(String, nullable = False)

Давайте рассмотрим некоторые ограничения для этих таблиц.(Не подвергайте сомнению смысл этого примера, пожалуйста, это лучшее, что я придумал, чтобы описать то, что я хотел бы изучить.: -))

  1. A worker может иметь несколькоprojects для работы.
  2. A project может иметь несколько workers, назначенных для работы с ним.
  3. Для каждого кортежа (worker, project) у вас есть отдельный rating

Я понимаю, что у меня есть отношения три ко многим.Это:

  1. работник и проект
  2. работник и рейтинг
  3. рейтинг и проект

У меня нет проблем с определением многих длямного отношений между двумя таблицами.Мне просто нужно добавить в мои модели следующую ассоциативную таблицу и привязку.

worker_project = Table('worker_project', METADATA,
                       Column('worker_id', Integer, ForeignKey('workers.id')),
                       Column('project_id', Integer, ForeignKey('projects.id')),

class Worker(Base):
    # [...]
    papers = relationship('Project',
                          secondary=worker_project,
                          backref='workers')

Что мне не удается, так это связать таблицу «рейтинги», как описано выше. Любая помощь приветствуется.

1 Ответ

4 голосов
/ 04 июля 2011

Сделайте таблицу рейтингов примерно такой.

  Rating
---------------------
  rating_id (primary key) 
  worker_id (foreign key - worker(worker_id)) 
  project_id (foreign key - project(project_id)) 
  description

Если я правильно понимаю, это так.

...