1 対 1 の関係がある場合にデータベース テーブルにデータを配置するための正しい/最も効率的な方法について混乱しています。
たとえば、users テーブルがあります。
私は今、各ユーザーが自分の現在の国の場所を述べられるようにしたいと考えています.
次に、現在の場所でユーザーのデータテーブルを検索できるようにしたいと考えています。
私がこれを行った方法は、3 つの別々のテーブルを作成することです。すなわち
表 1 - users : ユーザー情報のみが含まれます。
CREATE TABLE users(
id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
firstName VARCHAR(30) NOT NULL,
lastName VARCHAR(40) NOT NULL,
);
表 2 の国リスト: 国と各国の ID のリスト
PHP Code:
CREATE TABLE countrylist(
country_id MEDIUMINT UNSIGNED NOT NULL,
country VARCHAR(60) NOT NULL,
INDEX country_id ( country_id, country ),
INDEX countrylist (country, country_id ),
UNIQUE KEY (country)
);
表 3; userId と彼が住んでいる countryId が含まれています。
PHP Code:
CREATE TABLE user_countrylocation(
country_id VARCHAR(60) NOT NULL,
id MEDIUMINT UNSIGNED NOT NULL,
INDEX country_id (country_id, id ),
INDEX user_id (id, country_id )
);
または、countryId を users テーブルに配置して、user_countrylocation を完全に削除する必要があります。つまり、各ユーザーの列に、彼が住んでいる国の country_id を配置します。
問題は、ユーザーの詳細を示す、上記と同様のテーブルが 20 以上あることです。つまり、話されている言語、年齢層、国籍などです。
私の懸念は、この一意の情報を user テーブルの各 users 列に配置した場合、データベースを検索する最も効率的な方法は何かということです。それが、上記のスタイルを選択した理由です。
ですから、データベースを計画するための最も効率的で正しい方法についてアドバイスをお願いします。