我在项目的数据库中创建了一个Account
表。每个帐户都有很多属性:
大多数都可以为空。我的问题是,我应该如何在数据库中设计它?
它应该是一个包含所有这些属性的表吗?或者我应该创建两个表,例如AccountSet
和AccountInfoSet
,我会存储所有那些“高级”用户的设置?最后,但并非最不重要:如果这应该是两个表,那些表之间应该是什么样的关系?
答案 0 :(得分:1)
如果这是一个关系数据库,那么我肯定不将这些属性存储为Account表中的字段。一些原因:
一旦您的应用程序投入生产(或者它已经存在),架构维护将成为一场噩梦。你绝对会添加更多的属性,不得不经常触摸生产中的那张桌子会很痛苦。
您很可能最终会遇到孤立的字段。我已经多次看到你会介绍一个属性然后停止使用它,但它已经融入你的架构中,你可能会害怕删除它。
理想情况下,您希望避免在表格中包含此类稀疏数据(许多字段包含大量空值)。
我的建议是做你已经考虑过的事情以及为帐户引入属性表。你称之为AccountInfoSet。
表格应如下所示:
AccountId int, 物业nvarchar(50), 值nvarchar(50)
(当然,您可以根据需要设置数据类型和大小。)
然后,您将加入AccountInfoSet表,并可以使用" advanced" properties - 使用查询将行转换为列。
在.NET中,您还可以编写一个存储过程,该过程通过一次调用返回两个查询,并查看DataSet对象中的表。
或者您可以进行两次单独的通话。一个用于帐户,一个用于属性。
有很多方法可以获取信息,但如果您正在使用关系数据库,请确保不要只向帐户添加字段。