2014-10-30 78 views
0

我正在编写一个web应用程序,无法弄清以下两种方法中的哪一种应该采取。 想象5个表:A,B,C,d,和E.

选项1: 使用ID作为外键,然后它看起来像这样:
表A:ID,FIELD1,FIELD2,。 ..
tableB的:tableA_id,字段1,字段2,...
表C:tableB_id,字段1,字段2,...等...

选项2: 创建新列将作为外键,然后它看起来像这样:
表A:ID,字段1,字段2,...
tableB的:IDtableA_id,字段1,字段2,...
表C:IDtableB_id,字段1,字段2,...等...

我认为,当我们调用tableB的ID字段被命名为逸岸,但tableA_id我可能是错了,所以选择1可能会有点混乱如果有人启发我,我会很高兴。
另外,如果选项2是要走的路,在主键上连接表有什么意义?

编辑:我想实现是这样的:
帐户
......性格
......项目
......消息
... ...其他的东西带OneToOne注释的数据库结构

+0

你想模拟一棵树吗? – Leo 2014-10-30 22:14:43

+0

我不这么认为。我只是想弄清楚哪种方式是正确的。在我的情况下,有帐户表,其中只包含1个字符,例如项目表,消息等等。 – Sikor 2014-10-30 22:20:07

回答

0

我结束了创建新列的外键(选项2 )只是因为它不那么令人困惑。
感谢您的建议,但我很感激。

0

我想“选项2”,虽然你可能需要对你的目标更具体些。我可能会建议一个选项3:

TableX: id, A_id, B_id, C_id, D_id, E_id 

则:

Table_A: id, col1, col2 
Table_B: id, colX, colY 
Table_C: id, thing1 
Table_D: id, more_col 
Table_E: id, xxx 

然后,它只是一个简单的连接:

SELECT A.col1, B.colX, C.thing1, D.more_col, E.xxx 
    FROM TableX X 
    LEFT JOIN Table_A as A on X.A_id = A.id 
    LEFT JOIN Table_B as B on X.B_id = B.id 
    . 
    . 
    . 
+0

这是一个有趣的解决方案,但在Spring数据中,我不会手动执行任何SQL,而只需要调用存储库适当的函数和hibernate为我做这个,所以我必须一直调用TableX。我也更新了我试图达到的目标。 – Sikor 2014-10-30 22:56:21