Database 简单的来宾列表数据库设计
DB设计人员的一个问题: 在派对的客人名单中,我们会有主人(组织和参加派对的人)和客人(刚刚参加派对的人) 有两种类型的客人:Database 简单的来宾列表数据库设计,database,database-design,Database,Database Design,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”客人联系起来。您关于使用包含多对多关系的表的想法对于多方来说是非常好的。