我无法弄清楚什么是更好的解决方案。
表格:35个字段,其中2个是longtext类型。 (已经内置在我即将使用的CMS中)
B表:类似数量的字段,其中3个是文本类型。(我项目的新数据)
起初,我决定使用现有的'A'表并添加新的'B'表。这很简单,因为CMS已经提供了我的项目所需的类和方法(等等 - 搜索,crud ......)。
但是,我关心的是表现。由于表'B'是'A'的附加组件,因此大多数数据库操作(如显示列表,搜索,获取内容......)每次必须至少引用这两个表。
绝对需要加入和多个查询。此站点需要同时向在线用户显示许多列表和内容。
什么是最好的解决方案?是否更有效地组合两个表,或者尽可能多地重用已有的代码并保留与CMS的兼容性?
PS。如果我组合两个表,我可以减少表'A'中的一些不必要的varchar字段。
答案 0 :(得分:0)
合并2张桌子太昂贵而且不明智。如果这两个表包含重复字段,则会浪费大量数据库空间,这将影响CRUD操作。最好的方法是创建表B,但只添加表A中可用于链接两个表的主键[s]字段。通过这种方式,可以轻松地检索两个表以获取您特别需要的数据。您也不需要从两个表中检索所有数据。
示例:
表A:
id
fname
lname
。
。
35个领域的其余部分
表B:
tableb_id
id(来自表A)
。
。
表B栏的其余部分
您的查询:
选择列[s]
从表A,表B
其中TableA.id = TableB.id
和(所有其他条件,如TableA.lname =“Santos”);
或使用内部加入
SELECT column_name(s)
FROM tableA INNER JOIN tableB ON tableA.id = tableB.ID
WHERE(所有其他条件,如TableA.lname =“Santos”);
答案 1 :(得分:0)
您只复制用于将tableB与tableA相关联的列。您不应该复制非主键列的原因:
一个。表大小增加,如果表之间存在重复字段,则会浪费空间。
湾无论要复制的列大小如何,维护表都非常费力,只是为了确保所有重复的列都能正确更新。例如,可以看一个名为detail的重复列。如果在tableA中为特定id更新此列,则需要再次尝试更新tableB中的相应记录。
C。将消耗大量精力,资源,时间和金钱来维护表之间的重复非主键列。