2

FineMySQLテーブルに派生属性があります。その値は

(CurrentDate - DueDate) * 0.5

CurrentDateおよびDueDateは、の形式でテーブルに格納されDateます。

Fineテーブルの属性にこの式を指定するにはどうすればよいですか?

CREATE TABLE IF NOT EXISTS Loan (
         loanID    INT UNSIGNED  NOT NULL AUTO_INCREMENT,
         BorrowDate  DATE       DEFAULT NULL,
         ReturnDate         DATE       DEFAULT NULL,
         DueDate         DATE       DEFAULT NULL,
--- Fine... What do I write for Fine here-------
         userID    INT UNSIGNED  NOT NULL,           
         itemID    INT UNSIGNED  NOT NULL,      
         PRIMARY KEY  (loanID) ,
         FOREIGN KEY (userID) REFERENCES LibraryUser (userID),
         FOREIGN KEY (itemID) REFERENCES Items (itemID)
       );
4

1 に答える 1

5

mysql で計算列を「そのまま」持つことはできません。

3 つのソリューション:

最初:トリガーを使用する

たとえば、別の列から計算された列を参照してください

2番目:ビューを作成します(Fineはメインテーブルではなく、ビューにのみ存在します)。

ビューには問題なく計算列を含めることができます。

CREATE VIEW v_computedLoan AS
SELECT
loanID, 
BorrowDate, 
ReturnDate, 
CurrentDate,
--etc
(CurrentDate-DueDate)*0.5 as Fine
FROM Loan

3番目:データベースから計算を除外します。これはクエリでのみ使用してください。

EDIT : CurrentDate が CURRENT_DATE() 関数と実際に同じである場合 (そして異なる必要がある場合)、トリガーを使用したソリューションは機能せず、CurrentDate をどのテーブルにも格納しないでください (ただし、ビューで使用することはできます)。

于 2013-01-25T16:41:09.857 に答える