【发布时间】:2016-12-06 23:21:13
【问题描述】:
我有以下迁移:
create table(:countries_codes) do
add :iso, :string, size: 2
add :name, :string
timestamps
end
create unique_index(:countries_codes, [:iso])
create table(:languages_codes) do
add :iso, :string, size: 2
add :name, :string
timestamps
end
create unique_index(:languages_codes, [:iso])
create table(:countries) do
add :country_iso_id, references(:countries_codes)
add :language_iso_id, references(:languages_codes)
add :name, :string
timestamps
end
create unique_index(:countries, [:country_iso_id, :language_iso_id])
将countries_codes 和languages_codes 上的iso 字段作为主键,禁用自动生成的id 字段会更好吗?
create table(:languages_codes, primary_key: false) do
add :iso, :string, size: 2, primary_key: true
add :name, :string
timestamps
end
create table(:countries, primary_key: false) do
add :country_iso, references(:countries_codes, column: :iso, type: :string), primary_key: true
add :language_iso, references(:languages_codes, column: :iso, type: :string), primary_key: true
add :name, :string
timestamps
end
create table(:countries_codes, primary_key: false) do
add :iso, :string, size: 2, primary_key: true
add :name, :string
timestamps
end
【问题讨论】:
-
我认为“更好”在这里是一个相对术语,不同的人会根据自己的需要做不同的事情。正因为如此,我投票结束这个,因为我认为答案将基于意见。
-
尝试查看有关代理键 (en.wikipedia.org/wiki/Surrogate_key) 的*文章,了解这两种方法的一些优缺点。
标签: postgresql elixir ecto