首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql数据库表结构

Mysql数据库表结构
EN

Stack Overflow用户
提问于 2013-11-03 11:06:10
回答 2查看 945关注 0票数 0

我现在正忙于一个我想在大学二年级做的项目.这个项目是关于用户和联系人的,每个用户都可以有许多联系人,许多联系人可以属于许多用户,因为我认为它是一个多到多的关系,我想创建一个user_contact表。用户和联系人之间的关系既可以是朋友,也可以是工作学院或家庭member..the关系,也可以是被动的或主动的状态。我还想跟踪谁最后一次编辑联系人的记录,以及某个用户在哪一天编辑。

该系统将在某一家公司内部使用,系统的全部内容是显示用户与公司以外的联系人之间的关系,例如,john正在寻找适用于可乐的pam,他看到与他一起工作的菲尔也知道pam作为朋友,而且这种关系处于活跃状态。

我现在的桌子结构:

代码语言:javascript
复制
//User table

user_id | username|password|fname|lname|email

//Contact_table
contact_id|fname|lname|contactnumber|email|lastedited|editdate

//User_contact table
id|user_id|contact_id|relationship_type|relationship_state

由于我对mysql环境并不熟悉,我的问题是,我对it...Any的看法是正确的,建议会很有帮助。

以及如何将用户id从user表链接到user_contact表中的用户id,以及联系人id的相同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-03 11:15:36

版本的联系人应该是一个单独的表,以避免部分依赖。另外,更好的办法是把人交给别人,所以你不需要联系人表,如果你要使用InnoDB,你应该建立外键约束,将person_id从联系人和版本表链接到persons表。就像这样:

代码语言:javascript
复制
CREATE TABLE editions (
edit_id INT AUTO_INCREMENT PRIMARY KEY,
contact_id INT,
editor_id INT,
editdate DATE,
FOREIGN KEY (contact_id) REFERENCES contacts(contact_id),
FOREIGN KEY (editor_id) REFERENCES users(person_id)
);

CREATE TABLE contacts (
person_id INT,
contact_id INT,
relationship_type ENUM("friend", "work", "family"),
relationship_state CHAR(1),
FOREIGN KEY (person_id) REFERENCES persons(person_id),
FOREIGN KEY (contact_id) REFERENCES persons(person_id)
);

CREATE TABLE persons (
person_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(15) UNIQUE NOT NULL,
password VARCHAR(15) NOT NULL,
fname VARCHAR(15),
lname VARCHAR(25),
email VARCHAR(50) UNIQUE NOT NULL,
contactnumber VARCHAR(15)
);
票数 0
EN

Stack Overflow用户

发布于 2013-11-03 11:16:25

要创建的“链接”称为外键,可以在CREATE TABLE语句中声明。您还可能希望从id表中删除冗余的User_Contact,并将关系本身声明为主键。例如,

代码语言:javascript
复制
CREATE TABLE User_Contact(
  user_id INT NOT NULL REFERENCES `User`(user_id),
  contact_id INT NOT NULL REFERENCES `Contact`(contact_id),
  -- other columns
  PRIMARY KEY (user_id, contact_id)
);  

这告诉DBMS,user_idUser_Contact中来自User。在MySQL中,这些约束是否实际执行取决于你选择了哪个存储引擎。InnoDB强制执行,MyIASM没有强制执行。

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

https://stackoverflow.com/questions/19752237

复制
相关文章

相似问题

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