问题:
学生有母亲,父亲,姐姐和哥哥。如果学生的父母职业是老师,我想通过从后端表获取数据来在UI中生成树。为此,我创建了一个表来存储学生信息,例如学生ID(pk),学生姓名,性别,地址,父亲,母亲,父亲职业,母亲职业等。此外,我在UI中添加了一个选项(复选框)发现学生的相对职业是教师与否。如果checkbox为true,则占用列将更新值true或1。
为此,一个表是否足够或需要多个表?另外,如果所有在一个表中,查询应该如何,以及如果需要在单独的表中维护,查询应该如何。
答案 0 :(得分:0)
这个架构有很多选项,但是为了将来的扩展,我会使用层次结构类型表,然后是层次结构中涉及的人员的属性表。这将允许您在同一结构中跟踪学生/教师关系(具有正确的属性)。
表1将保存您的分层信息,这将是您的员工之间的关系:
id | parent_id | other_relationship_attributes
表2将保存有关个人的信息:
id | occupation | gender | etc..
然后,您可以编写可以遍历层次结构的查询,并从个人表中提取相关信息。
如果您的学生信息与您的父信息(可能)非常不同,那么第二个表就可以分成两个表。 1为您的学生和一个为父母。
在SQL中看起来像这样的一个例子,回答问题"向我展示他们的父母都是老师的所有学生:
SELECT
student.id,
student.name,
CASE WHEN student.gender = 'F' THEN 'Daughter' ELSE 'Son' END as child_relationship
parent.id,
parent.name,
parent.occupation,
CASE WHEN parent.gender = 'M' Then 'Father' ELSE 'Mother End as parent_relationship
FROM
person as student
INNER JOIN hier on student.id = hier.id
INNER JOIN person as parent on hier.parent_id = parent.id
WHERE
parent.occupation = 'Teacher'