参考表:所有在一个或单独的表?

时间:2011-09-22 09:54:46

标签: mysql sql database database-design

我有一个group表 - option_idextras_id应该在单独的表中还是在一个表中?请参阅下文我的意思:

组表:

mysql> select * from `group`;
+----+-----------+--------+
| id | name      | type   |
+----+-----------+--------+
|  1 | Group One | extra  |
|  2 | Group Two | option |
+----+-----------+--------+

有两个组(额外或选项)。

group_extra表:

mysql> select * from `group_extra`;
+----+----------+----------+
| id | group_id | extra_id |
+----+----------+----------+
|  1 |        1 |      123 |
|  2 |        1 |      124 |
+----+----------+----------+

group_id = 1有一个ref extra_id

列表

group_option表:

mysql> select * from `group_option`;
+----+----------+-----------+
| id | group_id | option_id |
+----+----------+-----------+
|  1 |        2 |        45 |
|  2 |        2 |        46 |
+----+----------+-----------+

group_id = 2有一个ref option_id

列表

group_option_extra表:

mysql> select * from `group_option_extra`;
+----+----------+-----------+----------+
| id | group_id | option_id | extra_id |
+----+----------+-----------+----------+
|  1 |        1 |         0 |      123 |
|  2 |        1 |         0 |      124 |
|  3 |        2 |        45 |        0 |
|  4 |        2 |        46 |        0 |
+----+----------+-----------+----------+

或者表格应该是这样,将group_optiongroup_extra合并为一个?推荐哪一个。

2 个答案:

答案 0 :(得分:3)

将它们分开。

你真的不需要type列 - 你可以检查其他表中是否存在任何行以查看它是哪种类型。

答案 1 :(得分:3)

独立的。

“together”被称为“One True Lookup Table”反模式