我是数据库设计的新手。 我正在构建一个小型的asp.net mvc Web应用程序,其中有各种类型的用户可以登录该网站。
所以表结构是,
用户表 用户ID(PK),用户名,密码,电子邮件,角色等
员工表: Eid(PK),用户ID(FK),名字,加入日期等
客户表: Cid(PK),用户ID(FK),名字,公司名称等
用户 - 员工表之间存在一对一的关系 和用户 - 客户表。
一般用户,只有“用户”表中的详细信息。
这是一个正确的设计吗?
答案 0 :(得分:7)
用户 - > UserTypes
Users表将有一个type_id,它将是UserTypes表中字段的PK。
用户
UserTypes
输入未注册
SELECT users.name, users.email, users.typeid, usertypes.type
FROM users LEFT JOIN usertypes ON (usertypes.id = users.typeid)
WHERE (users.id = 1)
返回: Jonathan Sampson,foo @ bar.com,1,未注册
用户 - > UsersToTypes - > UserTypes
如果用户需要具有多种类型的容量,您将引入第三种类型:
UsersToTypes
因此,如果用户同时是type1(Customer)和type2(President),那么UsersToTypes中将有两条记录:
我不会将公司名称放在users / clients表中。如果您的数据库中有许多代表,您最终会有多次存在该名称。而是创建一个存储以下内容的Companies表:
这样,如果公司进行了更改,则无需编辑clients表来更新其名称。您可以在正确的表中更新其详细信息,然后全局更新。
当然,如果每个公司有多个销售代表,则需要创建一个类似于UsersToTypes的RepsToCompanies表。