让我们假设我有一个班级Student和一个班级ExamRecord。现在ExamRecord使用Student.ID作为数据库中的外键。我应该如何应对前端模型?我是否应该使用组合并将Student类型的对象作为ExamRecord的成员(因此我可以稍后在需要时使用它的ID),或者只声明一个简单的int(假设int是ID的数据类型)并将其用于存储ExamRecord中的学生ID?在班级中使用外键成员的更好方法是什么?整个对象的组成或者只是声明一个变量
回答
- 它是对学生对象的引用,成为ExamRecord 的一部分,而不是副本。
- 找到id并执行查找并不是一个好方法。
- 最喜欢实体框架的对象关系映射(ORM)的,NHibernate的采用这种做法
Ofcourse,当你在数据库中存储这个你需要存储的外键。
我会把它作为int存储在类中。我会尽力解释原因。
在处理数据库时,您试图建模实体之间的关系,就像您的情况一样,您有一个ExamRecord
,它有一个Student
的外键。现在看起来好像它可以(当然可以)直接翻译成程序代码。但是这里有一种语义上的差异,我认为这很重要。
也就是说,如上所述,当您使用关系数据库处理relationships
时,在代码中,您正试图在classes
的帮助下对objects
进行建模。这些objects
确实与其他对象有不同的关系,否则编码将非常困难,并且在OOP中关系是其优势之一。 但是您一定听说过Is a
(inheritance/interfaces)和Has a
(composition),这是讨论OOP关系的常用方法。考试记录是否有学生?
我想我想说的是我的上面的ramblings是数据库中的模型与程序中的模型不同。
它归结为什么是语义,什么是有道理的,什么传达你的代码的意义最好?我说我会用存储学生证的考试记录去,因为对我来说这听起来很奇怪,考试记录has a
学生,但其他方式却非常合理。但是,这又是关于您的计划背景下有意义的事情,只有您可以回答。
我同意丹尼尔菲格罗亚的看法,如果你需要从考试中引用一个学生,那么使用ID听起来很好。
虽然我想挑战这里的前提,在数据库中,您可能必须参考exam
中的student
,但在您的OO代码中,可能会更自然一些:您是否确实不希望每个student
都保留自己的内部列表exam
对象?
这可能是因为你绝对需要能够通过exam
来查找学生,并且你的原因是被迫在原始问题的两个选项中进行选择。如果不是,那么也许考试甚至不需要“知道”它属于哪个学生。
我不是说你应该完全从exam
对象中删除StudentId
- 只是你应该仔细考虑它们之间的关系,然后你应该通过另一个来访问。
有一点不同:我假设student
可以有几个考试,并且对我来说感觉有点“凌乱”,几个考试应该指向同一个学生。如果可能的话,我宁愿在考试中做任何事情,都应该通过那个“拥有”考试的学生来完成。
- 1. 是一个班级成员变量绑定或免费(根据组合)?
- 2. 是否有更好的方法来声明一个对象
- 3. 在循环中只声明一个变量的最快方法是什么?
- 4. 在私人班级成员中,关键字'this'的正确用法是什么?
- 5. 哪个是更好的声明变量的方法?
- 6. 如何声明一个变量的值是一个由JS中的变量组成的对象?
- 7. 这是拥有类级别成员变量的好方法吗?
- 8. 如何知道一个班级的成员是否是一种方法?
- 9. 方便的方法将班级成员带到外部班级或特质?
- 10. 在PHP中只生成和打印整个div的好方法是什么?
- 11. 给予班级成员对其他班级成员的引用
- 12. 如何声明一个包含对外部类的引用的成员变量?
- 13. 在整个班级中使用变量
- 14. 什么是删除PowerShell JSON对象的子成员的更好方法
- 15. shared_ptr抽象基类(成员变量)是一个未声明的标识符
- 16. 用static关键字声明一个对象是什么意思?
- 17. 在C++ 11中通过值捕获成员变量的好方法是什么?
- 18. 如何访问变量而不是重新声明它?或者做这个的另一种方法是什么?
- 19. PHP:声明一个类变量是一个stdClass的对象
- 20. 针对个人班级功能而不是整个班级组
- 21. 什么是在JavaScript中的对象的两个键上声明两个数组的neatets方法?
- 22. 在类或接口中声明常量的更好的地方是什么?
- 23. 你如何让一个块成为一个班级的成员?
- 24. 什么是最好的方法:实例化一个对象或使用指针
- 25. 方法中最终变量声明的作用是什么?
- 26. 什么更好的方法,使一个对象到另一个对象的JavaScript
- 27. 声明一个变量使用的公式或组合变量
- 28. 处理RAII成员变量的正确方法是什么?
- 29. 班级成员是强制性的吗?
- 30. 班级成员分配给无或null或_斯卡拉这是更好的,为什么?