Хороший ли это дизайн базы данных?
У меня есть такая задача по созданию api:
- Городской округ - название, id
- Категория - название, id
- Сеть организаций - название, id
- Организация
- Принадлежит к одной из сетей организации
- ид, название, описание
- принадлежит к нескольким округам, может быть представлен в нескольких из них одновременно
- имеет список товаров с ценами
- Продукт
- идентификатор, название, категория
- может продаваться в одной или нескольких организациях в сети
- цена может быть разной в зависимости от организации
Это моя попытка спроектировать эту базу данных, я что-то упустил?
А также в Django:
from django.db import models
class District(models.Model):
name = models.CharField(max_length=100, unique=True)
class Category(models.Model):
name = models.CharField(max_length=100, unique=True)
class OrganizationNetwork(models.Model):
name = models.CharField(max_length=100, unique=True)
class Organization(models.Model):
name = models.CharField(max_length=100, unique=True)
description = models.TextField()
organization_network = models.ForeignKey(
OrganizationNetwork,
on_delete=models.CASCADE,
related_name="organizations",
)
district = models.ManyToManyField(
"District",
through="DistrictOrganization",
through_fields=("organization", "district"),
related_name="organizations",
)
products = models.ManyToManyField(
"Product",
through="OrganizationProduct",
through_fields=("organization", "product"),
related_name="organizations",
)
class Product(models.Model):
name = models.CharField(max_length=100, unique=True)
category = models.ForeignKey(
Category, on_delete=models.CASCADE, related_name="products"
)
class DistrictOrganization(models.Model):
district = models.ForeignKey(District, on_delete=models.CASCADE)
organization = models.ForeignKey(Organization, on_delete=models.CASCADE)
class OrganizationProduct(models.Model):
price = models.DecimalField(max_digits=10, decimal_places=2)
organization = models.ForeignKey(Organization, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
Довольно странно создавать 2 отношения между организацией и районом. Вы должны использовать один ко многим, если в районе может быть только одна организация, и многие ко многим в противном случае.