假设我有2张桌子。广告活动和广告商。这些表中的每一个都有一些与以下内容完全相同的字段(这些不是完整的字段列表,我只显示相同的字段):

编辑:
如评论中的要求,我将更紧密地解释关系。
每个广告客户都有0到许多广告系列。 1个广告系列恰好属于1个广告客户。还有另一个表,我们称它为“ Offer”。创建新报价时,所有计数列都需要增加(campaigns.monthly_count,campaigns.monthly_count,advertisers.monthly_count,advertisers.total_count)。限制列是计数列不能超过的特定上限。

战役

monthly_limit (int)
total_limit (int)
monthly_count (int)
total_count (int)


广告商

monthly_limit (int)
total_limit (int)
monthly_count (int)
total_count (int)


问题是:它是规范化的数据库设计还是有更好的处理方法?

我正在考虑再有一个这样的表:

极限

campaign_id (int)
advertiser_id (int)
monthly_limit (int)
total_limit (int)
monthly_count (int)
total_count (int)


但是这样一来,引用的列之一将始终为空,并且我无法使用外键。

或者另一个选择可能是这样的:

Limits_Campaigns

campaign_id (int)
monthly_limit (int)
total_limit (int)
monthly_count (int)
total_count (int)


Limits_advertisers

advertiser_id (int)
monthly_limit (int)
total_limit (int)
monthly_count (int)
total_count (int)


这样,我可能必须在查询中编写更多的联接,但是我可以使用外键。

还有其他选择似乎更合适吗?如果没有,这些设计中哪一个是最好的?

附注:更具体地说,我正在使用MySQL InnoDB引擎。

最佳答案

将有另一种方法:
有一个名为limitable-entity的基本表(我的名字不满意),与广告系列和广告客户具有一对一的关系。
限制实体将是generalization pattern in database design的实现。

09-28 09:11