Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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
Sql 使用数据库关系避免冗余_Sql_Database_Relational Database - Fatal编程技术网

Sql 使用数据库关系避免冗余

Sql 使用数据库关系避免冗余,sql,database,relational-database,Sql,Database,Relational Database,我设计了一部电影和电视剧的ERD,这是保密的。我可以给你们一个数据库概述 它有20多个表(稍后将添加更多表),并且它是标准化的。我有一些表,如电影、演员、电视剧演员、导演、制片人等。因此,这些表将包含最重要的信息,并且这些表是相互连接的(通过外键和中间表,如电影演员、电影导演等) 所以情况是这样的 1) 标准的“起始”数据库应该有演员、导演、制作人、音乐作曲家、流派、分辨率类型……由管理员预先填充和定义 2) 对于每个创建个人电影收藏的用户,他将使用所有预定义的数据启动他的数据库,但如果他愿意,

我设计了一部电影和电视剧的ERD,这是保密的。我可以给你们一个数据库概述

它有20多个表(稍后将添加更多表),并且它是标准化的。我有一些表,如电影、演员、电视剧演员、导演、制片人等。因此,这些表将包含最重要的信息,并且这些表是相互连接的(通过外键和中间表,如电影演员、电影导演等)

所以情况是这样的

1) 标准的“起始”数据库应该有演员、导演、制作人、音乐作曲家、流派、分辨率类型……由管理员预先填充和定义

2) 对于每个创建个人电影收藏的用户,他将使用所有预定义的数据启动他的数据库,但如果他愿意,他可以向他的个人数据库添加更多数据。这些更改只会影响他的数据库,而不会影响标准的“启动”数据库(由管理员定义)

3) 管理员应该有一个单独的视图来添加演员、导演、制片人……这将成为标准“启动”数据库的一部分。对该数据库所做的任何进一步更改都将作为更新提供给用户

建议的解决方案

问题


建议的解决方案似乎是,我必须始终为每个用户创建新的数据库,这似乎是不可能的。我的问题是如何操纵建议的解决方案,使我的解决方案有效且可行。我希望通过使用数据库关系来处理这种情况,而不是通过单独的存储。

您不会创建多个数据库,您只需向所有相关表添加ownerId字段-admin将ownerId=0,表示该行是“启动数据库”的一部分,并且新的管理员条目可立即供用户使用

在用户的任何输出中,如果您希望显示起始数据和他们自己的数据,您可以将where(ownerId=0或ownerId=userId)添加到相应的查询中,或者如果他们只需要查看自己的数据,只需要ownerId=userId

据推测,他们将能够在自己的数据或“起始”数据之间创建关系,这种方法应该仍然有效


外键仍然有效,但删除将删除用户数据-基本上,您应该只添加到起始数据,而不是带走,否则您将遇到问题。

您不会创建多个数据库,您只需将ownerId字段添加到所有相关表中-admin将拥有ownerId=0,指示该行是“启动数据库”的一部分,并且用户可以立即使用新的管理员条目

在用户的任何输出中,如果您希望显示起始数据和他们自己的数据,您可以将where(ownerId=0或ownerId=userId)添加到相应的查询中,或者如果他们只需要查看自己的数据,只需要ownerId=userId

据推测,他们将能够在自己的数据或“起始”数据之间创建关系,这种方法应该仍然有效


外键仍然有效,但删除将删除用户数据-基本上,您应该只添加到起始数据,而不是带走,否则您将遇到问题。

如果我正确理解您的任务:以最简单的形式,您只需添加一个额外的表,将userid与artifactid配对--artifact是您拥有的任何东西,actors,电影等,例如演员1203的
A1203
,电影5423的
M5423
,等等。这样,您还可以支持多个用户添加相同的非默认工件,而无需重复。当用户希望从该列表中“删除”项目时,还可以使用-A1203从默认数据库中排除工件(例如,删除Actor 1203)。然后,只需要使用
UNION
和/或
进行适当的连接,除了
逻辑。@tonypdmtr您的意思是为每个工件(如MovieUser、ActorUser等)创建新表,还是只在每个工件表中创建新列(如userId)?不,我的意思是为所有情况创建一个额外的表。显然,所有ID都需要具有相同的形式。如果我正确理解了您的任务:在最简单的形式中,您只需添加一个额外的表,将userid与artifactid配对——artifact是您拥有的任何东西,演员、电影等。例如,演员1203的
A1203
,电影5423的
M5423
,等等。这样,您还可以支持多个用户添加相同的非默认工件,而无需重复。当用户希望从该列表中“删除”项目时,还可以使用-A1203从默认数据库中排除工件(例如,删除Actor 1203)。然后,只需要使用
UNION
和/或
进行适当的连接,除了
逻辑。@tonypdmtr您的意思是为每个工件(如MovieUser、ActorUser等)创建新表,还是只在每个工件表中创建新列(如userId)?不,我的意思是为所有情况创建一个额外的表。显然,所有ID都需要具有相同的形式。