帮助我设计数据库

时间:2010-05-20 12:14:08

标签: sql sql-server database-design

我正在开发文字广告系统。谷歌广告的一些小型克隆

更新了图片,以便看到所有字段名称 如果你没有看到图表,click here

alt text http://img41.imageshack.us/img41/5351/dbdiagram.png

这是常见表格的图表。 基本上简而言之,广告客户可以拥有多达10种不同文字版本的同一广告系列,可以对其广告进行地理定位,并且仅针对超过24小时未在特定网站上展示的IP进行唯一展示次数。

非常简单,但问题是我在这里缺乏你的经验,因为后来修复设计缺陷会更加困难,而且你们中的一些人可能也做了类似的事情,这里的许多SQL大师也许这样做,也许我做了规范化的数据库或做过根据需要没有标准化?

第二个问题是。我的最终目标是从ie获取用户广告。只要广告适合用户所在国家/地区,24小时内在同一网站上看不到相同广告的德国。如果有每次展示,则每次展示都会与每次展示相同。我需要根据IP,国家和更高CPC(每次点击付费)获得5个“随机”广告。 我如何通过当前的设计实现这一目标,或者设计数据库的方式可以轻松获取广告并为推荐人显示统计数据......

感谢您的帮助...

2 个答案:

答案 0 :(得分:1)

总的来说,看起来不错,如果是我的话,我会做一些小改动:

我注意到您的Countries表上有Region ID,但没有Region表。如果没有Region表,是什么阻止输入不正确的(Negative?)区域ID?

同样,文字广告系列表格中的广告系列状态为Tinyint。这是一个存储的枚举?如果是这样,请考虑一个状态表,因为这会阻止您输入Enum中不存在的状态,这可能会导致代码崩溃,因为在您重新读取它们时会尝试将其转换。

与Users表上的User Status相同。

Countries表上的Country ID是Integer,TinyInt就足够了。

你有预算数字作为整数,所以是不可能预算到一分钱/分/等,或者这些是以小部分来衡量的?

您似乎计划将密码存储为纯文本?考虑对密码进行盐析和散列,然后只存储这些密码 - 或者您打算使用透明加密。

根据您计划运行多长时间,VARCHAR(15)将不足以在IPv6中存储IP地址。

如果您有SQL 2008,则可以在Text Campaign每日统计表上使用DATE类型,然后将日期和Campaign Text Variant ID设置为主键。

您可以在Text Campaign Variant表中添加一些字段,例如Date From和Date To,以便人们可以提前设置广告系列。同样,时间开始和时间停止可以允许广告系列在一天的特定时间显示。

我可能会更改名称,因此文字广告系列只是广告系列等等 - 您可能希望将来制作视频或图片广告系列?

还有其他的东西,但现在这很充足。我想知道你是否有可用的估计用量?可能有助于识别更多以进行优化。

答案 1 :(得分:0)

所有主键的名称最好是ID,外键列的名称最好是PrimaryTable + ID。

例如,Users表中的主键名必须是ID,TextCampaigns表中的相关外键必须是UserID。

这只是我的意见。