【问题标题】:don't repeat entry row from two different table不要重复来自两个不同表的条目行
【发布时间】:2015-06-27 12:11:00
【问题描述】:

我创建了两个数据库(使用 XAMPP 的 php),一个用于员工(id、name),另一个用于管理员(id、name)。 两个表中的 id 是主键,我需要在两个表之间建立一个关系,其中 id 不重复。例如:admin(1,a)uses id = 1 不应该在员工表中使用

请帮忙

【问题讨论】:

  • 抱歉,不清楚您要问什么。试着解释你想做什么。不是您尝试的技术如何,而是您的目标。
  • 现在你明白了吗??
  • 并非如此。我确实了解您希望将管理员存储在另一个表中的一个人和其他人中。但尚不清楚您要建模哪种类型的关系以及为什么要将人员存储在不同的表中。

标签: mysql database xampp


【解决方案1】:

解决这个问题的规范方法是使用一个单个表。这使得保持id 值不同变得非常容易。

您可以包含 discriminator 列,该列指示一行是代表“员工”还是“管理员”。在您的示例中,有两个可能的值。

 CREATE TABLE employee 
 ( id     INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT 'pk'
 , ename  VARCHAR(50) NOT NULL
 , admin  TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'boolean'
 )   

一些示例数据,用于说明:

 id  ename             admin
 --- ---------------- -------
 42  Barney Rubble     0 
 43  Fred Flintstone   0 
 17  Mr. Slate         1

示例查询:

-- select "employee" rows
SELECT id, ename FROM employee WHERE admin=0

-- select "administrator" rows
SELECT id, ename FROM employee WHERE admin 

如果您需要两个单独的表,您询问过

底线是 MySQL 中没有可用的声明性约束将强制两个表之间的 id 值彼此“不同”。

为此,您必须“推出自己的”解决方案。而且该解决方案并非微不足道,它可能相当复杂。

对于更简单的问题有一些解决方案,自动生成唯一的id 值。但要真正实现唯一性,没有简单的方法可以做到这一点。

您的目标是否只是强制执行一个约束,如果 INSERT 和 UPDATE 语句试图违反该约束将引发错误,您将需要编写触发器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    相关资源
    最近更新 更多