1

私はユーザーが子供のための物語を作成するアンドロイドアプリケーションを開発しようとしています。私はデータベースを作成するためにSqliteを使用しています。私のリレーショナルデータベースがOKかどうかを知りたいのですが。主キーのないリレーショナルデータベース?

  1. 主キーのストーリーIDを持っていると
  2. にそれがコンテンツやページ数を格納した物語にそれを関連するページテーブルを話者の名前を格納物語テーブル。私は、主キー

    CREATE TABLE story (
        storyID INTEGER PRIMARY KEY, 
        storyTitle TEXT 
    ); 
    
    CREATE TABLE pages (
        page INTEGER, 
        content TEXT, 
        storyID INTEGER 
    ); 
    
+0

この質問はここでは外れているようです。しかし、 'pages'テーブルの主キーは'(page、storyID) 'でなければなりません。 –

+0

最初の通常の形式では、リレーショナルデータベースのすべての行に主キーが必要です。もちろんPAGE(単数)テーブルには主キーがあります。自然な候補キーがない場合は、各行の代理キーを作成する必要があります。 – duffymo

答えて

2

主キーは1つ以上の列で構成されていません。これらの列の値は各行を一意に識別します。

テーブルにプライマリキーがないことは意味がありません。これは、行を区別することができないことを意味する。すなわち、何らかのデータを用いて何かを行うことは、任意の行ので行うことができる。

主キーがあります。あなたはそれを知らないだけで、あなたはそれについてデータベースに言わなかった。
pagesテーブルでは、ページコンテンツはストーリーIDとストーリー内のページ番号の両方によって識別されます。これは、複合主キーがあることを意味します。一意性チェックと自動インデックスを取得するには、このことについてデータベースに伝える必要があります。

CREATE TABLE pages (
    storyID INTEGER, 
    page INTEGER, 
    content TEXT, 
    PRIMARY KEY (storyID, page) 
);