将模型分解为 sql 个表格问题
Breaking down model into sql tables issue
并且每个客户都有基本信息(name, age, address)
,并且网站提供的解决方案很少,目前只有 1 个,将来可能会是 2 个或 3 个(不是很大的东西)。
目前网站提供的一种解决方案是:
PaymentSolution
现在 PaymentSolution 有自己的服务:
PersonalPaymentService
OfficePaymentService
这两个服务都有 active
参数,可以是 true/false
每项服务有 3 种付款方式,也可以是 active
true/false
例如:
PersonalPaymentService(active true)
paymentType startPaymentDate(date value) finishPaymentData(date value) active(boolean)
apartment payment 1/1/2018 1/1/2019 true
car payment 1/1/2018 1/1/2019 true
jetSki payment 1/1/2018 1/1/2019 false
OfficePaymentService(active false)
paymentType startPaymentDate(date value) finishPaymentData(date value) active(boolean) contactEmail(string value)
office payment 1/1/2018 1/1/2019 true john@rentOffice.com
computers payment 1/1/2018 1/1/2019 false john@rentComputers.com
我正在尝试弄清楚如何将这种信息结构建模到 sql 表中,有人可以提供一些指导吗?
我很难将其分解为正确的关系并使该模型能够在未来扩展到更多解决方案
我希望能够执行的查询类似于:
give me PersonalPaymentService data for customer id 35.
give me OfficePaymentService for account id 43.
give me all data for customer id 67
任何事情都可以提供帮助!谢谢!
我认为您应该根据您的评论重新审视您的设计,
for example give me all PersonalPaymentService data for customer id
35. or give me OfficePaymentService for account id 43...or of course give me all data for customer id 67
我认为 PersonalPaymentService 和 OfficePaymentService 是数据的逻辑表示,您实际支付的只是您描述的 6 种类型。
如果你想保持你的 table 干净,如果你使用你的 mysql 作为数据存储,我会说只创建一个 table 就像
CustomerID, PaymentType, StartPaymentDate, EndPaymentDate
其中 PaymentType 仅属于 6 个子类型。
并使用您的逻辑程序(PHP、Java 等等)将付款分为办公室和个人类型。
使用此架构的优势在于,如果您将来决定引入另一种支付类型,则不需要对架构进行任何更改。
但是,如果您的约束是 SQL 应该回答您的查询,无论是个人付款还是办公室付款,理论上您可以引入另一种类型(列),称为 PaymentCategory,它具有个人或办公室付款。
如其他 post 中所述,创建一个 table 并向该 table 添加类型鉴别器列是目前更好的方法。此外,针对一个 table 编写查询也很容易。在某些情况下,您必须在案例列中添加具有特定于该类型的某些数据(列)的新类型,例如 contactEmail
,稍后您可能会得到一个包含很多列的 table 并且大多数其中有空值。
在那些类型的情况下创建一个 table(PaymentService
) 具有公共列并为每种类型创建单独的 table (PersonalPayment,OfficePayment etc..
) 然后添加外键保持与公共 table 和每种类型 table 的一对一关系的约束可能是更好的 solution.Writing 查询,与以前的方法相比并不容易,并且需要连接类型 table 与常见的 table.
其他选项是为每种类型创建单独的 table。
并且每个客户都有基本信息(name, age, address)
,并且网站提供的解决方案很少,目前只有 1 个,将来可能会是 2 个或 3 个(不是很大的东西)。
目前网站提供的一种解决方案是:
PaymentSolution
现在 PaymentSolution 有自己的服务:
PersonalPaymentService
OfficePaymentService
这两个服务都有 active
参数,可以是 true/false
每项服务有 3 种付款方式,也可以是 active
true/false
例如:
PersonalPaymentService(active true)
paymentType startPaymentDate(date value) finishPaymentData(date value) active(boolean)
apartment payment 1/1/2018 1/1/2019 true
car payment 1/1/2018 1/1/2019 true
jetSki payment 1/1/2018 1/1/2019 false
OfficePaymentService(active false)
paymentType startPaymentDate(date value) finishPaymentData(date value) active(boolean) contactEmail(string value)
office payment 1/1/2018 1/1/2019 true john@rentOffice.com
computers payment 1/1/2018 1/1/2019 false john@rentComputers.com
我正在尝试弄清楚如何将这种信息结构建模到 sql 表中,有人可以提供一些指导吗?
我很难将其分解为正确的关系并使该模型能够在未来扩展到更多解决方案
我希望能够执行的查询类似于:
give me PersonalPaymentService data for customer id 35.
give me OfficePaymentService for account id 43.
give me all data for customer id 67
任何事情都可以提供帮助!谢谢!
我认为您应该根据您的评论重新审视您的设计,
for example give me all PersonalPaymentService data for customer id 35. or give me OfficePaymentService for account id 43...or of course give me all data for customer id 67
我认为 PersonalPaymentService 和 OfficePaymentService 是数据的逻辑表示,您实际支付的只是您描述的 6 种类型。
如果你想保持你的 table 干净,如果你使用你的 mysql 作为数据存储,我会说只创建一个 table 就像
CustomerID, PaymentType, StartPaymentDate, EndPaymentDate
其中 PaymentType 仅属于 6 个子类型。
并使用您的逻辑程序(PHP、Java 等等)将付款分为办公室和个人类型。
使用此架构的优势在于,如果您将来决定引入另一种支付类型,则不需要对架构进行任何更改。
但是,如果您的约束是 SQL 应该回答您的查询,无论是个人付款还是办公室付款,理论上您可以引入另一种类型(列),称为 PaymentCategory,它具有个人或办公室付款。
如其他 post 中所述,创建一个 table 并向该 table 添加类型鉴别器列是目前更好的方法。此外,针对一个 table 编写查询也很容易。在某些情况下,您必须在案例列中添加具有特定于该类型的某些数据(列)的新类型,例如 contactEmail
,稍后您可能会得到一个包含很多列的 table 并且大多数其中有空值。
在那些类型的情况下创建一个 table(PaymentService
) 具有公共列并为每种类型创建单独的 table (PersonalPayment,OfficePayment etc..
) 然后添加外键保持与公共 table 和每种类型 table 的一对一关系的约束可能是更好的 solution.Writing 查询,与以前的方法相比并不容易,并且需要连接类型 table 与常见的 table.
其他选项是为每种类型创建单独的 table。