Форум сайта python.su
Доброго времени суток, господа.
Я новичек в программировании, и для освоения python, решил сделать приложение для управления БД.
После чтения разных примеров из разных источников, у меня возник вопрос праивльный ли я выбрал подход к структуре и модели БД.
Суть такова: в БД будут хранится данные о предприятиях и их подчиненных. Вот картинка как выглядит структура:
Добавлю пояснения словами. Есть Компания, которая имеет несколько направлений занятости (one-to-many), множество сотрудников (которые могут работать в разных компаниях, поэтому я выбрал many-to-many). Сотрудники занимаются определенную (-ые) должности ( поэтому я выбрал one-to-many). Хотя у должностей, естественно может быть множество сотрудников, но я думаю many-to-many здесь ни к чему.
Соответсвенно вышеизложенной схеме получается следующий код:
comp_empl_link = Table('comp_empl_link', Base.metadata, Column('company_id', Integer, ForeignKey('company.id')), Column('employee_id', Integer, ForeignKey('employee.id'))) class Company(Base): __tablename__ = 'company' id = Column(Integer, primary_key=True) name = Column(String) address = Column(String) employee = relationship('Employee', secondary=comp_empl_link) occupation = relationship('Occupation') def __init__(self, name, address): self.name = name self.address = address def __repr__(self): return "<Company name: %s; Address: %s>" % (self.name, self.address) class Employee(Base): __tablename__ = 'employee' id = Column(Integer, primary_key=True) first_name = Column(String) last_name = Column(String) patronymic = Column(String) birthday = Column(Date) company = Column(Integer, ForeignKey('company.id')) position = relationship('Position') def __init__(self, first_name, last_name, patronymic, birthday): self.first_name = first_name self.last_name = last_name self.patronymic = patronymic self.birthday = birthday def __repr__(self): return "<Employee: %s %s %s; birth - %s" % (self.first_name, self.last_name, self.patronymic, self.birthday) class Occupation(Base): __tablename__ = 'occupation' id = Column(Integer, primary_key=True) name = Column(String) desc = Column(String) company_id = Column(Integer, ForeignKey('company.id')) class Position(Base): __tablename__ = 'position' id = Column(Integer, primary_key=True) name = Column(String) desc = Column(String) employee_id = Column(Integer, ForeignKey('employee.id'))
Отредактировано Astronaut (Янв. 12, 2015 17:23:58)
Прикреплённый файлы:
снимок68.png (30,8 KБ)
Офлайн
Напишите на почту свой скайп. Покажу как вообще алхимией пользоваться. Очень и очень няшная вещь. Необходимо просто понять, как в БД создаются FK, в чем разница между MTO, OTM и OTO на уровне таблиц БД и на уровне моделей.
Офлайн
4kpt_IIIЯ Вам отправил e-mail
Напишите на почту свой скайп. Покажу как вообще алхимией пользоваться. Очень и очень няшная вещь. Необходимо просто понять, как в БД создаются FK, в чем разница между MTO, OTM и OTO на уровне таблиц БД и на уровне моделей.
Офлайн