2015-10-03 202 views
0

我有5个表可以包含电话字段,但我想要为每个表的多个电话号码的选项。SQL一对多关系,但多对一表关系

而不是创建5个子表,更有意义的是创建一个,并将其链接到其他5个“父”表。但现在我正在考虑如何将该表链接到其他5.

我的第一个想法是过滤2个主题。一个存储链接表名称的字段,以及一个包含来自五个表之一的键的通用外键。我仍然倾向于这种方式。

接下来是将5个外键放到表中,并允许它们为空的想法。我不喜欢4个空字段的想法。更不用说我有与另一个表以相似的方式链接到另外11个表的问题。

第三个是连接或连接表,再次(我相信)5个空的外键,但是这似乎并没有做任何事情,更多的则选择2多一点的复杂性。

第四个选项,我为大多数表的主键使用自动增量字段。我可以切换到这些表的UUID或GUID。我已经设置为使用UUID作为主要安全原因,但是对大多数表使用自动增量来提高性能。

第5个选项是我碰到了在那里的自动递增字段用表名相结合,创建一个新的字符字段。 (仅在创建表时,技术上不是一个计算的字段。)但是再次看不到超出第一个选项的好处。

就是其中之一,以最好的方式,还是有另一种选择我要么错过了,还是不明白吗?

+0

嗯,最重要的是你完全避免了在表格中放置逗号分隔值的想法。 :) – Guffa

回答

0

如果你想分配相同的电话号码三个记录(形成你的5张桌子)是否要添加三个记录具有相同的电话号码到您的“phone_numbers”表?

这是一个优化问题,所以在SQL语义意义上没有“好方法”。

在我看来最简单的在发展中采用的是第一种方式:TABLE_NAMEID此表,但不使用VARCHAR。使用枚举或“table_name_id”TINYINT(参考名字第二个表)。

0

不要让它太复杂,而你可以做到这一点很容易 为此,您可以使用单个表。我给你一个例子如下:

UserId |电话号码| PhoneType |的ParentId

其中userid:是用户 电话的ID号是原始的电话/手机号码 PHONETYPE:电话/手机号码 父ID:这里主要的关键点默认为0把它当作一个单独的条目其他明智的相同tabl的用户ID将其标识为子电话号码..将其视为树关系船.. 就我所知,这是一种简单而有效的方法。