Mysql数据库表结构

时间:2013-11-03 11:06:10

标签: mysql

我目前正在忙着一个我想在大学第二年做的项目...这个项目是关于用户和联系人的,每个用户可以有很多联系人,很多联系人可以属于很多用户,因为我看到它作为一个多对多的关系,我想创建一个user_contact表。用户和联系人之间的关系可以是朋友,工作大学或家庭成员......关系也可以是被动状态或活动状态。我还想跟踪谁最后编辑了联系人的记录和某个用户的日期

系统将在某个公司内部使用,系统就是要显示用户与公司外部联系人之间的关系,例如john正在搜索适用于可乐可乐的pam,并且他看到可以使用的phil他也知道pam是朋友,关系处于活跃状态。

我目前的表结构:

//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环境的新手,我的问题是我是否正确地对待它...任何建议都会非常有用..

如何将用户表中的用户ID链接到user_contact表中的用户ID,以及联系人ID的用户ID?

2 个答案:

答案 0 :(得分:0)

联系人的版本应该是一个单独的表,以避免部分依赖。 此外,它更好地把人民,所以你不需要联系人表 如果您打算使用InnoDB,您应该建立外键约束,将person_id从联系人和版本表链接到人员表。 这样的事情:

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)
);

答案 1 :(得分:0)

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

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_id中的User_Contact来自User。在MySQL中,是否实际强制执行这些约束取决于which storage engine you've chosen InnoDB 强制执行; MyIASM 没有。