三个表——使用级联关系还是添加额外的?
Three tables -- Use cascade relationships or add extras?
我是一名 PHP 开发人员并且具有 MySQL 的基本知识,但我正在从事个人项目,因此必须深入研究它。
帐单详细信息将模仿条纹对象进行存储。但是,我想知道我应该在级联中使用索引还是在每个 table.
上使用它们
让我通过(一个简化的)例子来解释。用户有订阅。每个订阅每月都会产生一张发票。每张发票都会收取一笔费用(如果有些发票失败,则收取几笔费用。)
table_user
- user_id
- username
- password
table_subscription
- sub_id
- start_date
- end_date
- amount
- user_id
table_invoice
- invoice_id
- period_start
- period_end
- amount
- paid
- subscription_id
table_charge
- charge_id
- amount
- status
- failure_code
- failure_reason
- invoice_id
我的意思是我想快速列出每个用户的费用和发票。一个 charge/invoice 属于一个用户。我应该只在订阅上使用 uder_id 密钥(因为费用和发票是相关联的),还是我仍然应该将 user_id 添加到发票和费用 table 中?
SELECT更容易,但如果将来我收费与发票无关(购买一次性额外费用)但与该用户相关。
期待收到一些建议。
简单的答案是使用 'user_id' 作为每个 table 的键。如果你有 MySQL Workbench 你也可以通过按键 link 它们。如果 'user_id' 是用户的唯一标识符,那么它需要出现在每个使用它的 table 上。这样您就没有 table 即 'lost' 并且需要代码或触发器来查找用户。每个 table 只是一个额外的列,值得付出努力。 PHP 会将其用作返回给用户的绝对参考点,您的后台例程也可以。
我还会将用户 ID 和 IP 地址存档几年,以防万一是付款问题,他们关闭了帐户。
我是一名 PHP 开发人员并且具有 MySQL 的基本知识,但我正在从事个人项目,因此必须深入研究它。
帐单详细信息将模仿条纹对象进行存储。但是,我想知道我应该在级联中使用索引还是在每个 table.
上使用它们让我通过(一个简化的)例子来解释。用户有订阅。每个订阅每月都会产生一张发票。每张发票都会收取一笔费用(如果有些发票失败,则收取几笔费用。)
table_user
- user_id
- username
- password
table_subscription
- sub_id
- start_date
- end_date
- amount
- user_id
table_invoice
- invoice_id
- period_start
- period_end
- amount
- paid
- subscription_id
table_charge
- charge_id
- amount
- status
- failure_code
- failure_reason
- invoice_id
我的意思是我想快速列出每个用户的费用和发票。一个 charge/invoice 属于一个用户。我应该只在订阅上使用 uder_id 密钥(因为费用和发票是相关联的),还是我仍然应该将 user_id 添加到发票和费用 table 中?
SELECT更容易,但如果将来我收费与发票无关(购买一次性额外费用)但与该用户相关。
期待收到一些建议。
简单的答案是使用 'user_id' 作为每个 table 的键。如果你有 MySQL Workbench 你也可以通过按键 link 它们。如果 'user_id' 是用户的唯一标识符,那么它需要出现在每个使用它的 table 上。这样您就没有 table 即 'lost' 并且需要代码或触发器来查找用户。每个 table 只是一个额外的列,值得付出努力。 PHP 会将其用作返回给用户的绝对参考点,您的后台例程也可以。
我还会将用户 ID 和 IP 地址存档几年,以防万一是付款问题,他们关闭了帐户。