因此,我正在构建一个RC应用程序,它将要求我获取数据。我在Excel表格中有数据,我想将数据加载到sqlite数据库中。但我在设计分贝时遇到了麻烦。
关于raw_data的一些背景知识:
Passage Sheet
P_id,Passage
Questions Sheet
P_id, Q1,Q2,Q3....Q10
Options Sheet
P_id, ?????现在,在选项表中,我感到困惑,因为我有大约200段,每一段都有6-10个问题。
所有问题都是多项选择,有5个选项。
谁能帮我组织我的questions_sheet和options_sheet,以便我可以创建一个数据库。
发布于 2018-06-03 13:08:21
第一件事首先:
所有字符字段都要使用TEXT,包括小字段!在SQLite中,VARCHAR只是幕后文本(如果您想升级到多用户关系数据库管理系统,PostgreSQL也是如此)。
关于风格的注意事项(其他人可能有所不同--但我知道得最好!:- ):
对标识符(表和列名)使用小写,对SQL关键字使用大写(选择、从、按.(&c)使用underscores_to_separate_identifier_parts!对标识符使用单数名称--一个表无论如何都是一个集合,那么为什么要将它多元化呢?如果你对这其中的任何一个都有问题,就会有大量的风格指南(这一个很好),但是如果你选择了一个惯例,那么就坚持它吧!这样生活就容易多了。最后,使用注释工具--在SQLite中,它是不怎么样,但它在那里!只发出CLI客户端命令或SQL语句比搜索docco更容易!
这个模式会让您开始工作(您可以根据特定情况向这些表添加字段)。
通道表:
CREATE TABLE passage
(
passage_id INTEGER PRIMARY KEY, -- this will automatically auto increment
passage_text TEXT NOT NULL, -- could check for a minimum length here!
source_name TEXT NOT NULL, --
ISBN TEXT, -- note, no NOT NULL - a URL doesn't have an ISBN for example
author TEXT -- maybe author not known or it's an institutional website?
passage_date -- if known/applicable.. other stuff...
);如果您有多个作者,您可以有一个author表,然后一个passage_author表作为一个结合实体 (或者joing表--还有其他名称--参见Wiki)。
问题(每个问题都是指自己的文章-这就是FOREIGN KEYs的目的!)
CREATE TABLE question -- or quiz, but I'm keeping it singular!
(
question_id INTEGER PRIMARY KEY,
q_passage_id INTEGER NOT NULL,
question_text TEXT,
CONSTRAINT question_passage_fk FOREIGN KEY (q_passage_id)
REFERENCES passage (passage_id) -- meaningful names are very helpful in error messages!
);对问题的答复(每一备选案文均指其本身的问题和段落):
CREATE TABLE option
(
option_id INTEGER PRIMARY KEY,
o_passage_id INTEGER NOT NULL,
o_question_id INTEGER NOT NULL,
option_number TINYINT, -- CHECK here for < 10?
option_text TEXT NOT NULL,
CONSTRAINT option_passage_fk FOREIGN KEY (o_passage_id)
REFERENCES passage (passage_id),
CONSTRAINT option_question_fk FOREIGN KEY (o_question_id)
REFERENCES question (question_id),
);所有这些都是可用的坐在小提琴上!
https://dba.stackexchange.com/questions/208584
复制相似问题