我有一些数据库性能问题(还不是一个真正的问题,但我想确保一切都足够好。)
我有大约10个连接的表。有一个主要的对象/表是母亲' of all并包含userID(这些记录是特定于用户的)。所以,如果我想从特定用户的任何表中获取任何记录,我将不得不说5个以上的连接。
我决定避免连接的并发症,所以我将这个userID添加到所有表中。现在,如果我想从特定用户获取特定用户的记录,我将不需要任何连接。
这是否会引起任何问题,这是不好的做法是我的问题。
用于应用程序和数据库的Microsoft技术。
答案 0 :(得分:2)
如果不了解你的联接结构,有点难以说。我从你的问题中得知你有一个表层次结构,如: 客户 - >发票 - >订单 - > OrderItems,(其中 - > = 1到多)并且问题是在OrderItems表中包含sy,customer ID是有问题的,因为没有它,要确定特定订单项的customerID,您必须遍历链获取订单,然后发票以获取客户ID(给予客户ID是客户和发票之间的连接列。)
答案可能是“它取决于”。如果你是纯粹主义者,你可能会避免这种情况,但是如果你经常发现你有一个OrderItem记录,但是你没有得到发票ID。你需要从客户表中找到说“客户地址”,然后可能值得。
要考虑的事情是关系是否是不稳定的,例如无论是否说,发票可以从一个客户转移到另一个客户,或者订单可以从一个发票转移到另一个发票。如果是这种情况,那么您将确保记住不仅要更改发票中的customerID,还要更改该发票上所有订单的customerID以及每个订单中的所有订单项。如果采用完全标准化的方法,则只需要进行1次更新。如果没有,您可以对许多不同的表进行多次写入,具体取决于您进入层次结构的深度以及数据库中多方面的记录数。如果你已经在整个层次结构中洒洒了大量的客户ID,那可能是大量的写入,并且保持所有内容同步可能会让你感到痛苦。
如果正在为你的数据库编写代码的人并不能确切地理解你所做的事情,那么它可能会变成一团糟,我认为这就是为什么人们会倾向于避免它。
我会说是实用的。您经常发现需要遍历层次结构以执行您想要执行的操作,以及您复制的外键是否可能会更改。