我应该只为一个(字符串)字段创建一个新实体吗?

时间:2014-10-29 20:26:50

标签: sql sql-server database-design

假设我有一个实体,例如:

-id
-name
-address
-phone

然后我希望这个人有一些字符串,并且可能会为每个人重复很多次,例如邻居,这就是我认为应该做的事情:

-id
-name
-address
-phone
-idNeighborhood

并创建一个新表

-id
-name

当然,idNeighborhood是邻居id的外键。

现在,我想的是我每次都必须加入JOINS(假设我会在90%的情况下使用邻居我想要使用某些人),所以,这是错:

-id
-name
-address
-phone
-neighborhoodName

我会保存邻居的名字,但当然会重复很多次(在另一种情况下我会重复很多ID ......所以...)..

另外,在我的特殊情况下,邻居永远不会成长,它总会有一个名字,这就是为什么我觉得这样做更好,但我不确定...... 我认为唯一不利的一点就是我不能制作一个邻域索引,然后它会变慢或不变?

2 个答案:

答案 0 :(得分:1)

这是一个关于你想要建模的问题。您应该在数据库中对与您尝试使用系统解决的问题相关的事物进行建模。

您是否对社区感兴趣?

您希望制作邻居表的一些原因: -

  • 您最终会向社区添加其他属性(例如,城市或州)
  • 你最终有两个同名的社区,实际上是不同的(所以他们需要一个超出他们名字的身份)
  • 您担心存储要求,并且您的社区和人数相对较少(ID会变小)
  • 您想控制可以使用的社区主列表(人们只从现有社区中选择并且不能输入任何旧的东西)

请注意,您也可以将所有相同的逻辑应用于name列。但是,只有当你的数据库关于人们的名字时,你才会这样做,就像你应该建立一个邻居专栏一样,如果建模社区将有助于解决你正在解决的问题。

答案 1 :(得分:0)

这实际上取决于您的要求。如果您需要显示邻居的详细信息,例如NAME,PROFESSION等。在您的应用中,最好使用第一种方法,即创建具有所需属性的实体。

如果你真的不需要任何关于你邻居的细节,你只需要这个名字,你可以采用你的第二种方法