0

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

  • 登录
  • 电子邮件
  • 密码
  • 生日
  • 国家
  • 头像网址
  • 城市
  • 等等

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

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

4

1 回答 1

1

如果这是一个关系数据库,那么我绝对不会将这些属性作为字段存储在 Account 表中。一些原因:

  1. 一旦您的应用程序投入生产(或者可能已经存在),架构维护将成为一场噩梦。您绝对会添加更多属性,并且必须在生产中不断触摸该表将是痛苦的。

  2. 您很可能会得到孤立的字段。我已经多次看到这种情况,您将引入一个属性然后停止使用它,但它已融入您的架构中,您可能太害怕而无法删除它。

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

我的建议是做你已经在考虑的事情,那就是为 Accounts 引入一个属性表。您将其称为 AccountInfoSet。

该表应如下所示:

AccountId int、属性 nvarchar(50)、值 nvarchar(50)

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

然后,您将加入 AccountInfoSet 表,并可能以“高级”属性为轴 - 使用查询将行转换为列。

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

或者你可以只打两个单独的电话。一个用于帐户,一个用于属性。

获取信息的方法有很多,但如果您使用的是关系数据库,请确保不要只向 Account 添加字段。

于 2013-01-13T04:24:12.423 回答