假设我有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的实现。