数据库设计:多种用户类型的不同字段

时间:2010-11-23 16:50:51

标签: mysql database database-design entity-attribute-value

我正在使用包含

的MySQL 5.0.77构建应用程序

a)不同的用户类型(例如木匠,机械师,......,管道工) b)每种用户类型的不同输入字段,例如,用户选择木匠,并向其提供与该职业相关的字段,其中每个职业的字段不同

我的想法是:

Table: users
user_id
user_name

Table: carpentry
user_id
woodwork_rating
metalwork_rating

Table: plumbing
user_id
central_heating_rating
bathroom_rating

等等......

这似乎不太好,因为我可能最终会在多个具有不同字段的表中存在大量表和用户。

我非常喜欢元标记表的想法(就像我们在Wordpress中看到的那样),以便存储每个用户字段条目,例如

Table: user_info
user_id
field
value

所以我们可以举例如

1 | woodwork_rating |中间
1 | metalwork_rating |先进
2 | woodowork_rating |先进的

我的问题是,如何为多个用户构建一个包含多个字段的数据库,每个用户只填写一个可用字段?

由于

3 个答案:

答案 0 :(得分:1)

表用户:

 UserID: Autoinc PRIMARY KEY
 (More user data columns here)
 UserType: CHAR(5)

表用户类型

 UserType: CHAR(5) PRIMARY KEY
 Description: VARCHAR(50)

表UserRatingList

 UserRatingCode: CHAR(5) PRIMARY KEY
 UserType: CHAR(5) REFERENCES UserTypes
 Description: VARCHAR(50)

表UserRatings

 UserID: INTEGER PRIMARY KEY / REFERENCES Users
 UserRatingCode: CHAR(5) PRIMARY KEY / REFERENCES UserRatingList
 Rating: INTEGER (or whatever you prefer)

UserRatingList表建立了可应用于每种用户类型的评级模式。 UserRatings包含实际评级。我使用CHAR(5)提供可读代码而无需加入Description字段,但如果需要,可以将它们更改为INTEGER。

这种结构也可以适用于每个用户有多种类型;只需使用UserID和UserType创建一个UserTypeLinks附加表。

答案 1 :(得分:1)

我想依靠'迈克的最后答案。 我正面临着这个问题。我正在创建一个具有以下类型的网络

Enterprise {name, mail, adress, etc ...}
Employee {name, mail, branch, jobdescription, etc ...}
Individual {name, mail, surname, age, town, etc...}

怎么样:

表用户

userID (autoincr)
userType
mailadress
password
...    

表格用法类型

typeID
typeName
typeDescr

表企业

entID (autoincr)
userID
field 1
field 2
...

表员工

empID (autoincr)
userID
...

表格个人

indID (autoincr)
userID
...

这对你有意义吗?

答案 2 :(得分:0)

所有字段都是具有相同数据类型的“评级”吗?如果是这样,我喜欢Larry Lustig的解决方案。

或者可能存在不同数据类型的不相关字段?日期,字符串,小数,整数?如果是这样,具有1到1个与用户连接的相关表的第一个解决方案是可以的。只要您不需要在运行时动态添加新字段。