数据库设计&参照完整性

时间:2013-03-21 08:57:19

标签: asp.net sql database

我正在设计一个网站用户界面(注册,登录,编辑个人资料,编辑地址等)。

我创建了以下表格。我的问题是,是否有任何冗余的列或表?此外,考虑到用户可以添加/编辑另一个地址这一事实,哪些列将是主键,哪些列将是外键?

我使用了CountryCode的三个下拉列表(针对移动电话号码) - 来自CountryCode的{​​{1}},ACountry(来自地址) - 填充自{{ 1}}来自CountryCountry Name(来自地址) - 来自ACountry来自State。其中,国家/地区代码下拉列表出现在注册页面上。其他2个位于用户登录后显示的地址簿页面上。StateName& Astate表将存储数据。

我不知道我将如何加入这些表格。我是否包含足够/更多/更少的列?我应该做些什么改变。

UPDATE1: 我已将数据库更新为以下表/列。现在我如何建立国家代码和国家代码之间的关系?国家代码(已标记)...或者我应该从AUser中删除CountryCode。如果我保留两个表格,我将把数据存储在2个地方。我不想这样做......问题是国家代码的格式。它采用名称和拨号代码(例如印度(+91))。如果我从AUser中删除该列,我将如何存储移动设备。然后? 可能是我必须打破国家/地区代码字符串并删除拨号代码部分并将其存储在移动号码中。在Mobile列中。这听起来太复杂了。

enter image description here

1 个答案:

答案 0 :(得分:2)

你唯一没有合适的关系是在AUserACountry之间。目前,CountryCode上有AUser。那应该是CountryID,因为这是ACountry的主键。

此外,AUserAddress不应该StateID而不是State?如果是这种情况,那么就不需要在该表上同时拥有StateIDCountryID,您可以通过查看{{1}中引用的相应State来确定用户的国家/地区。列。