Лучший способ нормализовать таблицу - PullRequest
0 голосов
/ 17 апреля 2020

Нужны предложения о том, как лучше всего нормализовать следующую таблицу:

Ранее у меня была таблица:

personId    year    dob    column1    column2    column3
--------    ----    ---    -------    -------    -------  

Здесь (personId+year) был основным ключ и столбцы dob, column1, column2 и column3 имели уникальные значения.

Теперь, согласно новому требованию, column1, column2 и column3 будут хранить несколько значений. В очень наивном смысле он должен содержать значения вроде:

personId    year    dob       column1    column2    column3
--------    ----    ------    -------    -------    -------  
       1    2018    2.1.20    A1, A2     B1         C1, C2, C3

Я просто не хочу нормализовать его до первой нормальной формы, но хочу разбить его на несколько таблиц, например:

Таблица 1:

personId    year    dob       
--------    ----    ------    
       1    2018    2.1.20    

Таблица 2:

personId    year    column1   
--------    ----    ------    
       1    2018    A1    
       1    2018    A2

Таблица 3:

personId    year    column2   
--------    ----    ------    
       1    2018    B1  

Таблица 4:

personId    year    column3   
--------    ----    ------    
       1    2018    C1      
       1    2018    C2    
       1    2018    C3

Теперь таблица 1 выглядит хорошо для меня, так как она все еще имеет PK (personId + year), но таблицы 2-3 выглядят не очень элегантно, поскольку в них отсутствует первичный ключ.

Есть ли лучшие способы достичь этого?

1 Ответ

1 голос
/ 18 апреля 2020

Вы рядом. Вы должны ввести новый первичный ключ для первой таблицы, и я бы также порекомендовал первичные ключи для остальных:

Таблица 1:

t1Id   personId    year    dob       
   1       1       2018    2.1.20    

Таблица 2:

t2Id    t1Id    column1   
  1       1      A1    
  2       1      A2

Таблица 3:

t3Id    t1id    column2   
  1       1       B1  

Таблица 4:

t4Id    t1id    column3   
  1       1       C1      
  2       1       C2    
  3       1       C3

Если порядок важен, вы также можете включить столбец последовательной нумерации во все таблицы, кроме первой.

Кроме того, столбцы данных в последних трех таблицах, возможно, должны быть идентификаторами их собственных таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...