Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何停止冗余_Sql_Sqlite - Fatal编程技术网

Sql 如何停止冗余

Sql 如何停止冗余,sql,sqlite,Sql,Sqlite,下面是我的小SQL表,其中包含电影的续集: CREATE TABLE "films" ( "title" TEXT NOT NULL, "year" INTEGER NOT NULL, "predecessor_title" TEXT NOT NULL, "predecessor_year" INTEGER NOT NULL, "increase" NUMERIC NOT NULL ) 以下是我的一些价值观: Toy Story 2 1999 Toy

下面是我的小SQL表,其中包含电影的续集:

CREATE TABLE "films" 
(
    "title" TEXT NOT NULL,
    "year" INTEGER NOT NULL,
    "predecessor_title" TEXT NOT NULL,
    "predecessor_year" INTEGER NOT NULL,
    "increase" NUMERIC NOT NULL
)
以下是我的一些价值观:

Toy Story 2 1999 Toy Story 1995 28%    
Toy Story 3 2010 Toy Story 2 1999 69%
正如您所看到的,它有些多余。《玩具总动员2》既是一个标题,也是一个前身。如何创建一个没有此功能的表?

您可以:

CREATE TABLE FILMS (
    ID INTEGER NOT NULL PRIMARY KEY
    TITLE TEXT NOT NULL,
    YEAR INTEGER NOT NULL,
    PREDECESSOR_ID INTEGER,
    INCREASE NUMERIC
)
ID是主键

前置电影的ID是前置电影的ID。可以为null,因为该系列的第一部电影没有前置版本


增加就是增加。可以为空,因为第一部电影没有增加。

使用ORM(Hibernate)工具进行设计时,如下所示:

@Entity
public class Films{
@ID
@GeneratedValue
int id;

@NotNull
String titleText;

@NotNull
Integer year;

@JoinColumn
Film film;

Integer increase;

}

这看起来很酷。在这里,您可以在
胶片中保留对先前版本的引用否,无论是否没有前置程序。那么它将是空的

您想要的输出是什么?任何不冗余存储的方法。我可以有多个表。我可以使用标题吗?@lanardo否,因为它们不一定是唯一的。但是,您可以将一个表连接到它本身,或者使用WITH RECURSIVE将
前置\u id
返回,直到没有一个。SQLite的ORM选项是ORMLite,如果他想查看: