我想不出更好的解决办法是什么。
表格:35个字段,其中2个是长文本类型。(在我即将使用的CMS中已经内置)
B表:类似数量的字段,其中3个是文本类型。(我的项目新需要的数据)
首先,我决定使用已经存在的'A‘表,并添加新的'B’表。这是非常容易的方式,因为CMS已经提供了我的项目所需的类和方法(等等-搜索,crud.)。
但是,我关心的是表演。由于表'B‘是对'A’的添加,大多数DB操作,如显示列表、搜索、获取内容.,每次必须至少一次引用这两个表。
绝对需要连接和多个查询。本网站需要同时向在线用户显示多个列表和内容。
什么是最好的解决方案?合并两个表是否更有效,还是尽可能多地重复使用现有的代码,并保持与CMS的兼容性?
ps。如果将两个表组合在一起,就可以减少表'A‘中一些不必要的varchar字段。
发布于 2018-02-06 03:40:27
您只复制将tableB与tableA关联起来的列。不应重复非主键列的原因:
表的大小在增加,如果表之间有重复的字段,那就是浪费空间。
不管要复制的列大小如何,只为了确保所有重复的列都被正确更新,维护表是非常困难的。例如,有一个重复的列名为detail。如果您将tableA中的此列更新为特定的id,则需要再次努力在tableB中更新相应的记录。
将花费大量的精力、资源、时间和金钱来维护表之间重复的非主键列。
发布于 2018-02-06 02:49:18
合并两个表太昂贵,也不明智。如果这两个表包含重复字段,您将浪费大量的数据库空间,这将影响CRUD操作。最好的方法是创建表B,但只添加表A中的主键字段,您可以使用这些字段链接两个表。通过这种方式,可以很容易地检索到两个表中的特定需要的数据。您也不需要从两个表中检索所有数据。
示例:
表A:
id
fname
国名
。
。
35个字段的其余部分
表B:
tableb_id
id (来自表A)
。
。
表B其余字段
您的查询:
选择列
来自TableA,TableB
其中TableA.id = TableB.id
和(所有其他条件,如TableA.lname = "Santos");
或使用内连接
选择column_name(s)
从tableA内部联接tableB到tableA.id = tableB.ID
其中(所有其他条件,如TableA.lname = "Santos");
https://stackoverflow.com/questions/48634516
复制相似问题