Хороший ли это дизайн базы данных?

У меня есть такая задача по созданию api:

  1. Городской округ - название, id
  2. Категория - название, id
  3. Сеть организаций - название, id
  4. Организация
  • Принадлежит к одной из сетей организации
  • ид, название, описание
  • принадлежит к нескольким округам, может быть представлен в нескольких из них одновременно
  • имеет список товаров с ценами
  1. Продукт
  • идентификатор, название, категория
  • может продаваться в одной или нескольких организациях в сети
  • цена может быть разной в зависимости от организации

Это моя попытка спроектировать эту базу данных, я что-то упустил?

My try to design database

А также в 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 отношения между организацией и районом. Вы должны использовать один ко многим, если в районе может быть только одна организация, и многие ко многим в противном случае.

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