我有以下迁移:
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])
将iso
和countries_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
答案 0 :(得分:1)
“更好”是主观的,但是当已经存在自然唯一且合理地短的值时,自动生成的ID中没有意义。将代码作为主键并避免自动生成的ID。