1

J'essaie de développer une application Android où l'utilisateur crée des histoires pour les enfants. J'utilise Sqlite pour créer ma base de données et je veux savoir si ma base de données relationnelle est correcte.Base de données relationnelle sans clé primaire?

  1. la table histoire qui a une id histoire clé primaire et stocke le nom de l'histoire
  2. la table des pages où il stocke les pages de contenu et le numéro et il se rapporte à quelle histoire. mais je n'ai pas une clé primaire

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

Cette question ne semble pas desservir le sujet. Cependant, votre clé primaire pour la table 'pages' devrait être' (page, storyID) '. –

+0

La première forme normale exige que chaque ligne d'une base de données relationnelle possède une clé primaire. Bien sûr, votre table PAGE (au singulier) aura une clé primaire. Vous devez créer une clé de substitution pour chaque ligne si vous n'avez pas de clé candidate naturelle. – duffymo

Répondre

2

Une clé primaire est constitué d'une ou plusieurs colonnes; les valeurs de ces colonnes identifient de manière unique chaque ligne.

Il est illogique qu'une table ne possède pas de clé primaire; ceci impliquerait qu'il ne serait pas possible de distinguer les rangées, c'est-à-dire que l'on pourrait faire quelque chose avec certaines données sur n'importe quelle rangée aléatoire.

Vous avez une clé primaire; vous ne le savez tout simplement pas, et vous n'en avez pas parlé à la base de données.
Dans le tableau pages, le contenu de la page est identifié à la fois par l'ID de l'article et par le numéro de page de l'article. Cela signifie que vous avez une clé primaire composite. Pour obtenir la vérification de l'unicité et un index automatique, vous devez indiquer à la base de données à ce sujet:

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