2017-05-23 10 views
1

私はプログラミングは初めてではありませんが、SQLとデータベースはかなり新しいです。自分の所有するすべての書籍のデータベースを構築/管理したい(そして最終的には自分のビデオゲームや映画でも同じことをやっている)。私はすでに少し設計されたものを持っています。しかし、私は実際にテーブルを作成してデータを取り込む前に、批評、批評、およびポインターを探しています。私の最初のデザインは以下の通りです。個人用ブックデータベースを作成する(sqliteを使用)デザイン批評を探しています

BOOK (
    book_id INTEGER PRIMARY KEY ASC AUTOINCREMENT NOT NULL, 
    title TEXT NOT NULL, 
    active_ind INTEGER NOT NULL DEFAULT 1, 
    read_ind INTEGER NOT NULL DEFAULT 0 
) 

AUTHOR (
    author_id INTEGER PRIMARY KEY ASC AUTOINCREMENT NOT NULL, 
    name TEXT NOT NULL 
) 

FORMAT (
    format_id INTEGER PRIMARY KEY ASC AUTOINCREMENT NOT NULL, 
    format TEXT NOT NULL 
) 

ISBN (
    isbn_id INTEGER PRIMARY KEY ASC AUTOINCREMENT NOT NULL, 
    isbn TEXT NOT NULL 
) 

BOOK_FORMAT (
    book_id INTEGER REFERENCES BOOK (book_id), 
    format_id INTEGER REFERENCES FORMAT (format_id) 
) 

BOOK_AUTHOR (
    book_id INTEGER REFERENCES BOOK (book_id), 
    author_id INTEGER REFERENCES AUTHOR (author_id) 
) 

BOOK_FORMAT_ISBN (
    book_id INTEGER REFERENCES BOOK (book_id), 
    format_id INTEGER REFERENCES FORMAT (format_id), 
    isbn_id INTEGER REFERENCES ISBN (isbn_id) 
) 

私はまだISBN構造体にビットがありません。私はまた、その本の出版日をどこかのデータに追加したいと思っていますが、それが最も適切な場所であるとは必ずしも言えません。私はすべてのポインタに感謝!

答えて

2

あなたがtbl_Publication表を作成し、以下のようなあなたのすべてのテーブルを変更し、tblが表現され、ここですべてのコードをindustand esalyするVoIP音声に従ってくださいよりも、書籍の発行日を追加したい場合は、このテーブル名です

tbl_Book (
    Book_Id INTEGER PRIMARY KEY ASC AUTOINCREMENT NOT NULL, 
    Title TEXT NOT NULL, 
    Active_Ind INTEGER NOT NULL DEFAULT 1, 
    Read_Ind INTEGER NOT NULL DEFAULT 0 
) 

tbl_Publication (
    Publication_Id INTEGER PRIMARY KEY ASC AUTOINCREMENT NOT NULL, 
    Publication_Name TEXT NOT NULL 
) 

tbl_Author(
    Author_Id INTEGER PRIMARY KEY ASC AUTOINCREMENT NOT NULL, 
    Author_Name TEXT NOT NULL 
) 

tbl_Format (
    Format_Id INTEGER PRIMARY KEY ASC AUTOINCREMENT NOT NULL, 
    Format TEXT NOT NULL 
) 

tbl_ISBN (
    ISBN_Id INTEGER PRIMARY KEY ASC AUTOINCREMENT NOT NULL, 
    ISBN TEXT NOT NULL 
) 

tbl_Book_Full_Details(
    Book_FD_Id INTEGER PRIMARY KEY ASC AUTOINCREMENT NOT NULL, 
    Book_Id INTEGER REFERENCES tbl_Book(Book_Id), 
    Author_Id INTEGER REFERENCES tbl_Author(Author_Id), 
    Format_Id INTEGER REFERENCES tbl_Format (Format_Id), 
    ISBN_Id INTEGER REFERENCES tbl_ISBN (ISBN_Id), 
    Publication_Id INTEGER REFERENCES tbl_Publication (Publication_Id), 
    Publication_Date DATETIME 
) 
+0

「tbl」という接頭辞を使用することが標準であると言うリソースを教えてください。さらに、私はオリジナルの設計で持っているほとんどの結合テーブルが必要だと思います。私は複数の書物を多数持っており、一部の本には複数の著者がいます。私の理解からISBNは同じ本の異なるバージョン間で異なります。 –

2

私の答えちょっと漠然としています。なぜなら、あなたのプロフェッショナルな資格情報にデータベースの専門知識を追加するのはちょっとした趣味であろうと、序盤であろうと、このプロジェクトでのあなたの意図がわからないからです。

多くのデータベースシステムは、SQLiteとは異なり、PRIMARY KEYの上にNOT NULLを必要としないことに注意してください。しかし、SQLiteのマニュアルによると、SQLiteはそうです。だから、あなたは物事を変える必要はありません。

本と書式の間、および本、書式、ISBNの間には2つの異なる関係があるようです。私はあなたの意図がここにあるのか分かりません。私はISBNの主題専門家ではありません。 BOOK_FORMATはBOOK_FORMAT_ISBNのサービスを受けていません。

プライマリテーブルに外部キー(REFERENCES制約)が埋め込まれていません。これは私が今までに設計したすべてのデータベースとは異なりますが、私が知っている限り、あなたのケースでは適切かもしれません。一般に、リレーションシップは、これまでのように、リレーションシップが多対多である場合、または三者である場合に、接合テーブルで表されます。多対1の関係を表現する必要がある場合は、その関係のために別のテーブルを作成するよりもエンティティテーブルに埋め込む方が便利です。

あなた自身の時間を評価しない限り、試行錯誤はデータベースを学ぶのに非常に高価な方法です。ダイビングを始める前に理論上の教科書全体を習得する必要はありませんが、少なくとも、あなたのプロジェクトと並行してデータベースの背後にある理論を学び始めることをお勧めします。データベースは、コンピューティングの他の側面と比べて複雑ではありませんが、抽象的な面では少しです。プログラマーがデータベースに踏み込んだ私の経験は、具体的な詳細についてはよく考える傾向がありますが、抽象的な構造全体ではやや不十分です。あなたの経験は異なるかもしれません。

オブジェクト指向モデリングは、多くのプログラマが獲得する、より強力な抽象ツールの1つです。残念なことに、データモデリングとオブジェクトモデリングはしばしば全く異なる思考パターンにつながり、多くのプログラマは、オブジェクトモデリングが非常に有用であったため、データモデリングを正確にマスターするのが困難であることを発見しました。

あなたの学習を助ける別の方法は、他の人があなたの同じ問題を解決した方法を見ることです。数百のサンプルデータベースモデルのライブラリを提供するDatabase Answersという組織があります。利用可能なのはhereです。 「ライブラリ」に移動すると、プロジェクトと重複するいくつかの例が見つかるはずです。しかし、塩の穀物でそれらを取る。ある人のベストプラクティスは、必ずしも他人のプロジェクト目標に合っているとは限りません。

最後に、約7年前に私があなたのクエストに関係するかもしれない質問に答えることを指摘します。それはwhat every developer should know about databasesです。

幸運を祈る!

+0

お返事ありがとうございました!現時点ではこれは私の趣味に過ぎないので、専門的な専門知識は本当に最終目標ではありません。あなたはおそらくISBNの側面について正しいでしょう。私はISBNテーブルが必要ではなく、book_format_isbnテーブルのヌル可能なISBNカラムが必要であると考えています。同じ本の異なるバージョンは、すべて私の理解とは異なるISBNを持っています(そして、いくつかの本はISBNを持たないほど古いものです)。そして、book_formatテーブルを完全に削除することができます。また、データベースについてさらに研究をしていますので、リンクをありがとうございます! –

関連する問題