【问题标题】:Multiple tables for a single foreign key单个外键的多个表
【发布时间】:2019-03-19 06:24:37
【问题描述】:

我目前正在为我的旅游 java web 应用程序创建一个数据库。

只有注册用户可以预订旅游,但可以带几个人。 为此,我分为 User 表和 Guest 表,每个表都有自己的主键。

到目前为止,一切都已设置好,但是在制作 BookRoomDetail 表时,我必须为房间中的哪个位置填写哪个人。当注册用户和来宾都可以填充此插槽时,就会出现问题,并且它们来自 2 个不同的表。

如何为此设置外键(或其他任何内容)?

【问题讨论】:

  • use text, not images/links, for text--including tables & ERDs. 仅将图像用于无法表达为文本或扩充文本的内容。无法搜索或剪切和粘贴图像。如果您提供图像,请包含图例/键/说明。使用编辑功能插入图像。这是一个常见问题解答。在考虑发布之前,请始终使用谷歌搜索您的问题/问题/目标和/或错误消息的许多清晰、简洁和精确的措辞,包括和不包括您的特定字符串/名称,并阅读许多答案。如果您发帖,请使用一个措辞作为标题。

标签: sql database-design


【解决方案1】:

当我遇到您的问题时,您可以在 tblBookRoom 详细信息中为 MainUser 添加一个字段作为外键。并且每当任何用户预订房间时,您都可以在 forwho 字段中添加他/她的主键和访客主键。

 **tblBookRoomDetail**
      ID (Primary key Of Table)
      RoomId 
      For Whom (For MainUser or Guest)
      MainUser (MainUser Primary Key Who is doing this reservation)
      Slot
      FromDate
      ToDate
      BookId

【讨论】:

  • 所以MainUser 的空间将有ForWhom null?
  • @Piro 它也将具有 MainUser 主键。 tblBookRoomDetail中的MainUser主键供参考。
【解决方案2】:

如果您有关系,则无法在其他表的列中插入两个不同的主键值。

您可以在不建立关系的情况下执行此操作。 但这不是一个好的过程,因为如果在这种情况下两个键值相同,您将无法识别实际值。

如果你想实现这个目标,那么你应该有一个表 tblAllUsers,它的主键也是 tblGuest 和 tblUser 的主键,然后你可以将 tblBookRoomDetail 表直接关联到 tblAllUsers。在这种情况下,您可以区分访客用户或注册用户。

可以在 tblBookRoomDetail 中创建两个不同的列,一个用于访客用户,第二个用于注册用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多