我正在使用包含
的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 |先进的
我的问题是,如何为多个用户构建一个包含多个字段的数据库,每个用户只填写一个可用字段?
由于
答案 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个与用户连接的相关表的第一个解决方案是可以的。只要您不需要在运行时动态添加新字段。