簡體   English   中英

[MySQL]:表格視圖或實際表格。 (跟蹤主鍵)

[英][MySQL]: table view or actual table. (tracing a primary key)

我有一個具有以下關系的數據庫:

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是否在提供的日期范圍內,從Schedule中選擇一系列值。 查詢需要根據其主鍵從Schedule中選擇一個值。 無法從事務中跟蹤主鍵。

為了解決此問題,我決定創建一個表以將Transaction DIRECTLY直接鏈接到Schedule的主表。

最近,我發現了表視圖 -將表做成“視圖”是否合適? 還是應該只創建一個“實際”表TransactionSchedule

transactionSchedule
Transaction_ID    Schedule_ID

我的問題是我不了解表視圖何時有用/有什么好處的細節。

是否有一個單獨的表來跟蹤事務->計划過度?

確實,任何有關此問題的一般指導將不勝感激。

編輯此查詢僅用於檢索已經輸入的數據

- 謝謝

我強烈建議您在插入價格后立即將價格從時間表直接復制到購買。 這樣,您已經解決了您的問題,並且同時避免了以后(如果您不小心(或有意)更改計划)向客戶收取不同的價格。

至於進度表的主鍵,這不能從翻譯中追溯到:這表明設計不良。 我的意思是,考慮一下-您有一個事務處理中的時間戳,使用“從”和“至”時間戳將定義的時間表放在時間上-為什么您不能將它們關聯起來? item_id, from_timestamp, to_timestamp計划的主鍵應為item_id, from_timestamp, to_timestamp

假設您的時間表表具有從和到的時間戳,我的查詢將是

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

至於,是否使用視圖-確實,這取決於您。 視圖的工作原理並不比查詢更好或更差,唯一的區別是定義存儲在數據庫中。 其主要優點是

  • 人們可以重復使用定義,而無需復制查詢(並將其弄亂),
  • 您可以在某種程度上更改模式並將其隱藏在應用程序中,前提是您相應地更新了視圖(后者的優勢通常被高估了)

事務記錄中是否沒有與計划主鍵鏈接的外鍵? 還是多對多關系。 無論哪種方式,我在這里都看不到適當的視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM