6

私がオンラインで読んでいたことから、アクセス時間のために、可能であればデータをより多くのテーブルに分割する方が良いことがわかりました。

現在、ユーザー名、パスワード、および参加日を保存しているテーブルがあります。これが私のテーブルの外観です。

'user'
'user_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
user_username VARCHAR(80) NOT NULL,
user_password VARCHAR(255) NOT NULL,
user_join_date INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (user_id) ');

名、姓、電子メール、年齢、性別を保存するプロファイルと呼ばれる新しいテーブルを作成しようとしています。1対1の関係が必要だと思うので、user_idを使用する必要がありますが、実装方法がよくわかりません。

プロファイルを含むプロファイルという別のテーブルを作成する必要がありますか

profiles_id
first_name
last_name
email
age 
gender

との関係であるべき別のもの?例えば

user_profiles
----------
user_id
profiles_id

これは正しいですか?SQL は user_profiles をどのように探しますか?

ありがとう

4

6 に答える 6

2

ユーザー テーブル ProfileId に新しいフィールドを追加し、それを外部キー (FK) として設定します。ユーザーを作成するたびに、それにプロファイルを割り当てる必要があります (プロファイル テーブルの ProfileId PK になります)。ユーザーのプロフィール情報も見たい場合は、参加する必要があります

Select username, first_name,second_name
From user u, profile p
Where u.profileId = p.profileId 

これ

user_profiles
----------
user_id
profiles_id

多対多の関係で使用されます。たとえば、ある管理者にいくつかの特権を割り当てたいとしますが、それらの特権は他の管理者にも割り当てることができます。この問題を解決するには、3 番目のテーブルを作成する必要があります。以下に例を示しますが、これを行う必要はありません。ここに画像の説明を入力

于 2013-11-03T16:31:02.143 に答える
1

user_idプロファイル テーブルとJOINのテーブルにフィールドを追加できますuser_id

SELECT user.user_username, ..., profiles.first_name, ...
FROM user
INNER JOIN profiles
ON user.user_id = profiles.user_id

これにより、JOIN 条件が満たされた行 (つまりuser.user_id = profiles.user_id) から情報を組み合わせたデータがフェッチされます。

于 2013-11-03T16:22:42.303 に答える