【问题标题】:Rails 3 Is it Bad Practice To Imply A User Role?Rails 3 暗示用户角色是坏习惯吗?
【发布时间】:2012-10-02 04:42:57
【问题描述】:

我有一个用户表,其中教师和学生之间存在自我参照关系。目前,学生通过instructor_id foreign_key 与他们的导师相关联。学生永远有导师,而导师永远不会是学生。

话虽如此,就授权而言,如果用户的instructor_id 字段具有值,是否可以简单地确定用户是否是学生,反之亦然?还是我应该明确定义用户角色?

【问题讨论】:

    标签: ruby-on-rails-3 conventions user-roles


    【解决方案1】:

    首先,我会尝试找到一些方法使其不自引用。也许通过只制作一个persons表并有一个单独的表作为链接(users.instructor_id链接到instructors,其中有instructor_id和user_id字段,instructors.instructor_id在users.instructor_id中使用,然后你可以查询 SELECT * FROM users WHERE EXISTS (SELECT * FROM instructors WHERE instructors.user_id = users.user_id) 以获取当前教师的列表),或者最好的情况是有一个学生表和一个教师表。

    如果您确定没有讲师会有讲师 ID,那么我相信您应该能够通过该字段为空(或默认值为 -1)来检查用户是否是学生。

    我建议将您的表结构重建为非自引用的,从长远来看,当教师被分配给另一名教师或学生出于某种原因进行教学时,它将对您有所帮助。

    【讨论】:

    • 属于讲师的讲师和被代表为讲师的学生将不会是我要迎合的东西,因为这会给我的特定问题域极少发生的情况带来很多不必要的复杂性。就我的问题而言,我知道它可以这样做(正如你所说的检查默认值)我想知道的是它是否应该这样做,或者更重要的是我应该有另一种方式这样做。
    • 不,不应该这样做。它的第一部分是使它不是自引用的两种方法。如果是我,我会用用户表、教师表(包含对用户的引用以及与教师相关的重要信息)和学生表(包含对用户的引用以及重要信息)来重建它与学生相关。
    • 哦,我明白你现在在说什么了,我喜欢解耦的想法,但我不知道这是否适合我的问题域,因为教师和学生共享相似的数据结构他们唯一不同的地方是授权方面。不过,您确实回答了我的问题,不应使用隐含的角色。
    猜你喜欢
    • 1970-01-01
    • 2023-01-05
    • 2013-07-17
    • 2016-03-16
    • 1970-01-01
    • 2019-08-05
    • 2022-12-04
    • 2023-01-12
    • 2010-10-16
    相关资源
    最近更新 更多