在浏览9gag.com时,我想到了一个想法(问题)。让我们说我想创建一个网站,用户可以在其中添加不同类型的条目。现在每个条目都是不同的类型,需要不同的/附加列。
让我们说我们可以添加:
现在以上所有都是条目并且有一些共同的列(如id,add_date,adding_user_id等等)和一些不同/附加(例如:只有flash游戏需要描述或者只有图像需要plus_18列到被指定)。问题是我应该如何组织数据库/代码来控制上述所有条目?我可能想订购它们,或者通过add_date等搜索条目......
出现在我脑海中的想法:
那么解决这个问题的最佳方式是什么?
答案 0 :(得分:1)
父表似乎是最佳选择。
// This is the parent table
Entry
ID PK
Common fields
Video
ID PK
EntryID FK
Unique fields
Game
ID PK
EntryID FK
Unique fields
...
查询的外观在很大程度上取决于查询的类型。例如,要获得按特定日期排序的所有游戏,查询将类似于:
SELECT *
FROM Game
JOIN Entry ON Game.EntryID = Entry.ID
ORDER BY Entry.AddDate
要按日期排序所有内容,将会有些混乱。例如:
SELECT *
FROM Entry
LEFT JOIN Game ON Game.EntryID = Entry.ID
LEFT JOIN Video ON Video.EntryID = Entry.ID
...
ORDER BY Entry.AddDate
如果您想运行上述查询,我建议您为主键字段(即VideoID
和GameID
)指定唯一名称,这样您就可以轻松识别出哪种类型的条目了重新处理(通过检查GameID IS NOT NULL
)。
或者您可以在Type
中添加Entry
字段。