我正在为给定游戏构建用于交易卡的应用。这意味着,一个用户可以拥有多张卡片,甚至是重复的卡片。这是可能的方法,但我不知道它是否正确(甚至可能):
用户
---------------------------
|id| name | cards_ids |
---------------------------
|20| John | 31, 40, 50, 50|
---------------------------
卡
-------------------------------
|id| name | type |
-------------------------------
|31| Monster31 | Aqua Monster|
-------------------------------
|50| Monster50 | Rock Monster|
-------------------------------
|40| Monster40 | Air Monster |
-------------------------------
如您所见,即使一个用户相同,也可以拥有许多卡。这种重复的外键方法可以正常工作吗?如果相关的话,我将使用Postgres进行
答案 0 :(得分:1)
在设计数据库时,您需要考虑第三种范式。
在这种情况下,您要将卡的数量添加为属性
用户
-----------
|id| name |
-----------
|20| John |
-----------
拥有的卡
--------------------------------
|user_id| card_type_id | count |
--------------------------------
|20 | 31 | 1 |
|20 | 40 | 1 |
|20 | 50 | 2 |
--------------------------------
甚至更好的是,他们应该有自己的ID。即使两张卡是同一张怪物,它们也可以具有不同的属性,例如“近薄荷”或“薄荷”
您的卡片定义应类似于cards_type
,用于定义卡片。但是任何人拥有的卡都是卡,即使是同一张卡,它们的ID也不同,因为是两张不同的卡
------------------------------------------
| card_id | card_type_id | condition |
------------------------------------------
| 1 | 31 | Mint |
| 2 | 40 | Near Mint |
| 3 | 50 | Used |
| 4 | 50 | Mint |
------------------------------------------
然后您需要所有权表来控制谁拥有什么
拥有的卡:
| card_id | owner_id |
| 1 | 20 |
| 2 | 20 |
| 3 | 20 |
| 4 | 20 |