我们的房地产应用程序有一个表,事件,历史上通过Event.homes_id列链接到Homes表。
最近,我们第一次添加了一个事件类型,它没有连接到家庭,而是一个房地产经纪人。问题:现在将一个realtor_id列添加到Events表是一种好习惯吗?我内心的东西反叛了每个记录有两列,home_id和realtor_id的想法,其中一列对于任何给定的记录总是为空。我的老板说这很有效,避免了创建新表的开销。这种情况有哪些权利和错误?
上述问题的必然结果:我们不愿意创建新表的部分原因是我们正在使用CakePHP,因此通过SQL连接对多个链接表进行绝对控制变得更加困难。 (将Cake的递归属性设置为最大可将应用程序的速度降低到爬行状态。)使用Cake是否应该影响数据库设计注意事项?或者我们只是与Cake合作错误?
答案 0 :(得分:2)
我的老板说这很有效,避免了创建新表的开销。
这让我感到很沮丧。我认为你需要一个不同的设计。
具体来说,我会考虑拥有房屋和房地产经纪人所拥有的活动。通过重组,您可以避免一两个ID的问题。如果您确实需要,我会将房地产经纪人/房屋事件表示为has_many,反之为多个belongs_to关系。
答案 1 :(得分:2)
我的某些东西反叛了这个想法 有两列,home_id和 每个记录的realtor_id,其中一个 对任何人来说都是空的 给出记录。我的老板说的是 高效并避免开销 创建新表。什么是 这种情况的正确与错误?
嗯,你是对的,它可能效率低于最佳效果。但是,在50%的时间内添加另一列(INT,不少于)将不会影响您的整体数据库效率。
OTOH,您需要花费一些精力来重构您的应用程序。只需添加此列,您就可以有效地进行攻击。我认为这种情况是可以接受的,尽管你可能不喜欢它的美学。嘿 - 没人喜欢黑客。它增加了“技术债务”。但谷歌周围的那个术语,你会看到很多人都在说拥抱技术债务,因为它可以让你继续前进,而不是试图找到完美的解决方案(这将是尽管付出了最大努力,但逃避了你。
这是一个商业决策 - 您的架构和代码库的美学是否值得花费(您的每小时费率*#小时“正确”修复它)?在这种情况下,我会说它可能不是。
答案 2 :(得分:1)
“我们正在使用CakePHP,因此绝对控制变得更加困难” - 为什么?
通过添加其他列,您实际上失去了什么?不是很多。骄傲,也许吧。所有应用程序都在某处妥协,这是一个很小的应用程序。
“(将Cake的递归属性设置为最大值可将应用程序的速度降低到爬行状态。)” - 然后不要使用递归!可容忍的行为可以做得更好,而且您只需要 您想要的数据
。我会添加另一个列,使用可包含进行优化并转移到更重要的内容上。