Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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_Database Design - Fatal编程技术网

Sql 您能并且应该在表中存储表名吗?

Sql 您能并且应该在表中存储表名吗?,sql,database,database-design,Sql,Database,Database Design,我正在创建一个应用程序,其中一个用户将监视另一个用户的进度。这个监视器可以随着时间的推移而改变,所以我想建立一个记录过程。每个受监控的用户都会有一组与之相关联的注释,未来的监控人员可以查看这些注释 不过我希望每个用户都有自己的notes表,因为我担心如果有大量不同用户的notes,查找这些内容会很忙 我的想法是,如果我将所有注释存储在一个表中,每个表的外键都是user\u id,如果我必须查找一个用户的所有注释,我必须搜索整个表。其中,如果每个用户都有自己的表,我可以确切地知道该特定用户的所有注

我正在创建一个应用程序,其中一个用户将监视另一个用户的进度。这个监视器可以随着时间的推移而改变,所以我想建立一个记录过程。每个受监控的用户都会有一组与之相关联的注释,未来的监控人员可以查看这些注释


不过我希望每个用户都有自己的notes表,因为我担心如果有大量不同用户的notes,查找这些内容会很忙

我的想法是,如果我将所有注释存储在一个表中,每个表的外键都是
user\u id
,如果我必须查找一个用户的所有注释,我必须搜索整个表。其中,如果每个用户都有自己的表,我可以确切地知道该特定用户的所有注释的位置。 我实现这一点的方法是让一个表用户:

User_Monitored
--------
+user_id
...
另一个单独的表是特定于被监视用户的,假设有很多这样的表

User_Monitored_Notes_(id)
--------------------
+note_id
+note
中间还有第三个表,它引用每个用户及其关联的表

Intermediary_Table
-----------------
+user_id
+User_Monitored_Notes_(id)

有没有更好的办法?我觉得让一个表直接了解数据库结构是不行的。

您需要一个表,如果需要,可以添加用户id索引以提高性能。从数百万行返回结果集的时间以毫秒为单位

注|用户|注

即使使用了单独的表,表名的ID也会存储在User_Monitored中,不需要重复它

如果您确实希望对数据库中的表进行引用,那么它已经自动生成,您可以使用它来确定表是否存在

SELECT * FROM sys.tables

表了解结构-是的,这是一个坏主意,但是
我希望每个用户都有自己的notes表
更奇怪,你能解释一下是什么让你走上了这条思路吗。感觉有一个隐藏的需求不,不,不,不,不!!!那是个糟糕的主意。有了适当的索引,查找一个包含数百万条记录的表的数据是非常快的,没有任何问题,您通常不需要这样做,甚至要利用表名,也需要使用动态SQL,这也是您可能不必求助的东西。“我担心如果有大量注释的话”。你预计会有多少?数据库有数百万。。。数十亿行,这不是问题。如果您使用想要使用的反模式,那么您将浪费更多的时间,而不是等待一些记录返回,如果您使用一个表对其进行正确建模的话。创建一个
notes
表,其中包含一个
user\u id
列,指示注释所属的用户。您总是可以考虑对表进行分区(分区的效率取决于您使用的DBMS)