Database 简单的来宾列表数据库设计

Database 简单的来宾列表数据库设计,database,database-design,Database,Database Design,DB设计人员的一个问题: 在派对的客人名单中,我们会有主人(组织和参加派对的人)和客人(刚刚参加派对的人) 有两种类型的客人: 带邀请卡的客人:在家里亲自收到邀请卡的客人,以及 无邀请函的客人:需要携带邀请函的客人陪同才能进入派对的客人 据了解,有必要登记第一类客人的地址,因为有必要知道把邀请卡放在哪里。 此外,对于每位客人,都需要知道邀请他们的主人或客人ID 问题是: 我应该创建多少个表? 只有一个,所有的观众都在里面? 两张桌子:一张给主人,一张给客人? 三张桌子:一张给主人,一张给有请柬的

DB设计人员的一个问题:

在派对的客人名单中,我们会有主人(组织和参加派对的人)和客人(刚刚参加派对的人)

有两种类型的客人:

  • 带邀请卡的客人:在家里亲自收到邀请卡的客人,以及

  • 无邀请函的客人:需要携带邀请函的客人陪同才能进入派对的客人

  • 据了解,有必要登记第一类客人的地址,因为有必要知道把邀请卡放在哪里。 此外,对于每位客人,都需要知道邀请他们的主人或客人ID

    问题是:
    我应该创建多少个表?
    只有一个,所有的观众都在里面?
    两张桌子:一张给主人,一张给客人?
    三张桌子:一张给主人,一张给有请柬的客人,另一张给没有请柬的客人

    我在第三个解决方案(三个表)中看到的优点是,我避免了在没有邀请卡的情况下为客人留下空白字段“address”,并且我能够用将要接收他们的邀请卡注册客人的ID


    我很高兴阅读您的意见和想法。

    一个问题总是有不止一个解决方案(好吧,大多数时候都有)。所以你可以用很多方法,一张桌子,两张桌子,或者三张桌子。您可以将所有人放在一个表中,设置host、Invested guest和Bride guest的标志,以及一个“邀请人”字段,该字段指向他被邀请的人的id(在中为host或Invested guest)。 你可以用两张桌子,一张给主人,一张给客人。通过这种方式,您可以将“带来的”客人介绍给受邀的客人,并将所有客人介绍给他们相应的主人。它还使您能够捕获带来的客人的地址,这从来都不是一个坏主意。 您可以使用三张桌子:hosts、guests、guests2hosts。与上面相同,但主机和来宾之间存在多对多关系(在guests2hosts表中),这使您能够邀请来宾参加多个派对。 我想如果你想得更进一步,你可以想出更多可能的DB布局。 创建数据库需要非常仔细地考虑当前的需求和未来可能的需求。许多系统现在运行良好,但由于糟糕的数据库设计,永远无法扩展

    至少五张桌子

    Host
    ----
    Host ID
    Host Name
    ...
    
    Invited Guest
    -------------
    Invited Guest ID
    Invited Guest Name
    Invited Guest Address
    ...
    
    Guest
    -----
    Guest ID
    Guest Name
    ...
    
    Party
    -----
    Party ID
    Host ID
    Party Time stamp
    Party Address
    ...
    
    Party Guest
    -----------
    Party Guest ID
    Party ID
    Invited Guest ID
    Guest ID
    ...
    
    我总是将表的主键(集群键)定义为自动递增的整数或长键

    外键的名称应该很明显。Party Guest表中的Guest ID外键是可为空的外键。被邀请的客人可以邀请客人,但不一定要邀请

    另外两个表格将有助于减少上述五个表格中的重复数量

    Name
    ----
    Name ID
    Name
    
    Address
    -------
    Address ID
    Address
    
    由于一方的来宾可能是另一方的主机,因此这些表可以最大限度地减少数据重复


    您只需将每个名称列替换为名称ID,将每个地址列替换为地址ID。

    好,这里有一个更通用的替代方法:

    person
    -----------
    person_id
    name
    
    event
    -----------
    event_id
    name
    event_begin_datetime
    event_end_datetime
    
    person_event
    --------------
    person_id
    event_id
    role_code <-- use this to indicate which type of guest or host
    invitation_mailed <-- helpful flag which may otherwise be derivable based on role
    
    address
    --------------
    address_id
    other address fields
    
    person_address
    -------------
    person_id
    address_id
    
    event_address
    --------------
    event_id 
    address_id
    
    人
    -----------
    个人识别码
    名称
    事件
    -----------
    事件id
    名称
    事件\u开始\u日期时间
    事件\u结束\u日期时间
    个人活动
    --------------
    个人识别码
    事件id
    
    角色代码谢谢您的快速回答。我知道桌子的数量可以是任意的,但我正在寻找合适数量的桌子,使我能够将主人和客人联系起来,并将客人与“brougth”客人联系起来。您关于使用包含多对多关系的表的想法对于多方来说是非常好的。