2012-05-22 49 views
0

我正在做一个数据库,并有一个表结构如下处理属性本身具有属性的标准方法?

  Att1 Att2 Att3 .... 
User1  
User2 
User3 
.... 

,我想每一个属性(ATT1,ATT2,ATT3,...)中有一个布尔变量连接到它。像下面这样:

Att1 No 
Att2 No 
Att3 Yes 
...  ... 

每个属性是来自用户的数值分数(上市首选项),但我想它是否真正重要与否来标记每个属性。有没有处理这种类型的依赖的标准方法?谢谢!

+0

你有没有具体的例子ow什么Att1,2和3实际上会被调用? – Jodrell

+0

我认为这对我的问题并不重要,但要澄清一些属性可能是“Coffee”,“Tea”和“Creamer”,其中分数是每个用户的偏好(从0到10)他们有库存/可用。我想要做的就是回到事实之后 - 并且标记我们真正愿意参与的重要事件。 – mstobb

回答

0

噢,如果我们可以在表格中嵌入记录,这将是很好的。但是,标准SQL和大多数数据库不支持这一点(虽然有例外)。

我会使用一致的命名约定,发明诸如“IsImportantAtt1”和“IsImportantAtt2”等字段。当我这样做时,我也有一个约定,即所有的“Is”变量只取“Y”或“N”的值。如果我想在输出中看到“是”和“否”,那么我使用该转换的视图或在应用程序层中进行。

+0

如果您使用的是MS SQL,那么'Bit'类型对于标志是理想的 – Jodrell

-1

如果属性本身不属性,属性的得分很重要吗?如果没有,你可以简单地有一个约定,即NULL分数意味着属性不重要。

否则,你可以为每个属性栏添加一个(布尔)柱:

  Att1 Important1 Att2 Important2 Att3 Important3 .... 
User1  
User2 
User3 
.... 

顺便说一句,在属性固定的吗?即你是否总是具有完全相同的一组属性?如果没有,你可以更好地通过EAV model服务(尽管某些缺点EAVS通常有):

enter image description here

一个不重要的属性可以简单地从USER_ATTRIBUTE表省略(假设“不”的答案是我的问题在顶部)。

+0

我知道这听起来很教条,但如果您真的可以通过EAV模型服务,那么您也可以直接写入服务器系统表。 – Jodrell

+0

@Jodrell Yup,这听起来很教条;)尽管存在潜在的问题,但EAV仍有合法用途。有趣的是:[你的回答](http://stackoverflow.com/a/10719814/533120)也描述了EAV! –

+0

@BrankoDimitrijevic属性是固定的,所以我不认为EAV模型一定是最好的方法。即使我必须拥有所有重复的信息,但您对每个属性的第二列的想法仍然很好。 – mstobb

0

这听起来对我来说,Attribute实际上是一个实体的呼叫ListingPreference它有一个Id键,2个属性,ScoreIsImportant和FK到User称为UserID

User currentley只有一个Id键。


总之,属性没有属性,这意味着你的模型是错误的。

+0

你说得对。我认为处理这种情况的标准方式是从来没有进入过。我完全理解你在这里的意思,如果我从头开始,这将是一个更好的方式,但在我回到原点之前,我想我会按照@Gordon的建议重新命名这些字段。 – mstobb