【问题标题】:Relational database without primary key?没有主键的关系数据库?
【发布时间】:2017-01-15 16:03:24
【问题描述】:

我正在尝试开发一个 android 应用程序,用户可以在其中为孩子们创建故事。我正在使用 Sqlite 创建我的数据库,我想知道我的关系数据库是否正常。

  1. 具有主键故事 ID 并存储故事名称的故事表
  2. 它存储页面内容和编号并将其与哪个故事相关联的页面表。但我没有主键

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

【问题讨论】:

  • 这个问题似乎与这里无关。但是 - pages 表的主键应该是 (page, storyID)
  • 第一范式要求关系数据库中的每一行都有一个主键。当然,您的 PAGE(单数)表将有一个主键。如果您没有自然候选键,则应为每一行创建一个代理键。

标签: sqlite database-design primary-key composite-primary-key


【解决方案1】:

主键由一列或多列组成;这些列中的值唯一标识每一行。

表没有主键是没有意义的;这意味着无法区分行,即,可以在任何随机行上对某些数据进行处理

你有一个主键;你只是不知道,也没有告诉数据库。
pages 表中,页面内容由故事 ID 和故事内的页码标识。这意味着您有一个复合主键。要获得唯一性检查和自动索引,您应该告诉数据库:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2020-10-03
    • 1970-01-01
    • 2020-06-16
    • 2014-07-09
    相关资源
    最近更新 更多