数据库中的高级用户信息

时间:2013-01-12 23:49:10

标签: database database-design data-binding

我在项目的数据库中创建了一个Account表。每个帐户都有很多属性:

  • 登录
  • 电子邮件
  • 密码
  • 生日
  • 国家
  • avatarUrl
  • 城市

大多数都可以为空。我的问题是,我应该如何在数据库中设计它?

它应该是一个包含所有这些属性的表吗?或者我应该创建两个表,例如AccountSetAccountInfoSet,我会存储所有那些“高级”用户的设置?最后,但并非最不重要:如果这应该是两个表,那些表之间应该是什么样的关系?

1 个答案:

答案 0 :(得分:1)

如果这是一个关系数据库,那么我肯定将这些属性存储为Account表中的字段。一些原因:

  1. 一旦您的应用程序投入生产(或者它已经存在),架构维护将成为一场噩梦。你绝对会添加更多的属性,不得不经常触摸生产中的那张桌子会很痛苦。

  2. 您很可能最终会遇到孤立的字段。我已经多次看到你会介绍一个属性然后停止使用它,但它已经融入你的架构中,你可能会害怕删除它。

  3. 理想情况下,您希望避免在表格中包含此类稀疏数据(许多字段包含大量空值)。

  4. 我的建议是做你已经考虑过的事情以及为帐户引入属性表。你称之为AccountInfoSet。

    表格应如下所示:

    AccountId int, 物业nvarchar(50), 值nvarchar(50)

    (当然,您可以根据需要设置数据类型和大小。)

    然后,您将加入AccountInfoSet表,并可以使用" advanced" properties - 使用查询将行转换为列。

    在.NET中,您还可以编写一个存储过程,该过程通过一次调用返回两个查询,并查看DataSet对象中的表。

    或者您可以进行两次单独的通话。一个用于帐户,一个用于属性。

    有很多方法可以获取信息,但如果您正在使用关系数据库,请确保不要只向帐户添加字段。