2010-11-23 100 views
0

我建立使用MySQL 5.0.77包含数据库设计:多用户类型

一)不同的用户类型(例如木匠,机械,...,管道工)
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 | woodwork_rating |中间; 1 | woodwork_rating |高级; 2 | woodowork_rating |高级; 现在的问题是,现在没有办法知道用户1使用哪种木工工艺。是吗? – Dave 2010-11-23 16:56:50

回答

1

表的用户:

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

表UserTypes

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)提供可读代码,而无需加入描述字段,但如果需要,可以将它们更改为INTEGER。

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

+0

这是有道理的,虽然我意识到我的问题是误导。不是所有的用户字段都会被评为等级,但我认为如果我将UserRatingList更改为UserMetaList或UserRate并将其更改为UserMeta,则这将起作用。 – dianovich 2010-11-27 16:07:35

0

是否所有字段都将具有相同数据类型的“收视率”?如果是这样,我喜欢拉里斯蒂格的解决方案。

或者是否有不相关的字段与不同的数据类型?日期,字符串,小数,整数?如果是这样,第一个与用户加入1到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 
...  

表Usertypes

typeID 
typeName 
typeDescr 

表企业

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

Employee表

empID (autoincr) 
userID 
... 

表个人

indID (autoincr) 
userID 
... 

这是否是有意义的吗?