Mysql 为下面的简单示例设计模式的最佳方法是什么?
对于下面的数据,我一直在使用不同的模式(很多年没有接触数据库),但似乎没有一种模式是理想的Mysql 为下面的简单示例设计模式的最佳方法是什么?,mysql,database,database-design,database-schema,Mysql,Database,Database Design,Database Schema,对于下面的数据,我一直在使用不同的模式(很多年没有接触数据库),但似乎没有一种模式是理想的 A B C D E 1 Included Included Paid Disabled Paid 2 Included Included Paid Disabled Paid 3 N/A N/A N/A
A B C D E
1 Included Included Paid Disabled Paid
2 Included Included Paid Disabled Paid
3 N/A N/A N/A Disabled Paid
4 Included Included N/A Disabled Paid
5 N/A N/A Included Disabled Paid
目前,A-E上有5个附加软件,但可能会扩展,目前还有5个设备1-5个,但还有更多。
软件选项包括、不适用、付费或禁用(未测试)
我最初有逻辑来确定哪个设备在相关软件中有什么选项,但现在有多个接收器将依赖于此信息,因此我希望将其存储在数据库中,并允许其他软件仅提取给定设备类型(1-5)的信息。我建议使用此选项
device
--------
+id
title
...
sw_addon
--------
+id // (PK, CK)
+device_id // (PK, CK, FK from device table)
+addon_name // (PK, CK)
addon_option
...
以这种方式收集数据
device:
-----------------
| id | title |
-----------------
| 1 | device 1 |
| 2 | device 2 |
| 3 | device 3 |
| 4 | device 4 |
| 5 | device 5 |
-----------------
sw_addon:
----------------------------------------------
| id | device_id | addon_name | addon_option |
----------------------------------------------
| 1 | 1 | A | Included |
| 2 | 1 | B | Included |
| 3 | 1 | C | Paid |
| 4 | 1 | D | Disabled |
| 5 | 1 | E | Paid |
| 6 | 2 | A | Included |
| 7 | 2 | B | Included |
| 8 | 2 | C | Paid |
| 9 | 2 | D | Disabled |
| 10 | 2 | E | Paid |
| 11 | 3 | A | N/A |
| 12 | 3 | B | N/A |
| 13 | 3 | C | N/A |
| 14 | 3 | D | Disabled |
| 15 | 3 | E | Paid |
| 16 | 4 | A | Included |
| 17 | 4 | B | Included |
| 18 | 4 | C | N/A |
| 19 | 4 | D | Disabled |
| 20 | 4 | E | Paid |
| 21 | 5 | A | N/A |
| 22 | 5 | B | N/A |
| 23 | 5 | C | Included |
| 24 | 5 | D | Disabled |
| 25 | 5 | E | Paid |
----------------------------------------------
(软件)附加组件和设备之间存在多对多关系。多对多关系本身有一个属性选项_值,该值将是一组枚举的4个值(包括、不适用、付费或禁用(未测试))。 您也可以将此枚举设置为一个单独的选项值表,但这将是一种过度使用 因为这是一个多对多关系,我们需要一个三级表,它将有两个外键(FK)(一个复合外键)-一个FK是设备,第二个FK是插件。这个第三级表还有第三列选项_值,它是我们的关系属性,包含4个值作为其值集。我在下面画了一个小图来说明这个设计-
如果您必须使用代理id而不是复合主键,请至少在(设备id、加载项名称)上添加一个唯一约束。谢谢,非常简单。我不知道复合键,但它们做得很好。