如何组织这种情况?两张桌子还是一张?

时间:2018-06-22 15:58:15

标签: php database laravel database-design eloquent

我在会议上有一个注册背景。免费注册只有一个步骤。如果是付费注册,则有两个步骤。

注册的第一步是由用户填写注册表格,然后单击“存储注册”按钮,信息将存储在数据库中,并且注册表的“状态”列始终存储为“我”(不完整)。

如果是免费注册,则没有其他步骤。

但是,如果它是付费注册,则还有另一个步骤。在此步骤2中,用户需要在会议开始日期之前进行注册。支付注册费用后,注册表格的“状态”列将保持值为“ C”(完整)。

疑问:

如果是付费注册,则必须在步骤1之后向用户签发形式发票,然后在步骤2之后(即需要付款后向用户签发发票/收据)。

我的疑问是如何针对开具发票和发票的上下文组织数据库。在每个付费注册中,有必要在用户单击“商店注册”按钮并将所有注册信息存储在db中之后开具形式表,然后在付款后开具发票。必须具有两个模型/表“发票”和“形式表”,并且每个模型/表与注册表具有1对1的关系。还是与注册表相关的1个必需表?

现在,我创建了两个表Proforma和Invoice,这些表与Registration表的关系如下1到1所示,但是我不知道它是否正确。

表结构:

registration columns: id, status, conference_id, user_that_did_registration
proformas: id, proforma_number, registration_id
invoices: id, invoice_number, registration_id

该问题的相关模型:

注册模型:

class Registration extends Model
{
    public function customer(){
        return $this->belongsTo(User::class, 'user_that_did_registration', 'id');
    }

    public function participants(){
        return $this->hasMany('App\Participant');
    }

    public function registration_types(){
        return $this->belongsToMany('App\RegistrationType', 'registration_registration_types');
    }

    public function conference(){
        return $this->belongsTo('App\conference');
    }

    public function proforma()
    {
        return $this->hasOne('App\Proforma');
    }

    public function invoice()
    {
        return $this->hasOne('App\Invoice');
    }
}

形式模型:

class Proforma extends Model
{
    public function registration()
    {
        return $this->belongsTo('App\Registration');
    }
}

发票模型:

class Invoice extends Model
{
    public function registration()
    {
        return $this->belongsTo('App\Registration');
    }
}

1 个答案:

答案 0 :(得分:0)

根据您的描述,您的设计看起来非常接近。由于并非所有注册都具有形式或发票,因此在单独的表中具有形式和发票是有意义的。我只会做一个更改-如果形式与发票之间的关系是真正的一对一,那么您可以将所有字段都放在一个记录中:

Proformas
    ID
    Registration_ID
    Proforma_Number
    Invoice_Number