やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

日本人の名字と名前のテーブルをSQLite3で作る

 いくつかのパターンを考えた上で。

成果物

名字

./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),

対象環境

$ uname -a
Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux