我现在正忙于一个我想在大学二年级做的项目.这个项目是关于用户和联系人的,每个用户都可以有许多联系人,许多联系人可以属于许多用户,因为我认为它是一个多到多的关系,我想创建一个user_contact表。用户和联系人之间的关系既可以是朋友,也可以是工作学院或家庭member..the关系,也可以是被动的或主动的状态。我还想跟踪谁最后一次编辑联系人的记录,以及某个用户在哪一天编辑。
该系统将在某一家公司内部使用,系统的全部内容是显示用户与公司以外的联系人之间的关系,例如,john正在寻找适用于可乐的pam,他看到与他一起工作的菲尔也知道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环境并不熟悉,我的问题是,我对it...Any的看法是正确的,建议会很有帮助。
以及如何将用户id从user表链接到user_contact表中的用户id,以及联系人id的相同?
发布于 2013-11-03 11:15:36
版本的联系人应该是一个单独的表,以避免部分依赖。另外,更好的办法是把人交给别人,所以你不需要联系人表,如果你要使用InnoDB,你应该建立外键约束,将person_id从联系人和版本表链接到persons表。就像这样:
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)
);发布于 2013-11-03 11:16:25
要创建的“链接”称为外键,可以在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中,这些约束是否实际执行取决于你选择了哪个存储引擎。InnoDB强制执行,MyIASM没有强制执行。
https://stackoverflow.com/questions/19752237
复制相似问题