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.