データの保存と取得の方法を教えてください。MySql と Php を使用しています。ルックアップ テーブルは理想的でしょうか?
国、州、都市を保存するには、正規化されたデータベース スキーマを使用する必要があります。国には州があります。州には都市があります。ジャンクション テーブルが必要です。
または、テキスト型の列に json 形式ですべての場所 ID およびストアをグランドに入れることはできますか?
いいえ、それは通常のフォームではありません。そして、それは多くの問題を引き起こします。簡単に CRUD 操作を実行することはできません。
データベース スキーマ
create table countires(name varchar(100) primary key);
create table sates(name varchar(100) primary key, country varchar(100), foreign key `country` references `countries`(`name`));
create table cities(name varchar(100) primary key, state varchar(100), foreign key `state` references `states`(`name`));
これで、これらのテーブルに対してさまざまな種類のクエリを実行できます。ユーザーが都市 ( city1
、city2
)、国cntry1
、州を選択したとしますstt2
。
クエリ
ユーザーが選択したすべての都市を検索します。
SELECT ct.name
FROM cities AS ct
JOIN states AS st
ON ( st.name = city.state )
JOIN countries AS cn
ON ( cn.name = st.country )
WHERE ct.name IN ( 'city1', 'city2' )
OR cn.name = 'cntry1'
OR st.name = 'stt2';
ユーザーが選択したすべての州を検索します。
SELECT st.name
FROM states AS st
JOIN countries AS cn
ON ( cn.name = st.country )
WHERE OR cn.name = 'cntry1'
OR st.name = 'stt2';
更新 1
ユーザーとの関係を維持するには?
ジャンクション テーブルが必要です。3つ作るだけ。
create table users(name varchar(100) primary key);
CREATE TABLE user_countries
(
user VARCHAR(100),
country VARCHAR(100),
PRIMARY KEY (`user`, `country`),
FOREIGN KEY (`user`) REFERENCES `users`(`name`)
FOREIGN KEY (`counry`) REFERENCES `countries`(`name`)
);
CREATE TABLE user_states
(
user VARCHAR(100),
state VARCHAR(100),
PRIMARY KEY (`user`, `state`),
FOREIGN KEY (`user`) REFERENCES `users`(`name`)
FOREIGN KEY (`state`) REFERENCES `states`(`name`)
);
CREATE TABLE user_cities
(
user VARCHAR(100),
city VARCHAR(100),
PRIMARY KEY (`user`, `city`),
FOREIGN KEY (`user`) REFERENCES `users`(`name`)
FOREIGN KEY (`city`) REFERENCES `cities`(`name`)
);