Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 从一个表到另一个表的多个外键_Database_Database Design - Fatal编程技术网

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

Database 从一个表到另一个表的多个外键,database,database-design,Database,Database Design,这是我的表格定义: 用户 身份证 名字 伊萨明 门票 身份证 用户id 管理员id 我的管理员为用户购买票证,我在一个表中有Admin和User,但我必须从票证表中的User表中获取两个外键。 此解决方案是标准的和正常的,还是导致性能低下?是的,完全是标准的。从语义上讲,票证是由它的用户和购买它的管理员定义的,因此听起来你的设计反映了现实(这是一件好事)。这或多或少是标准的,尽管它有点缺陷,因为没有什么可以阻止管理员Id被设置为“用户”Id。(这可以通过编程实现,但最终可能需要触发器。)

这是我的表格定义:

用户

  • 身份证
  • 名字
  • 伊萨明
门票

  • 身份证
  • 用户id
  • 管理员id
我的管理员为用户购买票证,我在一个表中有Admin和User,但我必须从票证表中的User表中获取两个外键。
此解决方案是标准的和正常的,还是导致性能低下?

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

这或多或少是标准的,尽管它有点缺陷,因为没有什么可以阻止管理员Id被设置为“用户”Id。(这可以通过编程实现,但最终可能需要触发器。)

就性能而言,只有在创建票证(必须在用户表中查找并验证用户id)或更新票证(同上)或删除用户(必须确保票证表中的任一列中未使用用户id)时,才真正重要。问题是:这些表有多大,这些操作多久执行一次,以及(如果相关)是否有支持这些查询的索引

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

用户

  • Id—主键。为了避免混淆,可以将其设置为用户\u Id
  • 名字
管理

  • Id——主键,外键为User.Id为了避免混淆,可以将其设置为Admin\u Id
门票

  • Id——为了避免混淆,可以将其设置为Ticket\u Id
  • User\u id--具有User.id的外键
  • Admin_id——具有Admin.id的外键

(管理员是用户的“子类型”)

谢谢您的回复,Select和其他操作的性能如何?我不认为这种设计会导致性能问题。也就是说,它的性能始终取决于您希望查询数据的方式,以及每个表中有多少数据。