我是最近的大学毕业生,也是软件开发的新雇员。事情最近有点慢,所以我得到了一个数据库任务。我的db技能仅限于使用Rails和Django的宠物项目。所以,我对我最近的任务感到有点惊讶。SQL效率参数,添加一列或通过查询解决?
我的经理已要求我为Person创建一个'Parent'表,并在Person表中添加对其管理员的引用。当托管人(不是父母)是FormContact时,这是为了方便从父母到母亲。
这是我正在使用的sql-db的简化模拟结构。如果我有权访问Visio,我会绘制关系表。
我们有一张桌子'人',我们有一个'表'的表。有一个表格'FormContact',它将一个人与一个表格联系起来,并不是所有的人都与一个表格有关。有人际关系关系表(雇主,家长等)
我问过,“为什么不能通过查询处理?”回应,效率低下。 (真的!?!)
所以,我问,“为什么不引用表单?这样会更有效率,因为您不会使用child/custodian引用查询FormContacts表。回应,这基本上会使Parent成为FormContact。 (足够公平)
我继续写了一个查询,从非FormContact Parent获取到Form,并在生产服务器上进行了测试。响应时间是即时的。 SOME_VALUE是Parent的fk ID。
SELECT FormID
FROM FormContact
WHERE FormContact.ContactID
IN (SELECT SourceContactID
FROM ContactRelationship
WHERE (ContactRelationship.RelatedContactID = *SOME_VALUE*)
AND (ContactRelationship.Relationship = 'Parent'));
如果我是正确的, “这是一个不必要的变化。”我应该怎么做,捍卫我的立场,还是应该向经理人提出要求?
如果我错了。我的错误是什么?有没有比经理更好的解决方案?
你到底在问什么?您反对系统的哪一方面? – 2010-03-29 14:07:20
我不明白SQL查询如何低效。尤其像这样简单。另外,我没有看到如何创建子类和列,这会导致另一个SQL查询更高效。两个查询之间的唯一区别是一个使用子查询,另一个使用fk ID。 – sanscore 2010-03-29 14:13:49
您的查询适用于给定的SOME_VALUE,请编写一个查询以处理来自FormContact的所有行,就像报表一样。 – 2010-03-29 14:14:26