现有三个表:
1.people: peopleNum, firstName, lastName......
2.company: companyNum, company, fullname......
3.account: accountNum, peopleNumOrComapnyNum......请问account表中的peopleNumOrCompanyNum数据源来自于
peoplea表中的peopelNum或companu表中的companyNum,
关联两个外键是不可能的?
请问该怎么建立表及其关系,或者说建表思路根本就不对?
请各位帮忙?

解决方案 »

  1.   

    建表思路没有问题。 一般来说这种情况是如下实现。方法一: 合并 people , company 两表 为 cusomters 表,在同一表中把所有字段都包括进来,然后再加一个字段以标识是 个人还是单位。这样也就可以实现外键了。 优点,可以直接实现 foreign key 。 缺点,存在冗余字段, 如果个人和单位的字段结构相差很多,可能不适用。方法二: 不使用外键约束,直接在你的程序中实现,某些数据库(比如ORACLE,SQL SERVER) 可以直接支持 CHECK 用户自定义约束。 但MYSQL目前还不支持CHECK。 你可以通过触发器来实现。方法三:提取 people , company 两表 公共字段 形成 customer 表 (customerid, customertype,..) 然后 account 可以直接 reference customer (customer id),   people( peopleNum) , company(companyNum) 也同样参数这个表。
      

  2.   

    直接关联是不行的 不能同时references两个表的id你可以参考版主的方法 合并表 你的业务其实公司和人可以一张表 如果一个人有多个公司 你的业务就不能这么设计表结构了
      

  3.   

    你的表account: accountNum, peopleNumOrComapnyNum...... 里面应该还有个角色类别(是属于people或company)的字段,否则,你的表设计就是有问题的了如果有类别字段的,则你上面的3个表的关系中,则peoplea表中的peopelNum或companu表中的companyNum只能通过手工手段来控制了,而不能直接利用数据库自动功能完成(如外键);
    如果想利用外键来直接完成的话,那需要peopleNum、companyNum是来自同一个表的同一字段,这样的话,就要重新组织上面的表结构进行表people和company合并了,当然啦,合并后的表还是得有个类别字段的以区分people或company类型的。
      

  4.   

    当然啦,也可以把account表分成account_people和account_company两个表来处理account的记录,让其分别对应people表和company表了。
      

  5.   

    来自XX或XX
    你这个或有什么规则没,是一行对一行,还是怎么地?
      

  6.   

    1、合并为一个表
    2、强行用sql合并为一个view
    3、取数据后手动合并
      

  7.   

    把account: accountNum, peopleNumOrComapnyNum
    分作两个表分别关联另外两个表不行?
      

  8.   

    还是方法三比较合理!
    这样是不是更好:
    customer表: customerID, customerType, peopleNum, companyNum;
    account表:  accountID, customerID...这种就够就是要处理 peopleNum和companyNum不能同时不为Null.