Database design 数据库设计最佳实践-具有多个引用的链接/连接表
我将成员和人员表与成员\人员链接表以多对多关系链接在一起(列:person\ u id和membership\ u id) 每个人都可以有一个或多个地址、电话和电子邮件。这些存储在单独的表中,例如地址表、电话表和电子邮件表 我现在面临的新情况是,一个人拥有多个会员资格,但他/她更喜欢为每个会员使用不同的地址、电话号码和电子邮件 以下是一个例子:Database design 数据库设计最佳实践-具有多个引用的链接/连接表,database-design,relational-database,Database Design,Relational Database,我将成员和人员表与成员\人员链接表以多对多关系链接在一起(列:person\ u id和membership\ u id) 每个人都可以有一个或多个地址、电话和电子邮件。这些存储在单独的表中,例如地址表、电话表和电子邮件表 我现在面临的新情况是,一个人拥有多个会员资格,但他/她更喜欢为每个会员使用不同的地址、电话号码和电子邮件 以下是一个例子: M1 => P1 => address-1 => phone-1 => Email-1 M2 =>
M1 => P1
=> address-1
=> phone-1
=> Email-1
M2 => P1
=> address-2
=> phone-2
=> Email-2
M3 => P1
=> address-3
=> phone-3
=> Email-3
处理上述问题的数据库最佳实践是什么?我是否应该创建一个单独的链接表,如会员地址、会员电话和会员电子邮件?或者只需将地址、电话号码、电子邮件号码添加到现有的会员人数表中
谢谢:)这称为关联数据—关于两个实体之间关联的数据—您将其存储在关联表中
类似(使用mysql语法):
额外的3列为每个成员定义一个人的联系人实体。这称为关联数据-关于两个实体之间关联的数据-并存储在关联表中
类似(使用mysql语法):
额外的3列定义了每个成员的联系人实体。下面是一个建议 表格:会员人数 复合主键(成员id、人员id、表id、优先级) 字段:
- 成员身份\u id-引用成员身份表
- person_id-引用person表
- table_id-表示电话、地址或电子邮件表作为此行的引用表
- 表\u条目\u id-引用表的主键
- 优先级-此人的首选条目+会员资格+(电话、, 地址(或电子邮件)
- 成员身份\u id-引用成员身份表
- person_id-引用person表
- table_id-表示电话、地址或电子邮件表作为此行的引用表
- 表\u条目\u id-引用表的主键
- 优先级-此人的首选条目+会员资格+(电话、, 地址(或电子邮件)
- 扩展,下面是一个建议
表格:会员人数
复合主键(成员id、人员id、表id、优先级)
字段:
外键(person\u id,address\u id)引用地址(person\u id,address\u id)
谢谢Bohemian,这应该可以解决困惑:)非常感谢波希米亚人的快速回复。今天早上我向团队提出了同样的解决方案,但争论的焦点是这是否正常化。对我来说,它看起来非常好,除了用户希望有两个首选地址而不是一个。这显然需要向表中添加另一个地址id。或者你怎么想?是的-为次要地址添加另一列。此外,通过定义两列外键约束,您仍然可以具有引用完整性,要求关联表中引用的地址属于该行中的人员:外键(人员id,地址id)引用地址(人员id,地址id)
谢谢Bohemian,这应该可以解决混淆:)
create table membership_person (
person_id int not null references person,
membership_id int not null references membership,
address_id int not null references address,
phone_id int not null references phone,
email_id int not null references email,
primary key (person_id, membership_id)
)