SQL - Как создать таблицу связей?

Я строю следующую модель данных в Django / SQL

Table 1 (Entity) - things that can do things
Entity ID:
Enum: (Person, or Business)

Table 2 (Person)
Entity ID:
Person ID:
Firstname
Lastname

Table 3 (Ltd Co.)
Entity ID:
Ltd Co. ID:
Company Name
Company No.

Я пытаюсь связать лицо, у которого есть компания с ограниченной ответственностью, с агентом (который также является лицом), у которого также есть компания с ограниченной ответственностью. Таким образом, 4 различных объекта, два из которых имеют тип Person, а два - тип Limited Co.

Нужна ли мне еще одна таблица связей? Например,

Profile Person Profile Ltd Co Agent Person Agent Ltd Co
Entity 1: Type Person Entity 3: Type Business Entity 2: Type Person Entity 4: Type Business

Q. Как мне создать эту таблицу связей в Django Model / или SQL?

Q. Является ли таблица связей правильным подходом?

Я думаю, что вам нужно ForeignKey. Вы можете связать один объект Person с другим. Просто добавьте это:

class Person(models.Model):
    ...
    agent = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, related_name='clients')

Отныне вы можете просто добавлять один Person как agent в поле другого Person. Использование:

person_1 = Person.objects.create(...)
person_2 = Person.objects.create(..., agent=person_1)

person_1.clients.all()
# <QuerySet [<Person: Person 2>]>

person_2 in person_1.clients.all()
# True

person_2.agent
# <Person: Person 1>

person_2.agent.related_entity.entity_type
# 'Company' / 'Person'

Вы можете получить доступ к связанному объекту с помощью простого .agent или обратного отношения всех клиентов с related_name, которое вы хотите использовать, в моем примере это .clients. Помните, что обратная связь всегда QuerySet, потому что у одного агента может быть много клиентов, но у каждого клиента может быть один агент. Отношения являются очень мощным инструментом в Django, за подробностями следите в этом DOCS.

Вернуться на верх