0

私の質問はデータベースに関するものです - シナリオは次のとおりです。

人々がいつアイテムを借りたかを追跡するアプリがあります。彼らが誰であるか、何を借りたかなどを追跡する既存のテーブルがあります。私がやりたいことは、その人が借りたもの、連絡先情報、返却したかどうかなどを追跡するための別のテーブルを作成することです.

これを行う私の考えは、1人のレコードを保持するSQLで動的テーブルを作成することです。

ジョン・スミス DVD; 2012 年 7 月 12 日。良好な状態で返品されました。等

私はまだ学んでいるので、次のことを知りたいと思いました:

これは可能、実行可能、またはよりスマートな方法がある場合です。

4

3 に答える 3

0

答えはシナリオによって異なります。

「誰が」「何を」(現在) 借りたかだけに関心があり、最後の出現を除いて「いつ」には関心がなく、アイテムのコピーが常に 1 つしかないと仮定している場合は、次のように 1 対 1 の関係を使用できます。

CREATE TABLE Person
(
    PersonId        int IDENTITY(1,1)   NOT NULL,
    Name            nvarchar(30)        NOT NULL,
    Surname         nvarchar(30)        NOT NULL,
    BorrowItemId    int                 NULL FOREIGN KEY REFERENCES Item UNIQUE,
    BorrowDate      datetime            NULL,
    ReturnDate      datetime            NULL,
    ReturnCondition nvarchar(50)        NULL,
    CONSTRAINT PK_Person PRIMARY KEY CLUSTERED (PersonId ASC),
)
CREATE TABLE Item
(
    ItemId          int IDENTITY(1,1)   NOT NULL,
    ItemDescription nvarchar(50)        NOT NULL,
    CONSTRAINT [PK_Item] PRIMARY KEY CLUSTERED (ItemId ASC)
)

各アイテムの複数のコピーがある場合は、 BorrowItemIdのUNIQUEキーを削除して、関係を1 対多に変更する必要があります。万一に備えて;

個人情報を含む貸出および返却アイテムを表示するには:

SELECT PersonId, Name, Surname, ItemDescription, ReturnDate, ReturnCondition
FROM Person INNER JOIN Item
    ON BorrowItemId = ItemId
WHERE BorrowItemId IS NOT NULL 
    AND ReturnDate IS NOT NULL

WHERE 句に PersonId フィルターを追加して、特定の人物を照会できます

日付情報なしでレコードを挿入したり、日付情報はあるが関連する BorrowItemId がないレコードを挿入したりできるため、これは適切な設計ではありません。多対多を使用して履歴データを保持するか (便利な場合があります)、新しいアイテムを借りるたびに update を使用して上書きすることをお勧めします。

于 2013-01-20T23:29:37.307 に答える
0

彼らの連絡先情報は、彼らが誰であるかを追跡するテーブルにリンクできます。

返品用のテーブルをまだ作成していない場合は、借用テーブルの ID を参照し、借用テーブルに、このアイテムが返品されたことを示すフラグを設定することをお勧めします。

すべての情報を照合するために新しいテーブルを作成する理由がよくわかりません。すべての情報をまとめたい場合は、JOINステートメントを準備するときに SQL キーワードを使用することをお勧めします。後でテーブルに情報を保存したい場合は可能ですが、データベース内で重複するだけです。

実行できるさまざまな種類の結合に関するチュートリアル: http://www.w3schools.com/sql/sql_join.asp

于 2013-01-19T16:24:46.513 に答える
0

あなたが説明するようにすることは間違いなく可能です。しかし、それは実際にはあまり良い戦略ではありません。新しいテーブルは、特定の個人に属する行にタグを付ける既存のテーブルの追加の列とまったく同じです。

于 2013-01-19T16:33:48.257 に答える