いくつかのパターンを考えた上で。
成果物
名字
./sql/create/table/LastNames.sql
create table LastNames( Id int not null, Yomi text not null, Kaki text not null, primary key(Id), unique(Yomi,Kaki) )
名前
性別による分配をどう実装するか。
- 表を分ける
- 列を追加する
- text型
- int型
列を追加する
text型
これを採用した。
create table FirstNames( Id int not null, Yomi text not null, Kaki text not null, Sex text not null, primary key(Id), unique(Yomi,Kaki), check(Sex='m' or Sex='f' or Sex='c' or Sex='mc' or Sex='fc' or Sex='cm' or Sex='cf') )
int型
性別7種をint型で表す。うまく表現できない。わかりにくい等の問題から不採用。
| IsYomi | IsKaki |
|---|---|
| m | m |
| f | f |
| c | c |
| m | c |
| f | c |
| c | m |
| c | f |
3進数2桁。
| yk | 意味 |
|---|---|
| 11 | mm |
| 22 | ff |
| 33 | cc |
| 13 | mc |
| 23 | fc |
| 31 | cm |
| 32 | cf |
2進数3桁。mfc
| Y | K | 意味 |
|---|---|---|
| 100 | 100 | mm |
| 010 | 010 | ff |
| 001 | 001 | cc |
| 100 | 001 | mc |
10進数1桁。7種。
| yk | 意味 |
|---|---|
| 0 | 無効値 |
| 1 | m |
| 2 | f |
| 3 | c |
| 4 | mc |
| 5 | fc |
| 6 | cm |
| 7 | cf |
表を分ける
性別列が不要になるが、性別の制御をテーブル名で行わねばならない。テーブル間におけるunique制約が付与できない、抽出条件がわかりづらいなどの難点から不採用。
- FirstNameMs.sql
- FirstNameFs.sql
- FirstNameCs.sql
- FirstNameMCs.sql
- FirstNameFCs.sql
- FirstNameCMs.sql
- FirstNameCFs.sql
./sql/create/table/FirstNameMs.sql
create table FirstNameMs( Id int not null, Yomi text not null, Kaki text not null, primary key(Id), unique(Yomi,Kaki),
対象環境
- Raspbierry pi 4 Model B
- Raspbian buster 10.0 2019-09-26 ※
- bash 5.0.3(1)-release 学習まとめ
- SQLite 3.33.0 ※ 学習まとめ
$ uname -a Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux