사용자 모델이 있다고 가정합니다. 사용자는 몇 가지 활동을 계획 할 수 있습니다. 액티비티 유형의 수는 약 50 개입니다. 모든 액티비티에는 start_time, end_time, user_id 등과 같은 공통 속성이 있습니다. 그러나 각각의 액티비티에는 고유 한 속성이 있습니다.활성 레코드의 문제점
이제 각 활동은 DB의 자체 테이블에 있습니다. 그리고 우리가 같은 끔찍한 SQL 쿼리를 가지고있는 이유는 무엇입니까
SELECT * FROM `first_activities_table` WHERE (`first_activity`.`id` IN (17,18))
SELECT * FROM `second_activities_table` WHERE (`second_activity`.`id` = 17)
.....
SELECT * FROM `n_activities_table` WHERE (`n_activity`.`id` = 44)
약 50 개의 쿼리. 그것은 끔찍한 일입니다.
이 문제를 해결하는 방법은 여러 가지가 있습니다.
- 가장 많은 수의 등록 정보로 활동 유형을 선택하고 '활동'테이블을 작성하고 STI 모델을 작성하십시오. 그러나이 방법으로 우리 컬럼을 불편한 방식으로 명명해야하며 그 테이블의 레코드에는 NULL 필드가있을 수 있습니다.
- 또한 STI 모델이지만 모든 활동 유형에 공통 인 열과 일련 화 된 특성을 갖는 일부 BLOB 열이 있습니다. 그러나 우리는 활동에 대한 몇 가지 조사를해야합니다. 문제가있을 수 있습니다. 그리고 직렬화는 아주 느립니다.
이 문제를 해결하도록 도와주십시오. 어쩌면 내 문제는 내 요구에 맞는 아주 다른 해결책이 될 수 있습니다.
도움 주셔서 감사합니다.
귀하의 솔루션은 STI 인 것 같습니다. 왜 그냥 사용할 수 없습니까? 당신은 추악한 문제가있어서 솔루션이 약간 추악 할뿐입니다. – ryeguy
모든 활동 유형이 매우 다른 속성을 가지고 있다고 가정 해 봅시다. 우리는 어떻게 기둥에 이름을 붙일 것인가? String_1, String_2, Date_1, ... 함께 작업하는 것은 매우 불편합니다. – kshchepelin
활동 테이블의 한 행에 여러 유형의 활동이 포함되지 않습니다. 생각이 있다면 Name_1과 Name_2가 필요합니다. 두 개의 다른 활동에는 이름이 필요하기 때문에 필요하지 않습니다. 단일 행이 단일 유형의 활동을 나타내므로 둘 다 Name 열을 사용할 수 있습니다. – Tilendor