Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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
MySQL:在公共和私有表之间共享id_Mysql_Sql_Conflict_Identifier - Fatal编程技术网

MySQL:在公共和私有表之间共享id

MySQL:在公共和私有表之间共享id,mysql,sql,conflict,identifier,Mysql,Sql,Conflict,Identifier,我正在为mysql数据库建模,但在分离公共数据和私有数据方面存在问题 最简单的方法是将所有私有数据和公共数据相互混合,并通过将“isPrivate”bool设置为true来识别一段私有数据——但我认为这很慢,而且很难维护 现在我有两个表-private和public-但我希望用户能够将其中的私有数据作为公共数据发布到public表中 问题是ID的问题-我不能有两组不同的ID,因为私有行和公共行实际上只是另一个保存主数据内容的表的占位符-如果私有表和公共表具有不同的ID集,会有冲突,因为我使用的是

我正在为mysql数据库建模,但在分离公共数据和私有数据方面存在问题

最简单的方法是将所有私有数据和公共数据相互混合,并通过将“isPrivate”bool设置为true来识别一段私有数据——但我认为这很慢,而且很难维护

现在我有两个表-private和public-但我希望用户能够将其中的私有数据作为公共数据发布到public表中

问题是ID的问题-我不能有两组不同的ID,因为私有行和公共行实际上只是另一个保存主数据内容的表的占位符-如果私有表和公共表具有不同的ID集,会有冲突,因为我使用的是一个自动递增的ID命名方案,而不是仅仅生成一个散列,因为它的进程密集度较低,并且无法获得散列冲突

为了解决ID冲突,公共数据占位符必须更改其ID,这将使其失去对所指向数据的引用

在MySQL中,有没有一种方法可以使外键只与表的某些ID相关,而与另一个ID相关?这意味着我可以在两个表中保持相同的id

也许我可以通过一个函数将使用过的ID同步到两个表中?我不是SQL wizkid这是肯定的

同样,公共和私有表存储对实际数据的引用,这些数据都将在一个巨大的表中。公用表和专用表保存主数据的元数据—是否可以将公用表元数据引用回原始的专用元数据,并停止数据复制

谢谢你抽出时间


Nathan.

为什么不将所有实体数据分组并进行清晰的维护呢。公共/私有逻辑、访问权限等。。通过主程序中的模型来实现。您可以定义程序将使用的私有和公共结构,等等。。。实际上,没有人需要知道如何在数据库级别处理这一问题


也请考虑使用视图来限制访问。示例:为员工创建一个视图,以便在包含所有员工的表中只查看他或她的工资单信息。

我相信这几天我变得相当头晕。我可以在它们之间创建一个外键。我似乎认为,当一个表接受另一个表的外键时,它的库仑会自动填充-我不知道为什么我会这样想


无论如何-是的,使用外键。

为什么isPrivate比2表解决方案慢?isPrivate是一种方法…两个单独的表要痛苦得多。首先,我希望公共数据的元数据与私有数据不同-例如,有多少人查看了数据,数据评级-私有表不需要这些信息-加上公共数据将在webapp前面公布-在同一个表中有公共和私有数据,我将不得不搜索并删除数据-将公共和私有分开。如果它们都在单独的表中,我就不必进行额外的比较,因此对性能更加友好。不过,我将进一步研究提供的解决方案。我不确定您是从哪里了解到布尔字段上的检查是密集的/性能不太友好的,事实并非如此。来自两个不同表的两个select语句要多得多……您会有一个查询同时查看公共和私有数据吗?如果你真的为此而伤心…创建一个公共和私有的“视图”,将数据分开。查看/评级编号可以存储在引用此编号的单独表格中。