2016-12-06 2 views
-1

는 :좋은 또는 나쁜 데이터베이스 설계

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_codeslanguages_codesiso 필드를 만들 수 있을까요 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

두 가지 접근법의 장점과 단점 중 일부에 대해서는 대리 키 (https://en.wikipedia.org/wiki/Surrogate_key)에 대한 위키 백과 문서를 참조하십시오. –

답변

1

"better"는 주관적이지만 이미 자연스럽고 합리적으로 짧은 값이있는 경우 자동 생성 ID에는 아무런 의미가 없습니다. 코드를 기본 키로 만들고 자동 생성 ID를 피하십시오.

+2

나는 당신에 동의하지 않는 일부 데이터베이스 전문가를 만났습니다. Google의 "대리 키"가 무슨 의미인지 알 수 있습니다. 다른 모든 열과 독립적으로 키를 사용하면 데이터 값 또는 데이터베이스 디자인의 변경 (데이터베이스를보다 민첩하게 만든)과 고유성을 보장 할 수 있습니다. " –

+2

동의합니다. 너와 함께. 지금 우리가 고유하다고 가정하는 것은 나중에 유일하지 않을 수 있으며, 대리 키는 변경이 이루어져야 할 때 계단식 시스템 변경을 피하는 데 도움이됩니다. 난 단지 필요한 경우에만 복잡성을 추가하는 것을 선호하며, 초기 가정이 사실이 아닐 때 시스템의 나머지 부분을 쉽게 변경할 수 있도록합니다. 그러나 나는 모든 코드가 통제하에있는 곳에서 운영되는 경향이 있으며 모든 코드를 배포 할 수 있습니다. –

+2

그건 공정한 관찰 댄. 너무 많은 사람들이 "단지의 경우"의 복잡성을 넣고 조기에 문제를 복잡하게 만듭니다. –