我有一个数据库,它有以下关系:
Transaction->Purchase->Item->Schedule
Transaction - self explanitory
Purchase - any purchase info that relates to the item being purchased (quantity, if the user purchases more than one item). A given Transaction can have more than one Purchase_ID tied to it.
Item - Stores Item info and relates it to individual clients.
Schedule - determines the price of an item at a given time of day.如果Transaction.TimeStamp在提供的日期范围内,我需要执行一个查询,该查询必须根据时间表选择一系列值。查询需要根据其主键从计划中选择一个值。主键不能从事务中跟踪。
为了解决这个问题,我决定创建一个表,将事务直接链接到调度的主表。
最近我发现了表视图 --这是否是制作表“视图”的合适情况?还是应该创建一个“实际的”表TransactionSchedule
transactionSchedule
Transaction_ID Schedule_ID我的问题是,我不理解表视图何时有用/好处是什么的具体细节。
是否有一个单独的表要跟踪事务->调度过高?
真的,任何关于这个问题的一般性指导都将不胜感激。
编辑:此查询仅用于检索已输入的数据
--谢谢
发布于 2010-01-25 18:48:25
我强烈要求你把价格从时间表上直接抄袭,一旦你插入这个价格,你就马上购买。这样,您已经解决了您的问题,同时,如果您不小心(或有意)更改了计划,您将避免稍后向客户收取不同的价格。
至于与时间表的主键有关的问题,这并不是可从转换中追踪的:这是设计不良的迹象。我的意思是,想想看--你有事务中的时间戳,根据定义,时间表是使用from和to时间戳及时放置的--你为什么不能把它们联系起来呢?AFAICS计划的主键应该是item_id, from_timestamp, to_timestamp
假设您的进度表有一个from和要时间戳,我的查询将是
SELECT ..your columns..
FROM Transaction t
INNER JOIN Purchase p
ON t.id = p.transaction_id
INNER JOIN Item i
ON p.id = i.purchase_id
INNER JOIN Schedule s
ON i.id = s.item_id
AND t.timestamp BETWEEN s.from_timestamp
AND s.to_timestamp至于,你是否应该使用一个视图-真的,这取决于你。视图不会比查询工作得更好或更糟,唯一的区别是定义存储在数据库中。这些方法的主要优点是
发布于 2010-01-25 18:53:16
事务记录不能将外键与计划主键链接起来吗?或者是一段多到多的关系。无论哪种方式,我在这里都不认为视图是合适的。
https://stackoverflow.com/questions/2134664
复制相似问题