具有多个表外键的数据库表列

时间:2016-03-31 09:05:25

标签: mysql database eloquent schema

让我们考虑三个表:

    1.Companies 
           id
           company_name
           ...
    2. Employees
           id
           employee_name
           ... 
    3. Payment
           id
           pay_by
           pay_to
           ...

现在的问题是,pay_to可以是公司或员工的身份证明(fk)。所以我添加了一个布尔列" is_company"在付款表中。所以我的解决方案是,如果is_company为True,那么其公司否则为其Employee。

但我对这个解决方案不满意。我的意思是我不想要一个具有多表外键的列。我认为有更好的解决方案,但我找不到。请帮助找到更好的解决方案。提前谢谢。

2 个答案:

答案 0 :(得分:2)

根据您使用的与数据库交互的内容,您可以在pay_to前加上字母,e代表员工或c代表公司,但是您不能指定该字段是int等可能导致问题。

另一种选择是使用不同的范围(这显然会限制每个范围的数量),但可以说0-9999999是员工,10000000 +是公司ID。

另一种选择是拥有一个临时表(例如称为收款人),其中pay_to引用该表中的一行,该行为您提供收款人类型,然后是各自表中的收款人ID。 - 编辑 - 您可以创建一个名为payees的表,其中包含payee_id,payee_type,id等列。 payee_id将是一个自动增量列,您可以在payment.pay_to字段中引用该列。 payee_type将是公司/员工,然后id将是company.id或employee.id,具体取决于类型。这意味着使用2个查询而不是使用连接,但除非您可以将公司和员工合并到一个表中,否则任何可能性都是如此 - 这将取决于您在原始问题中详述的其他列。< / p>

它们都不一定是优雅的(并且可能存在,可能还有其他)解决方案,但它们将是我在您的情况下使用的3个!

答案 1 :(得分:0)

根据Ed Wade所说的内容,您可以为所有companies添加1前缀,将所有employees添加前缀为2。这有助于将字段保持为整数,而不限制您可以存储的数字