我有5个可以包含电话字段的表格,但我想为每个表格选择多个电话号码。
创建一个子表更有意义,而不是创建5个子表,并将其链接到其他5个“父”表。但现在我正在考虑如何将该表与其他表联系起来。
我的第一个想法是过滤2个主题。存储链接表名称的字段,以及包含五个表之一的键的通用外键。我仍然倾向于这样。
接下来是将5个外键放入表中并允许它们为空的想法。我不喜欢4个空字段的想法。更不用说我与另一个表格有相同的问题,它会以类似的方式链接到其他11个表格。
第三个是链接或联结表,再次(我相信),有5个可以为空的外键,但这似乎没有做任何比选项2更复杂的事情。
第4个选项,我正在为大多数表使用主键的自动增量字段。我可以切换到这些表的UUID或GUID。出于安全原因,我已经将UUID设置为主要用户,但是为了提高性能,大多数表都使用了自动增量。
我遇到了第五个选项,其中自动增量字段与表名组合以创建新的字符字段。 (仅在创建表格时,因此从技术上讲,这不是计算字段。)但是,除了第一个选项之外,再次看不到这样做的好处。
其中一种是最好的方式,还是有其他选择我要么错过了,要么不明白?
答案 0 :(得分:0)
如果您想将相同的电话号码分配给三个记录(从5个表格中分配),您是否希望将三个具有相同电话号码的记录添加到您的" phone_numbers"表
这是一个优化问题,所以没有好的方法"在SQL语义学意义上。
在我看来,最容易在开发中使用的是第一种方式:此表中的 table_name 和 id ,但不要使用varchar。使用enum或" table_name_id" TINYINT(引用带名字的第二个表)。
答案 1 :(得分:0)
不要让它变得如此复杂而你可以轻松地做到这一点 您可以使用单个表格执行此操作。我给你一个例子如下:
UserId | PhoneNo | PhoneType |的ParentId
其中UserId:是用户的ID 电话号码是原始电话/手机号码 PhoneType:手机/手机号码 父ID:这里是主要的关键点,默认情况下它是0,将其视为一个单独的条目,其他相同的tabl的UserID将其识别为子电话号码。将其视为树关系船.. 据我所知,这是一种简单而有效的方法。