2017-05-24 18 views
0

のは、私は今、「ジョン」は「Dictianry」を貸したいと正規化されたデータベース、挿入データ

Students (RollNo, Name) - e.g. (1, "John") 
Books (BookCode, Name) - e.g. (1, "StoryBook"), (2, "Dictionary") 
Loans (RollNo, BookCode) - e.g. (1, 2) 

があるとしましょう。しかし、Loohテーブルには、BookIDとRollNoが必要なため、 を挿入することはできません( "john"、 "Dictionary")。

私のバックエンドFWでは、リクエストごとに1つのクエリに制限されています。

これは、最初に書籍のIDを参照して挿入することなく(2つの別個のSQLを使用して)1つのSQL文でこれを行う方法はありますか?

+0

うーん、この場合は少し奇妙なように動作すると思いますしてみてください?ジョンが辞書を買おうと思っていますが、ジョンとその辞書のIDは買っていないとどう思いますか?あなたは名前で作業するべきではありませんが、必ずIDで作業してください。 –

+0

あなたは正規化されたテーブルを言ってきました。しかし、あなたが言ったようにこれはノーマライズされていないようです。これをBad Table構築と見なすことができます。 –

+0

ケース:誰かが書籍を購入できるウェブサイトと言うことができます。ユーザjohnがセッションに自分の名前を保存するだけでなく、ログインしたとき。彼のIDも保管してください。彼は本を貸すことができる形式にも同じです。本の名前だけを提出する代わりに、本のIDも送ってください。 IDで名前を選択したい場合はありません。 3つのジョンがある場合はどうなりますか?常にユニークなインデックスを使ってものを保存する –

答えて

0

サブクエリを使用することはできますが、それはちょうど挿入のためにちょっと複雑なようです。 RollNoBookCodeの代わりにプライマリキーをNameに変更できますが、それは悪い習慣です。

これを回避するには、学生や書籍をキャッシュすることができます。リクエストごとに1つのクエリに限定されていることは奇妙に思えます。

0

が、これは私はそれはあなたのケース

insert into Loans (RollNo, BookCode) 
    select s.RollNo,b.BookCode from Students s 
    full join Books b on 0=0 
    where s.Name='John' and b.Name='Dictionary' 
+0

FULL JOINは有効ではありませんMySQLの構文私はここでクロスジョインを意味すると思いますか? 0 = 0は、常に真であることを操作するようになります。 –