Django / MYSQL外键最佳实践

问题描述 投票:1回答:1

我有三种型号:

class Agent(models.Model):
    name = models.CharField(max_length=200)

class Phone(models.Model):
    calls = models.CharField(max_length=200)
    agent_phone_name = models.CharField(max_length=200)
    agent = models.ForeignKey(Agent, on_delete=models.CASCADE)

class Chat(models.Model):
    chats = models.CharField(max_length=200)
    agent_chat_name = models.CharField(max_length=200)
    agent = models.ForeignKey(Agent, on_delete=models.CASCADE)

聊天和电话链接到具有外键的座席。我想制作一张这样的桌子:

agent1 | sum(calls) | sum(chats)
agent2 | sum(calls) | sum(chats)
agent3 | sum(calls) | sum(chats)

第一个问题是:我已经阅读了有关SQL外键的信息,该外键是维护数据和引用完整性的一种方式。但是,在我的情况下,有一些未命中的呼叫和聊天(代理未接听),它们生成的数据行的agent_name值为空。因此,当我插入电话/聊天数据并更新FK时,我将FK留为空白,这有点与FK的思想相冲突。处理此问题的最佳方法是什么?

第二个问题是:使用外键是在Django ORM中执行SQL连接表查询的唯一方法吗?还有其他解决方法吗?

谢谢!

mysql django foreign-keys django-orm
1个回答
0
投票
Hi Viviwill,

Did you resolve your problem?

Could you please help me by posting the answer. I have a same problem ans I want to merge dimension.

Best,

    class TabInfo(models.Model):
    user = models.ForeignKey(User, default=None, on_delete=models.CASCADE, unique=False)
    start_date = models.DateField('Start Date', default=date.today)
    end_date = models.DateField('End Date', default=date.today)
    advertiser = models.CharField('Advertiser', max_length=100)
    dsp = models.CharField('DSP', max_length=30)
    insertion_order = models.CharField('Insertion Order', max_length=300)
    signed_budget = models.DecimalField(max_digits=20, decimal_places=2, default=Decimal('0.00'))

class TabSource(models.Model):
   # user = models.ForeignKey(User, default=None, on_delete=models.CASCADE, unique=False)
    date = models.DateField('date')
    dsp = models.CharField('dsp', max_length=30)
    advertiser = models.CharField('advertiser', max_length=100)
    insertion_order = models.CharField('campaign', max_length=300)
    strategy_name = models.CharField(max_length=300)
    creative_name = models.CharField(max_length=400)
    spent_budget = models.DecimalField(max_digits=20, decimal_places=2,    default=Decimal('0.00'))
    impressions = models.IntegerField()
    clics = models.IntegerField()
    conversions = models.IntegerField()
    post_clic_conversions = models.IntegerField()
    post_view_conversions = models.IntegerField()
© www.soinside.com 2019 - 2024. All rights reserved.