Sql 用于成员资格应用程序的自定义字段数据库设计
我需要设计一个会员申请,需要为多个组织自定义分类数据库 以下是数据集:Sql 用于成员资格应用程序的自定义字段数据库设计,sql,database-design,Sql,Database Design,我需要设计一个会员申请,需要为多个组织自定义分类数据库 以下是数据集: 组织类型1: 姓名、电子邮件、加入年份、年终、角色、地点 组织类型2: 姓名、电子邮件、加入年份、年终、角色、部门、子组织、位置 组织类型3: 姓名、电子邮件、加入年份、年终、角色、识别号 为它设计数据库的最佳方法是什么? 很少有字段项是通用的,很少有特定于组织的,组织类型有限 备选案文1: 成员表-成员id、姓名、电子邮件、加入年份、结束年份、角色 成员组织类型1-成员id,位置 成员组织类型2-成员id、部门
- 组织类型1: 姓名、电子邮件、加入年份、年终、角色、地点
- 组织类型2: 姓名、电子邮件、加入年份、年终、角色、部门、子组织、位置
- 组织类型3: 姓名、电子邮件、加入年份、年终、角色、识别号
- 成员表-成员id、姓名、电子邮件、加入年份、结束年份、角色
- 成员组织类型1-成员id,位置
- 成员组织类型2-成员id、部门、子组织、位置
- 成员组织类型3-成员id、id号
- 成员表-成员id、姓名、电子邮件、加入年份、结束年份、角色
- 成员字段-成员id、字段类型、字段值
- 字段标签-字段类型,字段标签
第二种类型看起来很有希望,但不知道如何将成员表和成员字段与必填字段进行联接操作?如果组织类型有限且很少更改,只需使用一个表:
- 成员表-成员id、姓名、电子邮件、加入年份、结束年份、角色、位置、部门、子组织、id号
我给出了一个类似的答案,尽管它是针对不同的数据库。这是数据库设计中的一个常见问题,有3种最常见的处理方法(如果我们计算EAV,则有4种):
成员
表(这是超类型)和三个附加表,每个子类型一个。这允许您不使用空值,并根据组织类型强制使用哪些列。(这是您的选项1)
org\u type
列。这将意味着
对成员(组织类型,成员ID)
的附加唯一
约束和外键
约束(来自每个子类型表)更改为包含此组织类型
列。大概是这样的:
CREATE TABLE Member
( MemberID
, Org_Type
, Name
, ...
, Role
, PRIMARY KEY (MemberID)
, UNIQUE KEY (Org_Type, MemberID)
, CHECK Org_Type IN (1, 2, 3)
) ;
CREATE TABLE Member_Type_1
( MemberID
, Org_Type
, Location
, PRIMARY KEY (MemberID)
, FOREIGN KEY (Org_Type, MemberID)
REFERENCES Member(Org_Type, MemberID)
, CHECK Org_Type = 1
) ;
and finally there's (your option 2) EAV:
但是请注意,构建一个高效的EAV模型/应用程序并不容易。实际上,您正在数据库中构建RDBMS。请尝试第一个选项。无需干扰EAV(这是第二个选项的名称)@ypercube请帮助我理解其中的区别,哪一个更有效,现在,第二个选项看起来更灵活阅读关于选项2的内容:(这主要是反对它的观点)。下面是“赞成”的观点(别被标题弄糊涂了,它解释了为什么和什么时候可以使用):谢谢,我会研究它们。这会增加很多列的数量,因为每个组织类型的列都很多。同意。没有足够的特定字段来保证拆分。我唯一能建议的是添加一个“组织类型”字段,以便能够轻松筛选结果。然后,您可以使用触发器确保根据类型填写适当的字段,或者在应该填写的时候保持为空。@Masade您只说了4个额外的列。最坏的情况是3个为空;最好的情况是1个为空。最坏的情况是4个为空,最好的情况是2个为空。@ypercube用于组织类型E2,只有“标识号”为空。