CREATE TABLE IF NOT EXISTS person (_id INTEGER PRIMARY KEY, personName TEXT, personEmail TEXT, personTypeIndicator INTEGER);
请注意,假设personTypeIndicator对于学生是1-10,对于教授是100。
书籍、章节和节录
CREATE TABLE IF NOT EXISTS book (_id INTEGER PRIMARY KEY, bookName TEXT, room_reference INTEGER NOT NULL REFERENCES room(_id) ON DELETE CASCADE ON UPDATE CASCADE);
CREATE TABLE IF NOT EXISTS chapter (_id INTEGER PRIMARY KEY, chapterName TEXT, bookReference INTEGER NOT NULL REFERENCES book(_id) ON DELETE CASCADE ON UPDATE CASCADE);
CREATE TABLE IF NOT EXISTS excercise (_id INTEGER PRIMARY KEY, excerciseName TEXT, chapter_reference INTEGER NOT NULL REFERENCES chapter(_id) ON DELETE CASCADE ON UPDATE CASCADE);
1条答案
按热度按时间2guxujil1#
第一步是设计数据库,这将从识别数据集开始,这些数据集将转换为包含分组值列表的表。
所以你已经确定了房间,学生?,书籍,章节和节选和教授。这些可能是表的候选项。
表由行组成,每行具有相同的列数。列将保存相同类型的数据,例如。房间名称
Room表,听起来可能没有多少信息,比如房间的号码或名称。为了使到目前为止提到的所有表都变得简单/有效,最好使用id标识符,以便在将房间与其他表关联时轻松有效地识别房间。
因此,您的Room表可以使用SQL沿着以下方式创建:-
学生和教授,因为这些都是人,可能会分享很多相同的信息,那么两者都可以在同一个表中,也许Poeple与其他数据,如姓名,电子邮件等,一列,以表明这个人是学生或教授或其他类型的人。你提到了级别(这可以用来区分教授,例如如果英语的等级是1-10,那么如果等级大于10,那么它可以指示教授)。
所以你的Person表可能是这样的:
书籍、章节和节录
正如你所看到的,这些表格中有一些共同点。
***
_id
**此名称已被使用,因为它可能对Android有用。*
INTEGER PRIMARY KEY
这不仅使列成为主键(必须是唯一的,并自动称为索引),而且在SQLite中,它使列(每个表只有一个这样的列)成为rowid列(最有效的索引)的别名,还允许SQLite为表中的每一行分配唯一的值(每个表)。***
REFERENCES table(column)
**这将创建一个FOREIGN KEY,说明列中的值必须与父(引用)表(列)中的值匹配*
ON DELETE CASCADE
和ON UPDATE CASCADE
,如果父行为UPDATE或DELETED,则所有子行分别为UPDATE或DELETED。这可以简单地维持(又名不是孤儿)。在编写任何代码之前,明智的做法是用一些数据测试上面的结构。您可能需要下载一个SQlite管理工具,如用于SQLite的DB浏览器,Navicat,DB Beaver等。使用这些工具,您可以创建表,用数据加载它们,提取数据等等。
因此,使用您最喜欢的SQLite管理工具,您可以使用上面的SQL创建表,然后使用以下命令加载一些数据:
你可以用途:
查看数据(为简洁起见未显示)。
现在有一些数据,我们可以尝试根据personTypeIndicator(0(没有房间)和1-10(相应的房间))来找出房间中的学生,为了简洁/简单起见,使用房间的_id作为房间#的指示符(你通常会这样做,因为假设_id的实际值是错误的)。
下面的SQL语句可以做到这一点:
结果将是:
为了测试上述查询并显示更新数据的示例,可以使用以下内容:
如果查询现在运行,则:-
如果以上情况适合,那么你应该设计数据库沿着查询。然后,您可以在应用程序中实现设计。