首頁>Database>source

我已经阅讀了以下帖子:

為資料庫建立資料庫 學生,老师和Class程的场景

在學校資料庫中,当學生也可以成為老师時,我是否需要重複資料?

他们都近了,但我都没有.几點:

  • This app will be used by Grade School teachers.
  • A student will never be a teacher, and a teacher will never be a student.
  • In addition to Students and Teachers, there will also be contact info for Admins who are neither students nor teachers.
  • Teachers will always be Users. Admins may or may not be users. (We may store an Admin's name and contact info, but that admin may never have a reason or need to log into the app.)

我的想法是建立一个"人"表:

  • PersonId
  • FirstName
  • LastName
  • Email (NULL if student)
  • PersonType (Enum: 1 = Admin/Teacher, 2 = Student)
  • Other Columns as needed

和另一个表格"密碼":

  • PasswordId
  • PersonId
  • PasswordHash
  • Other Columns as needed

如果某个人也是使用者,則他们將具有"電子郵件"的值以及"密碼"表中的記錄。

我在正確的轨道上吗?

最新回復
  • 5月前
    1 #

    所以這取決於(大多數情况下).它主要依赖的是您的 Teachers有多相似 和 Students 物件.如果它们在屬性(非常相似的列)中具有高度相似性,則它们很可能可以存在於同一表中.如果两个物件之間的差異更大,那麼最好將两个實體归一化為它们自己的表。

    从對應用程式的基本描述中,我猜您会發現(如果不是前期的话,隨着時間的推移) TeachersStudents 實體之間的差異足够大,因此將它们分成自己的表是很有意義的。

    进一步归一化它们共享给 Person的屬性 表格有點主观,您可以自行決定,但以任何方式儲存诸如電子郵件,電话和地址等通用資訊都不是一个壞主意。

    我要過度標準化的一件事是 Passwords 表,因為它可以减少因不規範而引起的自然模糊,並可能在資料庫設計中稍微打開您的攻击載體. (例如,如果有人未经授權获得了對您資料庫的訪問權限,並且拥有名為 Passwords的表 自動顯示该人可能是他们想要妥協的最重要的表。)

  • 5月前
    2 #

    是的,但主键還應包括 PersonType

    然後在每个子表中( TeachersStudents 等),您可以建立相同的主键,這也是 Person上的外键 .這表示1->0..1關係.維兹威兹 该表中的欄位應限製為單个值

    PersonType

  • sql server:查詢由於" ACTIVE_TRANSACTION"而匯致事務日志" tempdb"已满的原因
  • sql server:查詢是否从包含1个或多个警告的sql計划快取中返迴查詢計划?