2015-10-06 110 views
0

此类保管ORM我有6个大属性的对象,他们中的其中5个唯一定义(不派生)第六届一个:设计考虑

public Class MyClass { 

     private FirstAttribute first; 

     private SecondAttribute second; 

     private ThirdAttribute third; 

     private FourthAttributeEnum fourth; 

     private FifthAttributeEnum fifth; 

     private SixthAttribute uniquelyDefined; 

} 

我需要存储这个类的对象在关系数据库中。对于前5个属性的所有独特组合,第六个变化的值(对于不同的组合可能是相同的,但没有关系,所以第六个不能是主键)。

作为主键,我定义了另一个字符串,它组合了前5个属性的字符串表示。

我正在寻找更好的实施这种情况。什么是重组这个班级的最佳方式?

+0

前5个属性的组合如何能成为主键?你有没有像{1,2,3,4,5 - 1}和{1,2,3,4,5 - 2}之类的东西? – Pras

+0

@Pras不会发生在我的情况。每个对象将具有前五个属性的不同组合。 –

+0

好吧,首先我喜欢“技术PK”的想法..我不会混合业务属性来生成主键,但绝对是一个新的列(字符串或长或任何记住ORM映射馆藏,如Hibernate生成自动为你PK)......然后,你只需在前5个属性上添加一个唯一的约束 – Pras

回答

0

作为主键,我定义了另一个字符串,它组合了前5个属性的字符串 表示。

这可能是代理主键优于自然键的罕见情况之一。 “兆字节长”的主键不是一个好主意,因为它们通常在整个应用程序中使用(其他表,实体内存表示等)。由于您的索引将会增长,因此您还会放慢查找操作。由于行数太大,表格读数可能会减慢。