- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
背景:我正在对一组数据进行多次模拟。对于每节课,我都会为学生分配项目。每节课的不同之处在于,我随机安排了学生的顺序,这样所有学生都有机会被分配到他们想要的项目。我在电子表格(即 Excel)中写出一些分配,它基本上看起来像这样(小快照,实际表扩展到几千个 session ,大约 100 个学生)。
| | Session 1 | Session 2 | Session 3 |
|----------|-----------|-----------|-----------|
|Stu1 |Proj_AA |Proj_AB |Proj_AB |
|----------|-----------|-----------|-----------|
|Stu2 |Proj_AB |Proj_AA |Proj_AC |
|----------|-----------|-----------|-----------|
|Stu3 |Proj_AC |Proj_AC |Proj_AA |
|----------|-----------|-----------|-----------|
现在,处理分配的代码当前将 session 存储在一个对象中。下次运行分配时,对象将被覆盖。
因此我真正想做的是存储所有分配结果。这很重要,因为我稍后需要从数据中获取信息,例如:哪个项目 Stu1
被分配到最多或者 Proj_AC
有多受欢迎(它被分配了多少次被分配/ session 数)。
问题:
我可以使用哪些方法来基本上持久地存储此类 session 信息?基本上,每个 session 输出都需要在结束之后和下一个分配周期开始之前将自己添加到存储库中。
friend 建议的一个解决方案是使用 SQLAlchemy
将这些结果映射到关系数据库。我有点喜欢这个想法,因为这确实让我有机会深入研究数据库。
现在我推荐的数据库结构是:
|----------|-----------|-----------|
|Session |Student |Project |
|----------|-----------|-----------|
|1 |Stu1 |Proj_AA |
|----------|-----------|-----------|
|1 |Stu2 |Proj_AB |
|----------|-----------|-----------|
|1 |Stu3 |Proj_AC |
|----------|-----------|-----------|
|2 |Stu1 |Proj_AB |
|----------|-----------|-----------|
|2 |Stu2 |Proj_AA |
|----------|-----------|-----------|
|2 |Stu3 |Proj_AC |
|----------|-----------|-----------|
|3 |Stu1 |Proj_AB |
|----------|-----------|-----------|
|3 |Stu2 |Proj_AC |
|----------|-----------|-----------|
|3 |Stu3 |Proj_AA |
|----------|-----------|-----------|
在这里,有人建议我将 Session
和 Student
列设为组合键。这样我就可以访问特定学生在特定 session 中的特定记录。或者我只能为特定 session 运行整个分配。
问题:
这个想法好吗?
如何使用 SQLAlchemy
实现和查询复合键?
如果没有为特定学生分配项目(如果他想要的所有项目都被采用,数据库会发生什么情况)?在代码中,如果学生没有分配到项目,而不是 proj_id
,他只会得到该字段/对象的 None
。
我很抱歉问了多个问题,但由于这些问题密切相关,我想我会在同一个空间里问他们。
编辑 - 25/03/2010
Student 目前的类结构如下:
class Student(DeptPerson):
def __init__(self, name, stud_id):
super(Student, self).__init__(name, stud_id)
self.preferences = collections.defaultdict(set)
self.allocated_project = None
self.allocated_rank = 0
(Misc.) 它继承自名为 DeptPerson
的类,该类只有 name
和 stud_id
。
因此,当分配函数将分配的项目(由唯一 ID 引用 - Project
是它自己的类)分配给学生(对于单次运行/试验/ session )时,它将反射(reflect)allocated_project
中的值。如果未为学生分配特定运行的项目(因为其他人已经拥有它,mwhahah...抱歉),allocated_project
保持为 None
(这很漂亮对我有用的信息)。
最佳答案
数据的二维展示是一个有两个键的关系数据库表。
在您的示例中,学生 key 和 session key 。
“复合键”是一种您可以忽略的噪音。这没有帮助,也没有必要。复合键并不能很好地解决任何问题,而且会造成很多困难。假装你从未听说过。
我们所做的是引入一个带有简单“标识符”的附加列。这是他们划船的“自动生成的代理键”。为每一行自动生成唯一键是一件好事。复合键是一件坏事。
关于python - 以持久的方式为 Python 存储模拟结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2512609/
在 Rails 中,您可以使用嵌套路由为 has_one 和 has_many 关系创建 RESTful 路由。可以在 Rails Guides 上找到示例 请问有没有什么好的方法可以为habtm关系
我是一名优秀的程序员,十分优秀!