0

私は現在、大学の 2 年生でやりたいプロジェクトで忙しいです... プロジェクトはすべてユーザーと連絡先に関するものです。各ユーザーは多くの連絡先を持つことができ、多くの連絡先は多くのユーザーに属することができます。多対多の関係 user_contact テーブルを作成したいと考えています。ユーザーと連絡先の関係は、友人、職場の大学、または家族のいずれかです.関係は、受動的またはアクティブな状態のいずれかになります.また、連絡先の記録を最後に編集したのは誰かを追跡したいと考えています。特定のユーザーによる日付

このシステムは特定の会社の内部で使用され、システムはユーザーが社外の連絡先と持っている関係を示すことを目的としています。友人としてのパムと関係はアクティブな状態にあります..

私の現在のテーブル構造:

//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環境に慣れていないので、私の質問は、私はそれについて正しい道を進んでいるということです...どんなアドバイスも非常に役に立ちます..

また、user テーブルのユーザー ID を user_contact テーブルのユーザー ID にリンクするにはどうすればよいですか?

4

2 に答える 2

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)
);
于 2013-11-03T11:15:36.147 に答える
0

作成したい「リンク」は外部キー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)
);  

user_idこれは、User_Contactが から来たことを DBMS に伝えUserます。MySQL では、これらの制約が実際に適用されるかどうかは、選択したストレージ エンジンによって異なりますInnoDBはそれらを強制します。MyIASMはそうではありません。

于 2013-11-03T11:16:25.027 に答える