首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql与外键相反

问mysql与外键相反
EN

Stack Overflow用户
提问于 2012-03-09 03:48:01
回答 2查看 908关注 0票数 1

我有2个表,客户和附属公司。我需要确保customers.email和affiliates.email是独占的。换句话说,一个人不能既是客户又是附属公司。它基本上是外键的对立面。有没有办法做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2012-03-09 03:50:18

没有键可以做到这一点,但听起来你不应该使用两个表。相反,您可以有一个表包含customer/affiliate数据(在此表中必须是唯一的)和另一个包含类型(customer/affiliate)的表。

代码语言:javascript
复制
CREATE TABLE People (
   pplid,
   pplEmail,
   ptid,
   UNIQUE KEY (pplEmail)
)
CREATE TABLE PeopleType (
   ptid,
   ptType
)
INSERT INTO PeopleType VALUES (1, 'affiliates'), (2, 'customers');
票数 1
EN

Stack Overflow用户

发布于 2012-03-09 04:01:48

您可以尝试以下操作。创建一个新表,它将成为客户和附属公司的主目录:

代码语言:javascript
复制
CREATE TABLE party
( 
  id int not null auto_increment primary key ,
  party_type enum('customer','affiliate') not null,
  email varchar(100),
  UNIQUE (id,party_type)
);
--Then
CREATE TABLE customer
(
   ....
   party_id INT NOT NULL,
   party_type enum('customer') NOT NULL DEFAULT 'customer',
   PRIMARY KEY (party_id,party_type)
   FOREIGN KEY (party_id,party_type) REFERENCES party(id,party_type)
);
CREATE TABLE affiliates
(
   ....
   party_id INT NOT NULL,
   party_type enum('affiliate') NOT NULL DEFAULT 'affiliate',
   PRIMARY KEY (party_id,party_type)
   FOREIGN KEY (party_id,party_type) REFERENCES party(id,party_type)
)
-- enum is used because mysql still doesn't have CHECK constraints  

这样,每一方只能是一种类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9623857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档