数据库设计的好坏

时间:2016-12-06 15:09:18

标签: postgresql elixir ecto

我有以下迁移:

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])

isocountries_codes上的languages_codes字段作为主键,禁用自动生成的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

1 个答案:

答案 0 :(得分:1)

“更好”是主观的,但是当已经存在自然唯一且合理地短的值时,自动生成的ID中没有意义。将代码作为主键并避免自动生成的ID。