![](/img/trans.png)
[英]MySQL. Primary key in a relational table. Unique id or multiple unique key?
[英][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.