日期:2014-05-17  浏览次数:20429 次

面向对象的问题
系统可以让客户和员工登录,但客户和员工的信息差异很大。

数据库设计三个表

客户表 tb_customer(ID,UserID,CompanyName,Contact)
员工表 tb_employee(ID,UserID,RealName,Age)
用户表 tb_user(ID,UserName,PassWord)

我发现一个难题,当一个用户登录时,我无法获取这个用户是客户还是员工

难道让我在客户表和员工表查UserID,用IF判断?

如果用面向对象的思想,如何安排这些对象呢?

------解决方案--------------------
在你的表中加入角色,比如1表示客户,2表示员工,3表示用户……你登陆的时候判断角色。
------解决方案--------------------
能不能在usr表中加个flag字段呢
------解决方案--------------------
第一,你可以安id区分,即将ID的长度设置为不同长度
第二,你可以在登录界面让登录者选择用户类型
------解决方案--------------------
面向对象的思想根本就不存在数据库,更不存在二维关系表...

先把你的业务逻辑理清楚,别去想什么ID什么IF...然后去搜索RBAC的概念和模型...

ps:ASP.NET中的Membership框架就是RBAC模型...
------解决方案--------------------
有必要用三张表吗???

将各自没有的信息空起来不就行了???


------解决方案--------------------
用户是父类,客户和员工是子类。

用户有个标志UserType用来标注是什么类型的用户

如果一个用户要么是员工要么是客户的话
数据库设计的话只需要两个表:客户,员工表
一个视图:用户
两表的主键设计规则不能有重复,而且能通过简单判断区分(例如KH001,YG001这样)

如果一个用户可以是员工也可以是客户的话
数据库设计的话需要三个表:客户,员工,用户表
其中用户和客户,员工有外键关系。
登录时候判断有员工表就是员工,有客户表就是客户,都有就得跳出选择框让用户选择当前身份。