我正在尝试开发英语应用程序,但是我在数据库上苦苦挣扎,显然我不擅长该数据库。
如果有人可以给我一些光明,我将不胜感激。
有:
第一个应用程序的想法很简单,该应用程序包含在学生登记册中,并放置一个代码,该代码会自动将他移动到与其他人达到英语水平的某个房间,该房间有一位教授,并且该级别使用一本特定的书它有很多章节,并根据章节进行练习。
我的问题是我如何建立一个数据库,房间里有一本书,其中有很多章,而且都有很多练习。...
不知道是否清楚...对不起,我疯了!
感谢您的时间!
第一步是设计数据库,首先要确定将包含分组值列表的表转换为表的数据集。
因此,您已经确定了房间,学生?,书籍,章节以及练习和教授。这些很可能是表的候选者。
表由每行具有相同列数的行组成。列将保存相同类型的数据,例如房间名称。
Room表,听起来好像几乎没有房间的编号或名称信息。为了使到目前为止的所有表都容易/有效,将其与其他表关联时,最好使用id指示符轻松有效地识别房间。
因此,您的Room表可以使用SQL沿着:-]行创建
与其他数据一起使用,例如sa电子邮件等,其中一列表示该人是学生还是教授,或者也许是另一种人。您提到了等级(可以用来区分一位教授,例如,如果英语的等级为1-10,则该等级大于10则表明是一位教授)。CREATE TABLE IF NOT EXISTS room (_id INTEGER PRIMARY KEY, roomName TEXT UNIQUE);
学生和教授,因为他们都是人,可能会共享许多相同的信息,所以两者都可能在同一个表中,也许Poeple
所以您的Person
表可能类似于:-CREATE TABLE IF NOT EXISTS person (_id INTEGER PRIMARY KEY, personName TEXT, personEmail TEXT, personTypeIndicator INTEGER);
书籍,章节和练习
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);
如您所见,整个表中有一些共同点。
_id
此名称已被使用,因为它可能对Android有用。INTEGER PRIMARY KEY
REFERENCES table(column)
ON DELETE CASCADE
ON UPDATE CASCADE
,如果父级为UPDATE或DELETED,则所有子行分别为UPDATE或DELETED。这可以简单地维护(也称为非孤儿)。在编写任何代码之前,最好用一些数据来测试上述结构。您可能需要下载SQlite管理工具,例如用于SQLite的数据库浏览器,Navicat,数据库Beaver等。使用此类工具,您可以创建表,向其加载数据提取数据等。
因此,使用您最喜欢的SQLite管理工具,您可以使用上面的SQL创建表,然后使用:-
加载一些数据。INSERT INTO room (roomName)
VALUES ('Room1') /* _id = 1 */,('Room2') /* _id = 2 */,
('Room3') /* _id = 3 and so on */,
('Room4'),('Room5'),('Room6'),('Room7'),
('Room8'),('Room9'),('Room10'),('Roomxx')
;
INSERT INTO person (personName, personEmail, personTypeIndicator)
VALUES ('Fred','[email protected]',0) /* _id = 1 */,
('Mary','[email protected]',0) /* _id = 2 */,
('Jane','[email protected]',0) /* _id = 3 and so on */,
('Bert','[email protected]',0),('Prof Plum','[email protected]',100)
;
INSERT INTO book (bookname,room_reference)
VALUES ('Book1',1),('Book2',2),('Book3',3),('Book4',4),('Book5',5),
('Book6',6),('Some other Book',7),('Book8',8),('Book9',9),('Book10',10);
;
然后您可以使用:-
SELECT * FROM room; SELECT * FROM person; SELECT * FROM book;
查看数据(为简便起见,未显示)。
现在有一些数据,我们可以根据personTypeIndicator(0(无房间)和1-10(各自的房间))来找出房间中的学生,为简洁起见,将房间的_id用作房间号的指示器(您通常会这样做,因为对_id的实际值进行假设是错误的)。
以下SQL将执行此操作:-
SELECT * FROM book JOIN room ON room._id = book.room_reference LEFT JOIN person ON personTypeIndicator = book._id;
结果将是:-
为了测试以上查询并显示更新数据的示例,可以使用以下内容:-
UPDATE person SET personTypeIndicator = _id WHERE personTypeIndicator <= 10;
如果现在正在运行查询,则:-
如果上面的方法适合您,那么您应该与数据库一起设计查询。然后,您可以继续在App中实施设计。