Php MySQL数据库唯一字段(非表唯一)

Php MySQL数据库唯一字段(非表唯一),php,mysql,field,unique,Php,Mysql,Field,Unique,我建立了一个数据库,为不同的项目建立了8个不同的表。我这样做是因为每个表都是一个类别,每个项目都有不同的字段,所以我无法将它们全部设置为一个表。我遇到的问题是,我需要itemID字段在所有表中都是唯一的。不仅仅是每个表的唯一性 例如,如果管理员在1个表中添加一个项,则该项的itemID不能与其他表中的另一项重复,否则会给我带来问题。请帮我把这个设置好。我可以直接在数据库中执行此操作吗?或者我需要制作一个php脚本来检查项目编号是否已经存在 我希望我的解释是正确的 创建一个表来保存全局唯一字段,这

我建立了一个数据库,为不同的项目建立了8个不同的表。我这样做是因为每个表都是一个类别,每个项目都有不同的字段,所以我无法将它们全部设置为一个表。我遇到的问题是,我需要itemID字段在所有表中都是唯一的。不仅仅是每个表的唯一性

例如,如果管理员在1个表中添加一个项,则该项的itemID不能与其他表中的另一项重复,否则会给我带来问题。请帮我把这个设置好。我可以直接在数据库中执行此操作吗?或者我需要制作一个php脚本来检查项目编号是否已经存在


我希望我的解释是正确的

创建一个表来保存全局唯一字段,这将是父表

使所有其他全局唯一字段成为指向新表(字段)的外键,这些将是子表

在插入时,请确保在插入子表之前始终将新值插入父表(否则将导致完整性冲突)

更新时,请确保始终只更新父表中的唯一字段,而不更新子表中的唯一字段


在子表中的外键上添加另一个唯一约束,使它们不能指向相同的父表值。

您可以生成一个唯一id(如GUID)并将其用作键(或作为备用唯一键)。或者创建一个名为say Entities的表,其中包含唯一id,然后向其添加外键。 其思想是,插入到实体中,获取您的id,然后使用该id插入到子表中


我打赌你不会再犯这个错误了(

最简单的方法是将每个PK转换为使用a。有一篇文章讨论了IDs与GUID的相对优点。有 是MySQL中要生成的一个函数。注意,我从未使用过这个函数,我知道它在复制方面确实存在一些问题,尽管我相信这些问题在最近的版本中已经得到了修复

实现这一点的另一种方法是使用一个单独的表来控制实体本身,并使用一个自动增量来保持ID的唯一性。然后每个单独的表都会引用此表。这在保持数据完整性的应用程序逻辑方面稍微复杂一些,但这是可能的

或者,您可以使用第二个选项的主表和另一个包含不同类别参数的键/值对的表。如果额外的参数都是主实体信息的次要参数(不同类别之间没有变化),这可能是一个不错的选项

哪个选项最适合您实际上取决于您的数据模型和用例的结构和语义(即您最常以何种方式访问数据)


还有更多关于MySQL的信息。当然,如果你愿意在MySQL之外寻找,那么有各种各样的NoSQL数据库更适合这种情况。

听起来你应该重新考虑整个结构,如果不是很晚的话。