Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 用户书签系统数据库设计_Database_Database Design - Fatal编程技术网

Database 用户书签系统数据库设计

Database 用户书签系统数据库设计,database,database-design,Database,Database Design,我的用户需要为其他人发布的文章、视频、图片添加书签 现在我有一个用户表,一个文章表,一个视频表 我提出了两种存储书签数据的方法 首先,我可以创建三个一对多表 第二种方法是只创建一个表并在其上添加一个category列 使用第一种方法,我可以存储外键以与文章和视频表关联。这对于orm系统来说更容易 第二种方法只需要一个表,但不能存储关系 所以。我应该选择哪一个,还是更好 第三种方式类似于 我使用过同时使用这两种关系的表。为了便于使用,我不喜欢第二种方法。您可能希望尝试另一种方法,很抱歉,没有图片:

我的用户需要为其他人发布的文章、视频、图片添加书签

现在我有一个用户表,一个文章表,一个视频表

我提出了两种存储书签数据的方法

首先,我可以创建三个一对多表

第二种方法是只创建一个表并在其上添加一个category列

使用第一种方法,我可以存储外键以与文章和视频表关联。这对于orm系统来说更容易

第二种方法只需要一个表,但不能存储关系

所以。我应该选择哪一个,还是更好

第三种方式类似于


我使用过同时使用这两种关系的表。为了便于使用,我不喜欢第二种方法。您可能希望尝试另一种方法,很抱歉,没有图片:

USER
UserId

USER_BOOKMARK
UserBookmarkId
UserId
BookmarkAssetId

USER_BOOKMARK_ASSET
UserBookmarkAssetId
UserBookmarkId
AssetType (Title, href, image, caption, tooltip, etc)
AssetStringValue (nullable)
AssetNumberValue(nullable)
AssetByteArray (nullable)
您将得到一个书签,如:

SELECT * AS UserBookmarkLinks
FROM USER_BOOKMARKS ub
INNER JOIN USER_BOOKMARK_ASSETS uba
    ON ub.UserBookmarkId = uba.UserBookmarkId
WHERE ub.UserId = 12345
AND uba.AssetType = "Link"

从那里,您可能有书签类型资源,它告诉您每种类型包含哪些资源,以及它使用的用户书签资源中的哪个字段。这与表格有关,但更接近于规范化。

出于性能和引用完整性的考虑,我更喜欢第一种方法,但这取决于您认为您的系统将如何扩展,即您是否会添加更多可以作为书签的“东西”,只需对我的问题进行简单的演示,但未来肯定会有更多的对象被添加到书签中。是的,这与我的意思相似。用户\u bookmark还需要bookmark\u type,这将用于连接到bookmark\u type\u资产,它告诉您应该为每个书签加载哪些资产。同样,有更多的表,但是如果您使用像Linq这样的东西,导航应该更简单。但最后,你应该使用你最舒服的东西。