从一个表到另一个表的多个外键

时间:2014-01-02 14:59:41

标签: database database-design

这是我的表格定义:

用户

  • 编号
  • 名称
  • IsAdmin

票务

  • 编号
  • USER_ID
  • Admin_id

我的管理员为用户购买门票,我在桌面上有管理员和用户,但我必须从Ticket表中的User表中获取两个外键。 这个解决方案是标准的还是正常的,还是导致性能低下?

2 个答案:

答案 0 :(得分:0)

是的,完全标准。从语义上讲,票证是由用户定义的,以及购买它的管理员,所以听起来你的设计反映了现实(这是一件好事)。

答案 1 :(得分:0)

这或多或少是标准的,虽然它有些缺陷,因为没有什么可以阻止将Admin_Id设置为“用户”id。 (这可以通过编程方式强制执行,但最终可能需要触发器。)

在性能方面,只有在创建故障单(必须通过在User表中查找来验证用户ID)或更新(同上),或者在删除用户时(必须确保用户ID是不在Ticket表中的任何一列中使用)。问题变成:这些表有多大,这些操作的频率是多少,并且(如果相关)有索引来支持这些查询?

纯粹主义者会像你这样规范你的结构:

用户

  • Id - 主键。为避免混淆,可将此设置为User_id
  • 名称

管理

  • Id - 主键,具有User.Id的外键为避免混淆,可以将其设置为Admin_id

<强>票务

  • Id - 为避免混淆,可以将其设置为Ticket_id
  • User_id - 使用User.Id的外键
  • Admin_id - 使用Admin.Id的外键

(Admin是User的“子类型”。)