2011-06-10 28 views
0

我们目前有一个对象(用户),用于存储学生,老师或家长。如何模拟父母用户

User { firstName not null, lastName not null, gender, firstName2, lastName2 } 

Student John is represented as ("John", "Williams", "M", null, null) 
Teacher Patrick is represented as ("Patrick", "Gold", "M", null, null) 
Parent Josh/Cindy of student John is represented as ("Josh", "Mason", "M", "Cindy", "Crawford") 

我们无法建立一个学生没有父亲的用例。我们应该如何建模?

回答

0

你可以做一个表用户

  • ID(INT)
  • USER_NAME(CHAR)
  • PARENT_ID(INT - FK到ID,NULL)
  • 作用(ENUM('父','student','teacher'))//是独立的

学生,老师和家长都是用户。 Parent_id引用创建学生和父母之间的连接。你甚至可以创建一个从parent_id到id的同一个表的外键,但是默认情况下为NULL,所以一个学生可能没有父亲而存在。

+0

父母,学生关系在这里不是问题。如果学生没有父亲,你会填写firstName,lastName(他们不是空值)。但试图在这些领域储存母亲的名字可能没有意义。 – Joe 2011-06-10 10:31:39

+0

我正在向你提出另一种结构,即你所拥有的结构,与之无关。 – 2011-06-10 10:39:17

+0

不确定我是否得到了你,但我的问题仍然存在,你如何解释一个父亲不在的情况,它只是学生的母亲。你可以给我一些样本,理解 – Joe 2011-06-10 11:24:47

3

在我看来,你并没有告诉我们一切。据我所知,从您的数据中,您的数据库不能指望教师的学生。而关于父母的数据似乎并没有记录他们是谁的父母

我的建议:从关于角色和关系的信息中解开有关身份的信息。为每个人分别使用不同的表格 - 一个用于标识,一个用于角色(如果必须),另一个用于关系。

此外,请考虑一位教师是否也可以是家长,以及一名学生是否可以成为家长。 (这两种都是现实世界中可能的)。

+0

道歉,不知何故错过了用户输入的枚举,告诉你用户是否是学生,家长,老师。 – Joe 2011-06-10 11:22:15

+0

老师也可以成为一名家长(但将永远像老师一样对待),他们的孩子正在一所学校学习。学生不能成为父母。 – Joe 2011-06-10 11:22:58