🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

2回答

750閲覧

データベースの設計について

退会済みユーザー

退会済みユーザー

総合スコア0

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2019/12/24 11:42

編集2019/12/24 12:55

データベースに更新ユーザーを記録したいと考えており、以下二つの方法で迷っています。皆様はどんな方法でされることが多いですか?
SQLiteを使用します。

目的

書籍テーブル一覧を取得する際に、最終更新ユーザーを取得したい。


検討している方法

  1. 書籍テーブル一覧を取得するときに、IDで紐付いている各テーブルの更新ユーザーIDの中で最後に更新されたユーザーを参照する。

  2. 更新ユーザーIDは書籍テーブルのみに作成し、他のテーブル更新時に、書籍テーブルの更新ユーザーIDをupdateする

テーブル一覧

ユーザーテーブル

  • ID
  • 名前

書籍テーブル

  • ID
  • 更新ユーザーID
  • 更新日

書籍情報テーブル

  • ID
  • 書籍ID
  • 著者
  • ジャンル
  • 更新ユーザーID
  • 更新日

ページ情報テーブル

  • ID
  • 書籍情報ID
  • 文字数
  • 内容
  • 更新ユーザーID
  • 更新日

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/12/24 11:48 編集

実装に着手しているのでしょうか、SQL文で説明されていると頭にすんなり入ってくるのですが、日本語文字情報の羅列では分かりづらいので、せめてER図にしてほしいものですが。あと選択するRDBMS名も示してほしい。
Orlofsky

2019/12/24 11:52

質問のテーブルの定義情報は CREATE TABLE で、各テーブルのデータをINSERTに訂正できると適切なコメントが付き易いかと。
guest

回答2

0

ベストアンサー

書籍テーブルを軸に取得するなら、1はオーバヘッドが高いので2でしょうね。
2ならある程度の負荷分散はされるでしょうから。

あくまで、質問の構成ならという事で、要件は知らないので、感覚的なものですけど、パッと見でテーブル設計には違和感を感じます。
・書籍テーブルの存在価値
・書籍情報テーブルとページ情報テーブルの相互参照

投稿2019/12/24 12:01

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/12/24 12:49

アドバイスありがとうございます。 2という事でやはり情報の重複がなくなるのでスッキリしていいですね。 相互参照はミスでした。
guest

0

書籍テーブルで最新のものを取得するのに、
IDごとに更新日でソートを掛けて最新のものを取得するのって面倒だから、
最新のものしか持たないテーブルと、履歴として過去の更新すべてを持つテーブルとに分ける、
っていう手もあるけどな。
ソートし直すのが苦にならないデータ量かどうか次第。
テーブルを分けられないのであれば、
履歴を管理するカラムを設ける方法もあり。

書籍テーブル(改良案)

  • ID
  • リビジョン番号(0が最新、古いものが1,2,3となる)
  • 更新ユーザーID
  • 更新日

where句でIDを指定した上でリビジョン番号をすべて+1した値にupdateしてから
最新の更新情報をinsert into文で記録するなど。
これなら、最新は常にリビジョン番号0を取得すれば済む。

投稿2019/12/24 11:54

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2019/12/24 12:06

10年くらい前にOracle Database を使った金融システム(みずほではない)ですべてのマスターテーブルと履歴テーブルを分けないというすざましい設計を見たことがあります。テーブル設計の担当者はマスターと履歴を分けることを断固拒否。 あまりにひどいので3ヶ月で降りました。
退会済みユーザー

退会済みユーザー

2019/12/24 12:44

アドバイスありがとうございます。 なるほど履歴テーブルという手もあるのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問